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

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

[elpa] new-website b2327c0: Merge branch 'master' into new-website


From: Nicolas Petton
Subject: [elpa] new-website b2327c0: Merge branch 'master' into new-website
Date: Wed, 30 Nov 2016 10:12:07 +0000 (UTC)

branch: new-website
commit b2327c0090fab0c33d274cb20f7a079ac31c1555
Merge: cf17f8b 276be67
Author: Nicolas Petton <address@hidden>
Commit: Nicolas Petton <address@hidden>

    Merge branch 'master' into new-website
---
 copyright_exceptions                               |    1 -
 externals-list                                     |    2 +
 packages/ada-mode/NEWS                             |   27 +
 packages/ada-mode/README                           |    2 +-
 packages/ada-mode/ada-build.el                     |    3 +-
 packages/ada-mode/ada-gnat-compile.el              |    8 +-
 packages/ada-mode/ada-gnat-xref.el                 |   15 +-
 packages/ada-mode/ada-grammar-wy.el                | 2422 ++++++++++----------
 packages/ada-mode/ada-mode.el                      |   43 +-
 packages/ada-mode/ada-mode.info                    |   46 +-
 packages/ada-mode/ada-mode.texi                    |   20 +-
 packages/ada-mode/ada-wisi-opentoken.el            |   19 +-
 packages/ada-mode/ada-wisi.el                      | 1965 +++++++---------
 packages/ada-mode/gnat-core.el                     |   10 +-
 packages/ada-mode/gpr-query.el                     |   13 +-
 packages/ada-mode/gpr-wisi.el                      |   25 +-
 packages/aggressive-indent/aggressive-indent.el    |   23 +-
 packages/async/async.el                            |   36 +
 packages/async/dired-async.el                      |    2 +-
 packages/beacon/beacon.el                          |   15 +-
 packages/company/NEWS.md                           |   13 +
 packages/company/company-dabbrev-code.el           |    2 +-
 packages/company/company-files.el                  |   42 +-
 packages/company/company-gtags.el                  |    3 +-
 packages/company/company-keywords.el               |   10 +
 packages/company/company-tests.el                  |    5 +-
 packages/company/company.el                        |  122 +-
 packages/company/test/files-tests.el               |   48 +
 packages/company/test/frontends-tests.el           |   12 +-
 packages/debbugs/Debbugs.wsdl                      |    4 +-
 packages/debbugs/README                            |   10 +-
 packages/debbugs/debbugs-browse.el                 |    2 +-
 packages/debbugs/debbugs-gnu.el                    |   47 +-
 packages/debbugs/debbugs-org.el                    |   19 +-
 packages/debbugs/debbugs-ug.info                   |   14 +-
 packages/debbugs/debbugs-ug.texi                   |    6 +-
 packages/debbugs/debbugs.el                        |   12 +-
 packages/debbugs/debbugs.info                      |   20 +-
 packages/debbugs/debbugs.texi                      |   10 +-
 packages/el-search/el-search-x.el                  |  293 ++-
 packages/el-search/el-search.el                    | 1990 ++++++++++------
 packages/excorporate/NEWS                          |    6 +
 packages/excorporate/excorporate.el                |    7 +-
 packages/excorporate/excorporate.texi              |    6 +-
 packages/ggtags/README.rst                         |   36 +-
 packages/ggtags/ggtags.el                          |  145 +-
 packages/highlight-escape-sequences/README.md      |   15 +
 .../highlight-escape-sequences.el                  |  250 ++
 .../highlight-escape-sequences.png                 |  Bin 0 -> 20292 bytes
 packages/metar/metar.el                            |   32 +-
 packages/nameless/nameless.el                      |    6 +-
 packages/parsec/.gitignore                         |    3 +
 packages/parsec/README.org                         |  378 +++
 packages/parsec/examples/full-csv-parser-tests.el  |   51 +
 packages/parsec/examples/full-csv-parser.el        |   61 +
 packages/parsec/examples/pjson-tests.el            |  102 +
 packages/parsec/examples/pjson.el                  |  124 +
 packages/parsec/examples/scheme-tests.el           |   88 +
 packages/parsec/examples/scheme.el                 |  108 +
 .../parsec/examples/simple-csv-parser-tests.el     |   39 +
 packages/parsec/examples/simple-csv-parser.el      |   55 +
 packages/parsec/examples/url-str-parser-tests.el   |   48 +
 packages/parsec/examples/url-str-parser.el         |   56 +
 packages/parsec/parsec-tests.el                    |  481 ++++
 packages/parsec/parsec.el                          | 1042 +++++++++
 packages/seq/seq-24.el                             |    7 +
 packages/seq/seq-25.el                             |    9 +-
 packages/seq/seq.el                                |    2 +-
 packages/seq/tests/seq-tests.el                    |   15 +
 packages/sml-mode/sml-mode.el                      |    1 -
 packages/sml-mode/testcases.sml                    |    7 +-
 packages/sotlisp/sotlisp.el                        |   21 +-
 packages/spinner/spinner.el                        |    4 +-
 packages/stream/stream.el                          |   40 +-
 packages/url-http-ntlm/url-http-ntlm.el            |   78 +-
 packages/validate/validate.el                      |    8 +-
 packages/wisi/NEWS                                 |    6 +
 packages/wisi/README                               |    2 +-
 packages/wisi/wisi.el                              |   28 +-
 packages/yasnippet/.travis.yml                     |    7 +
 packages/yasnippet/CONTRIBUTING.md                 |    2 +-
 packages/yasnippet/NEWS                            |   50 +-
 packages/yasnippet/README.mdown                    |   14 +-
 packages/yasnippet/Rakefile                        |    6 +-
 packages/yasnippet/doc/index.org                   |    2 +-
 packages/yasnippet/doc/nav-menu.html.inc           |    2 +-
 packages/yasnippet/doc/snippet-development.org     |   23 +-
 packages/yasnippet/doc/snippet-expansion.org       |    6 +-
 packages/yasnippet/yasnippet-tests.el              |  238 +-
 packages/yasnippet/yasnippet.el                    |  676 +++---
 packages/ztree/ztree-diff-model.el                 |   25 +-
 packages/ztree/ztree-diff.el                       |    2 +
 packages/ztree/ztree-dir.el                        |    9 +-
 packages/ztree/ztree-util.el                       |   14 +
 packages/ztree/ztree.el                            |    2 +-
 95 files changed, 8009 insertions(+), 3817 deletions(-)

diff --git a/copyright_exceptions b/copyright_exceptions
index 563cab3..da73782 100644
--- a/copyright_exceptions
+++ b/copyright_exceptions
@@ -18,7 +18,6 @@
 ./ada-mode/gpr-skel.el:  "Insert a file header comment, with automatic 
copyright year and prompt for copyright owner/license.
 ./ada-mode/gpr-skel.el:  "{copyright_license}\n"
 ./auctex/latex.el:   "pounds" "copyright"
-./auctex/multi-prompt.el
 ./auctex/plain-tex.el:   "copyright"
 ./auctex/style/amsart.el
 ./auctex/style/amsbook.el
diff --git a/externals-list b/externals-list
index 00dffd4..f520721 100644
--- a/externals-list
+++ b/externals-list
@@ -58,6 +58,7 @@
  ("ggtags"             :subtree "https://github.com/leoliu/ggtags";)
  ("gnome-c-style"      :subtree "https://github.com/ueno/gnome-c-style.git";)
  ("gnorb"               :subtree "https://github.com/girzel/gnorb";)
+ ("highlight-escape-sequences" :subtree 
"https://github.com/dgutov/highlight-escape-sequences/";)
  ("hyperbole"           :external 
"http://git.savannah.gnu.org/r/hyperbole.git";)
  ("ioccur"             :subtree 
"https://github.com/thierryvolpiatto/ioccur.git";)
  ("js2-mode"           :subtree "https://github.com/mooz/js2-mode.git";)
@@ -69,6 +70,7 @@
  ("ntlm"               :core "lisp/net/ntlm.el")
  ("on-screen"           :subtree 
"https://github.com/michael-heerdegen/on-screen.el.git";)
  ("pabbrev"             :external "https://github.com/phillord/pabbrev.git";)
+ ("parsec"              :subtree 
"https://github.com/cute-jumper/parsec.el.git";)
  ("pinentry"           :subtree "https://github.com/ueno/pinentry-el.git";)
  ("python"             :core "lisp/progmodes/python.el")
  ;;FIXME:("org"                :external ??) ;; Need to introduce snapshots!!
diff --git a/packages/ada-mode/NEWS b/packages/ada-mode/NEWS
index 90a0ad4..328c436 100644
--- a/packages/ada-mode/NEWS
+++ b/packages/ada-mode/NEWS
@@ -7,7 +7,34 @@ Please send Emacs Ada mode bug reports to address@hidden, with
 'ada-mode' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* Ada mode 5.2.1
+31 Oct 2016
+
+** A line starting with '(' is now always indented with
+   ada-indent-broken. Previously, in some cases it was indented by
+   ada-indent - 1. Since the defaults set ada-indent = 3,
+   ada-indent-broken = 2, this is transparent unless you use other
+   values.
+
+** GPR_PROJECT_PATH is set in the compilation process environment when
+   the Ada project is selected, and cleared when the project is
+   deselected. This allows selecting other Emacs projects, then
+   returning to an Ada project.
+
+** New function ada-show-local-references (bound to C-c C-l) searches
+   for references within the current file only.
+
+** New option ada-xref-full-path (default nil) if t, shows full paths
+   in cross references.
+
+** The indentation functions are significantly rewritten to make them
+   better organized and easier to understand and maintain. This
+   resulted in some minor indentation changes, mostly for consistency;
+   in particular, case expressions are indented by ada-indent-broken,
+   to match if espressions.
+
 * Ada mode 5.2.0
+26 Jul 2016
 
 ** GNAT 2016 drops support for 'gnat find'; users must use gpr_query.
 
diff --git a/packages/ada-mode/README b/packages/ada-mode/README
index 03ccda9..384e3ef 100755
--- a/packages/ada-mode/README
+++ b/packages/ada-mode/README
@@ -1,4 +1,4 @@
-Emacs Ada mode version 5.2.0
+Emacs Ada mode version 5.2.1
 
 Ada mode requires Emacs 24.2 or greater
 
diff --git a/packages/ada-mode/ada-build.el b/packages/ada-mode/ada-build.el
index 6b28042..c166edd 100644
--- a/packages/ada-mode/ada-build.el
+++ b/packages/ada-mode/ada-build.el
@@ -37,6 +37,7 @@
 (require 'ada-mode-compat-24.2)
 
 (require 'ada-mode)
+(require 'cl-lib)
 
 ;;;; User customization
 
@@ -249,7 +250,7 @@ If CONFIRM or `ada-build-confirm-command' are non-nil, ask 
for
 user confirmation of the command, using PROMPT."
   (ada-build-require-project-file)
   (let ((cmd (ada-prj-get prj-field))
-       (process-environment (ada-prj-get 'proc_env)))
+       (process-environment (cl-copy-list (ada-prj-get 'proc_env))))
 
     (unless cmd
       (setq cmd '("")
diff --git a/packages/ada-mode/ada-gnat-compile.el 
b/packages/ada-mode/ada-gnat-compile.el
index c0d2156..9582f84 100755
--- 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 - 2015  Free Software Foundation, Inc.
+;;; Copyright (C) 2012 - 2016  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
@@ -34,6 +34,7 @@
 ;; By default, ada-mode is configured to load this file, so nothing
 ;; special needs to done to use it.
 
+(require 'cl-lib)
 (require 'compile)
 (require 'gnat-core)
 
@@ -589,6 +590,10 @@ Prompt user if more than one."
   ;;
   ;; find error locations in .gpr files
   (setq compilation-search-path (append compilation-search-path (ada-prj-get 
'prj_dir)))
+  (setq compilation-environment
+       (list
+        (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))))
+          (concat "GPR_PROJECT_PATH=" (getenv "GPR_PROJECT_PATH")))))
 
   ;; must be after indentation engine setup, because that resets the
   ;; indent function list.
@@ -608,6 +613,7 @@ Prompt user if more than one."
   (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize 
ada-syntax-propertize-hook))
 
   ;; don't need to delete from compilation-search-path; completely rewritten 
in ada-select-prj-file
+  (setq compilation-environment nil)
 
   (setq ada-mode-hook (delq 'gnatprep-setup ada-mode-hook))
 
diff --git a/packages/ada-mode/ada-gnat-xref.el 
b/packages/ada-mode/ada-gnat-xref.el
index 58719a5..85ffcef 100755
--- a/packages/ada-mode/ada-gnat-xref.el
+++ b/packages/ada-mode/ada-gnat-xref.el
@@ -139,28 +139,31 @@
                     )
     ))
 
-(defun ada-gnat-xref-all (identifier file line col)
+(defun ada-gnat-xref-all (identifier file line col local-only)
   "For `ada-xref-all-function'."
   ;; we use `compilation-start' to run gnat, not `gnat-run', so it
   ;; is asynchronous, and automatically runs the compilation error
   ;; filter.
 
-  (let* ((cmd (format "%sgnat find -a -r %s:%s:%d:%d"
+  (let* ((cmd (format "%sgnat find -a -r %s %s:%s:%d:%d %s"
                       (or (ada-prj-get 'target) "")
-                      identifier file line col)))
+                     (if ada-xref-full-path "-f" "")
+                      identifier file line col (if local-only file ""))))
 
     (with-current-buffer (gnat-run-buffer); for default-directory
-      (let ((compilation-environment (ada-prj-get 'proc_env))
-           (compilation-error "reference")
+      (let ((compilation-error "reference")
            ;; gnat find uses standard gnu format for output, so don't
            ;; need to set compilation-error-regexp-alist
            )
+       ;; compilation-environment is buffer-local; don't set in 'let'
+       (setq compilation-environment (ada-prj-get 'proc_env))
+
        (when (ada-prj-get 'gpr_file)
          (setq cmd (concat cmd " -P" (file-name-nondirectory (ada-prj-get 
'gpr_file)))))
 
        (compilation-start cmd
                           'compilation-mode
-                          (lambda (name) (concat name "-gnatfind")))
+                          (lambda (name) (concat "*" name "-gnatfind*")))
     ))))
 
 ;;;;; setup
diff --git a/packages/ada-mode/ada-grammar-wy.el 
b/packages/ada-mode/ada-grammar-wy.el
index be0c5f7..f98d8b9 100755
--- a/packages/ada-mode/ada-grammar-wy.el
+++ b/packages/ada-mode/ada-grammar-wy.el
@@ -215,7 +215,7 @@
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
-       ((LEFT_PAREN expression WITH association_list RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt WITH association_list RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 statement-other 5 close-paren])
         (wisi-containing-action 1 2)
@@ -225,7 +225,7 @@
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
-       ((LEFT_PAREN expression WITH NULL RECORD RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt WITH NULL RECORD RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 statement-other 6 close-paren])
         (wisi-containing-action 1 2)
@@ -250,7 +250,7 @@
         (wisi-containing-action 2 3)
         (wisi-containing-action 5 6))))
       (aspect_clause
-       ((FOR attribute_reference USE expression SEMICOLON )
+       ((FOR attribute_reference USE expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
         (wisi-containing-action 3 4)))
@@ -264,18 +264,15 @@
         (wisi-statement-action [1 statement-other])
         (wisi-containing-action 1 2))))
       (assignment_statement
-       ((name COLON_EQUAL expression SEMICOLON )
+       ((name COLON_EQUAL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 4 
statement-end])
         (wisi-containing-action 2 3))))
       (association_opt
        (())
-       ((CHARACTER_LITERAL EQUAL_GREATER expression )
-        (progn
-        (wisi-statement-action [2 statement-other])
-        (wisi-containing-action 2 3)))
+       ((CHARACTER_LITERAL EQUAL_GREATER expression_opt ))
        ((CHARACTER_LITERAL EQUAL_GREATER BOX ))
-       ((discrete_choice_list EQUAL_GREATER expression )
+       ((discrete_choice_list EQUAL_GREATER expression_opt )
         (progn
         (wisi-statement-action [2 statement-other])
         (wisi-containing-action 2 3)))
@@ -294,7 +291,7 @@
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 5))))
       (at_clause
-       ((FOR direct_name USE AT expression SEMICOLON )
+       ((FOR direct_name USE AT expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 4 statement-other 6 
statement-end])
         (wisi-containing-action 4 5))))
@@ -331,13 +328,13 @@
        ((task_body_stub ))
        ((protected_body_stub )))
       (case_expression
-       ((CASE expression IS case_expression_alternative_list )
+       ((CASE expression_opt IS case_expression_alternative_list )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4))))
       (case_expression_alternative
-       ((WHEN discrete_choice_list EQUAL_GREATER expression )
+       ((WHEN discrete_choice_list EQUAL_GREATER expression_opt )
         (progn
         (wisi-statement-action [1 block-middle 3 statement-other])
         (wisi-containing-action 1 3)
@@ -346,8 +343,7 @@
        ((case_expression_alternative ))
        ((case_expression_alternative_list COMMA case_expression_alternative )
         (progn
-        (wisi-statement-action [2 list-break])
-        (wisi-containing-action 2 3))))
+        (wisi-statement-action [2 list-break]))))
       (case_statement
        ((CASE expression_opt IS case_statement_alternative_list END CASE 
SEMICOLON )
         (progn
@@ -408,7 +404,7 @@
        ((component_clause ))
        ((component_clause_list component_clause )))
       (component_declaration
-       ((identifier_list COLON component_definition COLON_EQUAL expression 
aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON component_definition COLON_EQUAL expression_opt 
aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 4 
statement-other 7 statement-end])
         (wisi-containing-action 2 3)
@@ -478,7 +474,7 @@
        ((generic_declaration ))
        ((generic_instantiation ))
        ((null_procedure_declaration ))
-       ((identifier_list COLON CONSTANT COLON_EQUAL expression SEMICOLON )
+       ((identifier_list COLON CONSTANT COLON_EQUAL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-end])
         (wisi-containing-action 1 5)))
@@ -499,11 +495,11 @@
       (delay_alternative
        ((delay_statement sequence_of_statements_opt )))
       (delay_statement
-       ((DELAY UNTIL expression SEMICOLON )
+       ((DELAY UNTIL expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 4 statement-end])
         (wisi-containing-action 1 3)))
-       ((DELAY expression SEMICOLON )
+       ((DELAY expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-containing-action 1 2))))
@@ -547,9 +543,9 @@
         (wisi-containing-action 1 2))))
       (discriminant_specification_opt
        (())
-       ((identifier_list COLON null_exclusion_opt_name_type COLON_EQUAL 
expression ))
+       ((identifier_list COLON null_exclusion_opt_name_type COLON_EQUAL 
expression_opt ))
        ((identifier_list COLON null_exclusion_opt_name_type ))
-       ((identifier_list COLON access_definition COLON_EQUAL expression ))
+       ((identifier_list COLON access_definition COLON_EQUAL expression_opt ))
        ((identifier_list COLON access_definition )))
       (discriminant_specification_list
        ((discriminant_specification_opt ))
@@ -558,7 +554,7 @@
         (wisi-statement-action [2 list-break])
         (wisi-containing-action 2 3))))
       (elsif_expression_item
-       ((ELSIF expression THEN expression )
+       ((ELSIF expression_opt THEN expression_opt )
         (progn
         (wisi-statement-action [1 statement-other 3 block-middle])
         (wisi-containing-action 1 2)
@@ -622,8 +618,8 @@
       (enumeration_representation_clause
        ((FOR name USE aggregate SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
-        (wisi-containing-action 3 4)
+        (wisi-statement-action [1 statement-start 5 statement-end])
+        (wisi-containing-action 1 4)
         (wisi-face-action [2 font-lock-type-face]))))
       (enumeration_type_definition
        ((LEFT_PAREN enumeration_literal_list RIGHT_PAREN )
@@ -661,8 +657,8 @@
       (exit_statement
        ((EXIT identifier_opt WHEN expression_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 3 statement-other 5 
statement-end])
-        (wisi-containing-action 3 4)))
+        (wisi-statement-action [1 statement-start 5 statement-end])
+        (wisi-containing-action 1 4)))
        ((EXIT identifier_opt SEMICOLON )
         (wisi-statement-action [1 statement-start 3 statement-end])))
       (expression
@@ -674,7 +670,9 @@
        ((relation_xor_list )))
       (expression_opt
        (())
-       ((expression )))
+       ((expression )
+        (wisi-statement-action [1 expression-start])
+        (wisi-containing-action 1 1)))
       (expression_function_declaration
        ((overriding_indicator_opt function_specification IS paren_expression 
aspect_specification_opt SEMICOLON )
         (progn
@@ -682,7 +680,7 @@
         (wisi-containing-action 3 4)
         (wisi-containing-action 2 5))))
       (extended_return_object_declaration
-       ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication 
COLON_EQUAL expression )
+       ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication 
COLON_EQUAL expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-other])
         (wisi-containing-action 6 7)))
@@ -705,7 +703,7 @@
        ((ABS primary ))
        ((NOT primary )))
       (formal_object_declaration
-       ((identifier_list COLON mode_opt null_exclusion_opt name COLON_EQUAL 
expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON mode_opt null_exclusion_opt name COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 6 statement-other 9 
statement-end])
         (wisi-containing-action 6 7)
@@ -716,7 +714,7 @@
         (wisi-statement-action [1 statement-start 7 statement-end])
         (wisi-containing-action 5 6)
         (wisi-face-action [5 font-lock-type-face])))
-       ((identifier_list COLON mode_opt access_definition COLON_EQUAL 
expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON mode_opt access_definition COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 5 statement-other 8 
statement-end])
         (wisi-containing-action 5 6)
@@ -845,21 +843,21 @@
       (generic_instantiation
        ((PACKAGE name IS NEW name aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 name 4 statement-other 7 
statement-end])
-        (wisi-containing-action 4 5)
-        (wisi-containing-action 5 6)
+        (wisi-statement-action [1 statement-start 2 name 3 statement-other 7 
statement-end])
+        (wisi-containing-action 3 5)
+        (wisi-containing-action 3 6)
         (wisi-face-action [2 font-lock-function-name-face 5 
font-lock-function-name-face])))
        ((overriding_indicator_opt PROCEDURE name IS NEW name 
aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 block-middle 3 name 5 
statement-other 8 statement-end])
-        (wisi-containing-action 5 6)
-        (wisi-containing-action 6 7)
+        (wisi-statement-action [1 statement-start 2 block-middle 3 name 4 
statement-other 8 statement-end])
+        (wisi-containing-action 4 6)
+        (wisi-containing-action 4 7)
         (wisi-face-action [3 font-lock-function-name-face 6 
font-lock-function-name-face])))
        ((overriding_indicator_opt FUNCTION name IS NEW name 
aspect_specification_opt SEMICOLON )
         (progn
-        (wisi-statement-action [1 statement-start 2 block-middle 3 name 5 
statement-other 8 statement-end])
-        (wisi-containing-action 5 6)
-        (wisi-containing-action 6 7)
+        (wisi-statement-action [1 statement-start 2 block-middle 3 name 4 
statement-other 8 statement-end])
+        (wisi-containing-action 4 6)
+        (wisi-containing-action 4 7)
         (wisi-face-action [3 font-lock-function-name-face 6 
font-lock-function-name-face]))))
       (generic_package_declaration
        ((generic_formal_part package_specification SEMICOLON )
@@ -907,7 +905,7 @@
        (())
        ((IDENTIFIER )))
       (if_expression
-       ((IF expression THEN expression elsif_expression_list ELSE expression )
+       ((IF expression_opt THEN expression_opt elsif_expression_list ELSE 
expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle 6 
block-middle])
         (wisi-containing-action 1 2)
@@ -915,21 +913,21 @@
         (wisi-containing-action 3 5)
         (wisi-containing-action 6 7)
         (wisi-motion-action [1 3 [5 statement-other ELSIF block-middle THEN] 
6])))
-       ((IF expression THEN expression elsif_expression_list )
+       ((IF expression_opt THEN expression_opt elsif_expression_list )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4)
         (wisi-containing-action 3 5)
         (wisi-motion-action [1 3 [5 statement-other ELSIF block-middle 
THEN]])))
-       ((IF expression THEN expression ELSE expression )
+       ((IF expression_opt THEN expression_opt ELSE expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle 5 
block-middle])
         (wisi-containing-action 1 2)
         (wisi-containing-action 3 4)
         (wisi-containing-action 5 6)
         (wisi-motion-action [1 3 5])))
-       ((IF expression THEN expression )
+       ((IF expression_opt THEN expression_opt )
         (progn
         (wisi-statement-action [1 statement-start 3 block-middle])
         (wisi-containing-action 1 2)
@@ -1023,8 +1021,10 @@
        ((iterator_specification )))
       (label_opt
        (())
-       ((goto_label ))
-       ((IDENTIFIER COLON )))
+       ((goto_label )
+        (wisi-statement-action [1 label]))
+       ((IDENTIFIER COLON )
+        (wisi-statement-action [1 label])))
       (library_item
        ((PRIVATE library_unit_declaration ))
        ((library_unit_declaration ))
@@ -1059,7 +1059,7 @@
        ((range )))
       (mod_clause_opt
        (())
-       ((AT MOD expression SEMICOLON )))
+       ((AT MOD expression_opt SEMICOLON )))
       (mode_opt
        (())
        ((IN ))
@@ -1114,7 +1114,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 3 
statement-other 6 statement-end])
         (wisi-containing-action 2 5))))
       (object_declaration
-       ((identifier_list COLON aliased_opt constant_opt subtype_indication 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON aliased_opt constant_opt subtype_indication 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1125,7 +1125,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 7 
statement-end])
         (wisi-containing-action 2 5)
         (wisi-containing-action 1 6)))
-       ((identifier_list COLON aliased_opt constant_opt access_definition 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((identifier_list COLON aliased_opt constant_opt access_definition 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1136,7 +1136,7 @@
         (wisi-statement-action [1 statement-start 2 statement-other 7 
statement-end])
         (wisi-containing-action 2 5)
         (wisi-containing-action 1 6)))
-       ((identifier_list COLON aliased_opt constant_opt array_type_definition 
COLON_EQUAL expression aspect_specification_opt SEMICOLON )
+       ((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 2 statement-other 6 
statement-other 9 statement-end])
         (wisi-containing-action 2 5)
@@ -1251,11 +1251,12 @@
        (())
        ((formal_part )))
       (parameter_specification
-       ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name 
COLON_EQUAL expression )
+       (())
+       ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name 
COLON_EQUAL expression_opt )
         (wisi-face-action [6 font-lock-type-face]))
        ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name )
         (wisi-face-action [6 font-lock-type-face]))
-       ((identifier_list COLON aliased_opt access_definition COLON_EQUAL 
expression ))
+       ((identifier_list COLON aliased_opt access_definition COLON_EQUAL 
expression_opt ))
        ((identifier_list COLON aliased_opt access_definition )))
       (parameter_specification_list
        ((parameter_specification ))
@@ -1264,7 +1265,7 @@
         (wisi-statement-action [2 list-break])
         (wisi-containing-action 2 3))))
       (paren_expression
-       ((LEFT_PAREN expression RIGHT_PAREN )
+       ((LEFT_PAREN expression_opt RIGHT_PAREN )
         (progn
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2)))
@@ -1273,7 +1274,12 @@
         (wisi-statement-action [1 open-paren 3 close-paren])
         (wisi-containing-action 1 2))))
       (pragma
-       ((PRAGMA IDENTIFIER LEFT_PAREN pragma_argument_association_list 
RIGHT_PAREN SEMICOLON )
+       ((PRAGMA IDENTIFIER LEFT_PAREN association_list RIGHT_PAREN SEMICOLON )
+        (progn
+        (wisi-statement-action [1 statement-start 3 open-paren 5 close-paren 6 
statement-end])
+        (wisi-containing-action 3 4)
+        (wisi-face-action [2 font-lock-function-name-face])))
+       ((PRAGMA IDENTIFIER LEFT_PAREN conditional_quantified_expression 
RIGHT_PAREN SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 open-paren 5 close-paren 6 
statement-end])
         (wisi-containing-action 3 4)
@@ -1282,14 +1288,6 @@
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-face-action [2 font-lock-function-name-face]))))
-      (pragma_argument_association
-       ((IDENTIFIER EQUAL_GREATER expression ))
-       ((expression ))
-       ((conditional_quantified_expression ))
-       ((IDENTIFIER TICK IDENTIFIER EQUAL_GREATER expression )))
-      (pragma_argument_association_list
-       ((pragma_argument_association ))
-       ((pragma_argument_association_list COMMA pragma_argument_association )))
       (primary
        ((NUMERIC_LITERAL )
         (wisi-face-action [1 font-lock-constant-face]))
@@ -1301,10 +1299,10 @@
       (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 4 statement-other 6 
statement-other 12 statement-end])
+        (wisi-statement-action [1 statement-start 2 name 4 statement-other 12 
statement-end])
         (wisi-containing-action 1 3)
-        (wisi-containing-action 6 7)
-        (wisi-containing-action 6 8)
+        (wisi-containing-action 4 7)
+        (wisi-containing-action 4 8)
         (wisi-containing-action 4 11)
         (wisi-face-action [2 font-lock-type-face]))))
       (private_type_declaration
@@ -1393,27 +1391,27 @@
         (wisi-containing-action 1 3)
         (wisi-face-action [1 font-lock-type-face]))))
       (quantified_expression
-       ((FOR quantifier iterator_specification EQUAL_GREATER expression )
+       ((FOR quantifier iterator_specification EQUAL_GREATER expression_opt )
         (progn
-        (wisi-statement-action [4 statement-other])
-        (wisi-containing-action 4 5))))
+        (wisi-statement-action [1 expression-start])
+        (wisi-containing-action 1 5))))
       (quantifier
        ((ALL ))
        ((SOME )))
       (raise_expression
        ((RAISE name ))
-       ((RAISE name WITH expression )))
+       ((RAISE name WITH expression_opt )))
       (raise_statement
        ((RAISE SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end]))
-       ((RAISE name WITH expression SEMICOLON )
+       ((RAISE name WITH expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 5 statement-end])
         (wisi-containing-action 1 4)))
        ((RAISE name SEMICOLON )
         (wisi-statement-action [1 statement-start 3 statement-end])))
       (range
-       ((name TICK RANGE LEFT_PAREN expression RIGHT_PAREN )
+       ((name TICK RANGE LEFT_PAREN expression_opt RIGHT_PAREN )
         (progn
         (wisi-statement-action [4 open-paren 6 close-paren])
         (wisi-containing-action 4 5)))
@@ -1511,26 +1509,25 @@
         (wisi-containing-action 1 2)
         (wisi-motion-action [1 [2 block-middle OR] 3]))))
       (select_alternative
-       ((WHEN expression EQUAL_GREATER accept_statement 
sequence_of_statements_opt )
+       ((WHEN expression_opt EQUAL_GREATER accept_statement 
sequence_of_statements_opt )
         (progn
         (wisi-statement-action [1 block-start 3 statement-other])
         (wisi-containing-action 1 2)
         (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4)
-        (wisi-containing-action 3 5)))
+        (wisi-containing-action 1 4)
+        (wisi-containing-action 1 5)))
        ((accept_statement sequence_of_statements_opt ))
-       ((WHEN expression EQUAL_GREATER delay_alternative )
+       ((WHEN expression_opt EQUAL_GREATER delay_alternative )
         (progn
-        (wisi-statement-action [1 block-start 3 statement-other])
+        (wisi-statement-action [1 block-start])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4)))
+        (wisi-containing-action 1 4)))
        ((delay_alternative ))
-       ((WHEN expression EQUAL_GREATER TERMINATE SEMICOLON )
+       ((WHEN expression_opt EQUAL_GREATER TERMINATE SEMICOLON )
         (progn
-        (wisi-statement-action [1 block-start 3 statement-other 4 
statement-start 5 statement-end])
+        (wisi-statement-action [1 block-start 4 statement-start 5 
statement-end])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)))
+        (wisi-containing-action 1 4)))
        ((TERMINATE SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end])))
       (select_alternative_list
@@ -1558,7 +1555,7 @@
       (simple_return_statement
        ((RETURN SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end]))
-       ((RETURN expression SEMICOLON )
+       ((RETURN expression_opt SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 3 statement-end])
         (wisi-containing-action 1 2))))
@@ -1583,6 +1580,7 @@
        ((PROTECTED IDENTIFIER aspect_specification_opt IS NEW interface_list 
WITH protected_definition SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 7 
block-middle 9 statement-end])
+        (wisi-motion-action [1 4 [8 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 6)
@@ -1591,6 +1589,7 @@
        ((PROTECTED IDENTIFIER aspect_specification_opt IS protected_definition 
SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 6 
statement-end])
+        (wisi-motion-action [1 4 [5 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 5)
@@ -1599,6 +1598,7 @@
        ((TASK IDENTIFIER aspect_specification_opt IS NEW interface_list WITH 
task_definition SEMICOLON )
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 7 
block-middle 9 statement-end])
+        (wisi-motion-action [1 4 [8 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 6)
@@ -1607,6 +1607,7 @@
        ((TASK IDENTIFIER aspect_specification_opt IS task_definition SEMICOLON 
)
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 block-middle 6 
statement-end])
+        (wisi-motion-action [1 4 [5 block-middle PRIVATE block-end END]])
         (wisi-containing-action 1 2)
         (wisi-containing-action 2 3)
         (wisi-containing-action 4 5)
@@ -1615,13 +1616,13 @@
         (progn
         (wisi-statement-action [1 statement-start 2 name 4 statement-end])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 2 3)
+        (wisi-containing-action 1 3)
         (wisi-face-action [2 font-lock-type-face]))))
       (statement
        ((label_opt simple_statement )
-        (wisi-statement-action [1 statement-start 2 statement-other]))
+        (wisi-statement-action [2 statement-start]))
        ((label_opt compound_statement )
-        (wisi-statement-action [1 statement-start 2 statement-other])))
+        (wisi-statement-action [2 statement-start])))
       (subprogram_body
        ((overriding_indicator_opt subprogram_specification 
aspect_specification_opt IS declarative_part_opt BEGIN 
handled_sequence_of_statements END name_opt SEMICOLON )
         (progn
@@ -1753,10 +1754,10 @@
       (type_definition
        ((enumeration_type_definition ))
        ((RANGE simple_expression DOT_DOT simple_expression ))
-       ((MOD expression ))
-       ((DIGITS expression real_range_specification_opt ))
-       ((DELTA expression real_range_specification_opt ))
-       ((DELTA expression DIGITS expression real_range_specification_opt ))
+       ((MOD expression_opt ))
+       ((DIGITS expression_opt real_range_specification_opt ))
+       ((DELTA expression_opt real_range_specification_opt ))
+       ((DELTA expression_opt DIGITS expression_opt 
real_range_specification_opt ))
        ((array_type_definition ))
        ((record_type_definition ))
        ((access_definition ))
@@ -1773,10 +1774,9 @@
       (variant
        ((WHEN discrete_choice_list EQUAL_GREATER component_list_opt )
         (progn
-        (wisi-statement-action [1 block-middle 3 statement-other])
+        (wisi-statement-action [1 block-middle])
         (wisi-containing-action 1 2)
-        (wisi-containing-action 1 3)
-        (wisi-containing-action 3 4))))
+        (wisi-containing-action 1 4))))
       (unary_adding_operator
        ((PLUS ))
        ((MINUS )))
@@ -1905,32 +1905,32 @@
       ((default . error) (PACKAGE . (generic_formal_parameter_declaration . 
4)) (PROCEDURE . (generic_formal_parameter_declaration . 4)) (FUNCTION . 
(generic_formal_parameter_declaration . 4)) (IDENTIFIER . 
(generic_formal_parameter_declaration . 4)) (WITH . 
(generic_formal_parameter_declaration . 4)) (USE . 
(generic_formal_parameter_declaration . 4)) (TYPE . 
(generic_formal_parameter_declaration . 4)) (PRAGMA . 
(generic_formal_parameter_declaration . 4)))
       ((default . error) (PACKAGE . (generic_formal_parameter_declaration . 
5)) (PROCEDURE . (generic_formal_parameter_declaration . 5)) (FUNCTION . 
(generic_formal_parameter_declaration . 5)) (IDENTIFIER . 
(generic_formal_parameter_declaration . 5)) (WITH . 
(generic_formal_parameter_declaration . 5)) (USE . 
(generic_formal_parameter_declaration . 5)) (TYPE . 
(generic_formal_parameter_declaration . 5)) (PRAGMA . 
(generic_formal_parameter_declaration . 5)))
       ((default . error) (DOT .  90) (TICK .  91) (RETURN .  89) (LEFT_PAREN . 
 88))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) 
(IDENTIFIER .  235) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  144) 
(NOT .  181) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (COLON_EQUAL . 
(null_exclusion_opt . 0)) (RIGHT_PAREN . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IDENTIFIER .  229) (CHARACTER_LITERAL .  231) 
(STRING_LITERAL .  230) (ALL .  228))
-      ((default . error) (LEFT_PAREN .  148) (ACCESS .  221) (DELTA .  222) 
(DIGITS .  223) (MOD .  224) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DO . (name . 5)) (OF . (name . 5)) 
(CHARACTER_LITERAL . (name . 5)) (STRING_LITERAL . (name . 5)) (IDENTIFIER . 
(name . 5)) (LESS_LESS . (name . 5)) (WHILE . (name . 5)) (SELECT . (name . 5)) 
(REQUEUE . (name . 5)) (RAISE . (name . 5)) (PRAGMA . (name . 5)) (NULL . (name 
. 5)) (LOOP . (name . 5)) (IF . (name . 5)) (GOTO . (name . 5)) (FOR . (name . 
5)) (EXIT . (name . 5)) (DELAY . (name . 5)) (DECLARE . (name . 5)) (CASE . 
(name . 5)) (BEGIN . (name . 5)) (ABORT [...]
-      ((default . error) (RETURN .  220))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) (FOR .  
146) (CASE .  145) (IF .  147) (RIGHT_PAREN . ((expression_opt . 0) 
(parameter_specification . 0))) (COMMA . ((expression_opt . 0) (association_opt 
. 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) 
(IDENTIFIER .  229) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  144) 
(NOT .  150) (RAISE .  153) (NUMERIC_LITERAL .  156) [...]
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (COLON_EQUAL . 
(null_exclusion_opt . 0)) (RIGHT_PAREN . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IDENTIFIER .  223) (CHARACTER_LITERAL .  225) 
(STRING_LITERAL .  224) (ALL .  222))
+      ((default . error) (LEFT_PAREN .  148) (ACCESS .  215) (DELTA .  216) 
(DIGITS .  217) (MOD .  218) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (DO . (name . 5)) (OF . (name . 5)) 
(CHARACTER_LITERAL . (name . 5)) (STRING_LITERAL . (name . 5)) (IDENTIFIER . 
(name . 5)) (LESS_LESS . (name . 5)) (WHILE . (name . 5)) (SELECT . (name . 5)) 
(REQUEUE . (name . 5)) (RAISE . (name . 5)) (PRAGMA . (name . 5)) (NULL . (name 
. 5)) (LOOP . (name . 5)) (IF . (name . 5)) (GOTO . (name . 5)) (FOR . (name . 
5)) (EXIT . (name . 5)) (DELAY . (name . 5)) (DECLARE . (name . 5)) (CASE . 
(name . 5)) (BEGIN . (name . 5)) (ABORT [...]
+      ((default . error) (RETURN .  214))
       ((default . error) (RENAMES . (function_specification . 0)) (IS . 
(function_specification . 0)) (SEMICOLON . (function_specification . 0)) (WITH 
. (function_specification . 0)))
-      ((default . error) (ACCESS . (mode_opt . 0)) (NOT . (mode_opt . 0)) 
(IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . (mode_opt . 0)) 
(CHARACTER_LITERAL . (mode_opt . 0)) (IN .  217) (OUT .  218))
-      ((default . error) (IDENTIFIER .  216))
+      ((default . error) (ACCESS . (mode_opt . 0)) (NOT . (mode_opt . 0)) 
(IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . (mode_opt . 0)) 
(CHARACTER_LITERAL . (mode_opt . 0)) (IN .  211) (OUT .  212))
+      ((default . error) (IDENTIFIER .  210))
       ((default . error) (IDENTIFIER . (generic_formal_parameter_declarations 
. 1)) (WITH . (generic_formal_parameter_declarations . 1)) (USE . 
(generic_formal_parameter_declarations . 1)) (TYPE . 
(generic_formal_parameter_declarations . 1)) (PRAGMA . 
(generic_formal_parameter_declarations . 1)) (FUNCTION . 
(generic_formal_parameter_declarations . 1)) (PROCEDURE . 
(generic_formal_parameter_declarations . 1)) (PACKAGE . 
(generic_formal_parameter_declarations . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (IS .  213) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (IS . (discriminant_part_opt . 0)) (LEFT_PAREN .  
211))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  210) (LEFT_PAREN 
.  107))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  209) (LEFT_PAREN 
.  107))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  208) (LEFT_PAREN 
.  107))
-      ((default . error) (COMMA .  120) (SEMICOLON .  207))
+      ((default . error) (IS .  207) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (IS . (discriminant_part_opt . 0)) (LEFT_PAREN .  
205))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  204) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  203) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  202) (LEFT_PAREN 
.  107))
+      ((default . error) (COMMA .  120) (SEMICOLON .  201))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NEW .  205))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  
144) (NOT .  181) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (LEFT_PAREN .  148))
+      ((default . error) (NEW .  199))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  157) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  
144) (NOT .  150) (RAISE .  153) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (LEFT_PAREN .  148))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON . ((expression_opt . 0) (association_opt . 
0))) (IS . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  182) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  
152) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  
155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (IS .  180))
+      ((default . error) (SEMICOLON . ((expression_opt . 0) (association_opt . 
0))) (IS . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  152) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  
153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  
156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IS .  192))
       ((default . error) (DOT .  90) (TICK .  91) (IS . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  156) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (OR . (pragma . 1)) (THEN . (pragma . 1)) (WHEN . 
(pragma . 1)) (EXCEPTION . (pragma . 1)) (LESS_LESS . (pragma . 1)) (ACCEPT . 
(pragma . 1)) (ABORT . (pragma . 1)) (CASE . (pragma . 1)) (DECLARE . (pragma . 
1)) (DELAY . (pragma . 1)) (EXIT . (pragma . 1)) (GOTO . (pragma . 1)) (IF . 
(pragma . 1)) (LOOP . (pragma . 1)) (NULL . (pragma . 1)) (RAISE . (pragma . 
1)) (REQUEUE . (pragma . 1)) (RETURN . (pragma . 1)) (SELECT . (pragma . 1)) 
(WHILE . (pragma . 1)) (STRI [...]
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (OR . (pragma . 2)) (THEN . (pragma . 2)) (WHEN . 
(pragma . 2)) (EXCEPTION . (pragma . 2)) (LESS_LESS . (pragma . 2)) (ACCEPT . 
(pragma . 2)) (ABORT . (pragma . 2)) (CASE . (pragma . 2)) (DECLARE . (pragma . 
2)) (DELAY . (pragma . 2)) (EXIT . (pragma . 2)) (GOTO . (pragma . 2)) (IF . 
(pragma . 2)) (LOOP . (pragma . 2)) (NULL . (pragma . 2)) (RAISE . (pragma . 
2)) (REQUEUE . (pragma . 2)) (RETURN . (pragma . 2)) (SELECT . (pragma . 2)) 
(WHILE . (pragma . 2)) (STRI [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (COMMA .  120) (SEMICOLON .  142))
       ((default . error) (DOT .  90) (TICK .  91) (IS . ( 106 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
@@ -1949,95 +1949,89 @@
       ((default . error) (SEMICOLON .  135) (IS .  134))
       ((default . error) (DOT .  90) (TICK .  91) (IS . ( 133 
(parameter_profile_opt . 0))) (SEMICOLON . (parameter_profile_opt . 0)) (WITH . 
(parameter_profile_opt . 0)) (RENAMES . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  88))
       ((default . error) (DOT .  90) (TICK .  91) (IS .  132) (RETURN .  89) 
(LEFT_PAREN .  88))
-      ((default . error) (NEW .  399))
-      ((default . error) (NEW .  398))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (NEW .  393))
+      ((default . error) (NEW .  392))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (IDENTIFIER . (subprogram_declaration . 0)) (TYPE . 
(subprogram_declaration . 0)) (TASK . (subprogram_declaration . 0)) (SUBTYPE . 
(subprogram_declaration . 0)) (PROTECTED . (subprogram_declaration . 0)) (FOR . 
(subprogram_declaration . 0)) (ENTRY . (subprogram_declaration . 0)) (BEGIN . 
(subprogram_declaration . 0)) (END . (subprogram_declaration . 0)) (WITH . 
(subprogram_declaration . 0)) (USE . (subprogram_declaration . 0)) (SEPARATE . 
(subprogram_declaration  [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (BEGIN . (generic_subprogram_declaration . 0)) (ENTRY 
. (generic_subprogram_declaration . 0)) (FOR . (generic_subprogram_declaration 
. 0)) (FUNCTION . (generic_subprogram_declaration . 0)) (GENERIC . 
(generic_subprogram_declaration . 0)) (NOT . (generic_subprogram_declaration . 
0)) (OVERRIDING . (generic_subprogram_declaration . 0)) (PACKAGE . 
(generic_subprogram_declaration . 0)) (PRAGMA . (generic_subprogram_declaration 
. 0)) (PROCEDURE . (generic_subprogram_de [...]
-      ((default . error) (COMMA .  120) (SEMICOLON .  395))
+      ((default . error) (COMMA .  120) (SEMICOLON .  389))
       ((default . error) (IDENTIFIER . (use_clause . 2)) (USE . (use_clause . 
2)) (TYPE . (use_clause . 2)) (TASK . (use_clause . 2)) (SUBTYPE . (use_clause 
. 2)) (PROTECTED . (use_clause . 2)) (PROCEDURE . (use_clause . 2)) (PRAGMA . 
(use_clause . 2)) (PACKAGE . (use_clause . 2)) (OVERRIDING . (use_clause . 2)) 
(NOT . (use_clause . 2)) (GENERIC . (use_clause . 2)) (FUNCTION . (use_clause . 
2)) (FOR . (use_clause . 2)) (ENTRY . (use_clause . 2)) (BEGIN . (use_clause . 
2)) (END . (use_cla [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . (name_list . 
1)) (COMMA . (name_list . 1)) (LEFT_PAREN .  107))
-      ((default . error) (PROTECTED .  391) (TASK .  392) (PACKAGE .  390) 
(NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)))
+      ((default . error) (PROTECTED .  385) (TASK .  386) (PACKAGE .  384) 
(NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)))
       ((default . error) ($EOI . (with_clause . 2)) (FUNCTION . (with_clause . 
2)) (GENERIC . (with_clause . 2)) (LIMITED . (with_clause . 2)) (NOT . 
(with_clause . 2)) (OVERRIDING . (with_clause . 2)) (PACKAGE . (with_clause . 
2)) (PRAGMA . (with_clause . 2)) (PRIVATE . (with_clause . 2)) (PROCEDURE . 
(with_clause . 2)) (SEPARATE . (with_clause . 2)) (USE . (with_clause . 2)) 
(WITH . (with_clause . 2)))
       ((default . error) (SEMICOLON .  135))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ALL .  385) (SOME .  386))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (RAISE .  152) (PLUS .  154) (MINUS .  153) (OTHERS 
.  182) (ABS .  144) (NOT .  181) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (NUMERIC_LITERAL .  155) (NULL .  380) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (ALL .  379) (SOME .  380))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (WITH . (expression_opt . 0)) (FOR .  146) (CASE .  
145) (IF .  147) (COMMA . ((association_opt . 0) (expression_opt . 0))) 
(RIGHT_PAREN . ((association_opt . 0) (expression_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (RAISE .  153) 
(OTHERS .  152) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  156) (NULL .  373) (NEW .   [...]
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  370) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
       ((default . error) (OF . (primary . 1)) (COLON_EQUAL . (primary . 1)) 
(DO . (primary . 1)) (LOOP . (primary . 1)) (ELSIF . (primary . 1)) (ELSE . 
(primary . 1)) (DIGITS . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (RANGE . (primary . 1)) (THEN . (primary . 1)) (WITH . (primary 
. 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (IS . (primary . 
1)) (IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER 
. (primary . 1)) (GREATER [...]
+      ((default . error) (BAR . (discrete_choice . 3)) (EQUAL_GREATER . 
(discrete_choice . 3)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (ABS . (unary_adding_operator . 1)) (LEFT_PAREN . 
(unary_adding_operator . 1)) (NEW . (unary_adding_operator . 1)) (NOT . 
(unary_adding_operator . 1)) (NULL . (unary_adding_operator . 1)) 
(NUMERIC_LITERAL . (unary_adding_operator . 1)) (IDENTIFIER . 
(unary_adding_operator . 1)) (STRING_LITERAL . (unary_adding_operator . 1)) 
(CHARACTER_LITERAL . (unary_adding_operator . 1)))
       ((default . error) (ABS . (unary_adding_operator . 0)) (LEFT_PAREN . 
(unary_adding_operator . 0)) (NEW . (unary_adding_operator . 0)) (NOT . 
(unary_adding_operator . 0)) (NULL . (unary_adding_operator . 0)) 
(NUMERIC_LITERAL . (unary_adding_operator . 0)) (IDENTIFIER . 
(unary_adding_operator . 0)) (STRING_LITERAL . (unary_adding_operator . 0)) 
(CHARACTER_LITERAL . (unary_adding_operator . 0)))
       ((default . error) (OF . (primary . 0)) (COLON_EQUAL . (primary . 0)) 
(DO . (primary . 0)) (LOOP . (primary . 0)) (ELSIF . (primary . 0)) (ELSE . 
(primary . 0)) (DIGITS . (primary . 0)) (RIGHT_PAREN . (primary . 0)) (COMMA . 
(primary . 0)) (RANGE . (primary . 0)) (THEN . (primary . 0)) (WITH . (primary 
. 0)) (BAR . (primary . 0)) (EQUAL_GREATER . (primary . 0)) (IS . (primary . 
0)) (IN . (primary . 0)) (NOT . (primary . 0)) (EQUAL . (primary . 0)) (GREATER 
. (primary . 0)) (GREATER [...]
-      ((default . error) (EQUAL_GREATER .  376) (RIGHT_PAREN . (name . 0)) 
(COMMA . (name . 0)) (STAR_STAR . (name . 0)) (STAR . (name . 0)) (SLASH . 
(name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SLASH_EQUAL . (name . 0)) 
(LESS_EQUAL . (name . 0)) (LESS . (name . 0)) (GREATER_EQUAL . (name . 0)) 
(GREATER . (name . 0)) (EQUAL . (name . 0)) (NOT . (name . 0)) (IN . (name . 
0)) (AMPERSAND . (name . 0)) (MINUS . (name . 0)) (PLUS . (name . 0)) 
(LEFT_PAREN . (name . 0)) (AND . (name . 0) [...]
+      ((default . error) (SEMICOLON . (name . 1)) (IS . (name . 1)) (WITH . 
(name . 1)) (RANGE . (name . 1)) (TICK . (name . 1)) (LEFT_PAREN . (name . 1)) 
(DOT . (name . 1)) (PLUS . (name . 1)) (MINUS . (name . 1)) (AMPERSAND . (name 
. 1)) (DOT_DOT . (name . 1)) (IN . (name . 1)) (NOT . (name . 1)) (EQUAL . 
(name . 1)) (GREATER . (name . 1)) (GREATER_EQUAL . (name . 1)) (LESS . (name . 
1)) (LESS_EQUAL . (name . 1)) (SLASH_EQUAL . (name . 1)) (RIGHT_PAREN . (name . 
1)) (COMMA . (name . 1) [...]
       ((default . error) (OF . (primary . 2)) (COLON_EQUAL . (primary . 2)) 
(DO . (primary . 2)) (LOOP . (primary . 2)) (ELSIF . (primary . 2)) (ELSE . 
(primary . 2)) (DIGITS . (primary . 2)) (RIGHT_PAREN . (primary . 2)) (COMMA . 
(primary . 2)) (RANGE . (primary . 2)) (THEN . (primary . 2)) (WITH . (primary 
. 2)) (BAR . (primary . 2)) (EQUAL_GREATER . (primary . 2)) (IS . (primary . 
2)) (IN . (primary . 2)) (NOT . (primary . 2)) (EQUAL . (primary . 2)) (GREATER 
. (primary . 2)) (GREATER [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 1)) 
(RIGHT_PAREN . (conditional_quantified_expression . 1)))
-      ((default . error) (COMMA . (pragma_argument_association . 2)) 
(RIGHT_PAREN . (pragma_argument_association . 2)))
-      ((default . error) (COMMA . (pragma_argument_association . 1)) 
(RIGHT_PAREN . (pragma_argument_association . 1)))
-      ((default . error) (OF . (term . 0)) (COLON_EQUAL . (term . 0)) (DO . 
(term . 0)) (LOOP . (term . 0)) (ELSIF . (term . 0)) (ELSE . (term . 0)) 
(DIGITS . (term . 0)) (RIGHT_PAREN . (term . 0)) (COMMA . (term . 0)) (RANGE . 
(term . 0)) (THEN . (term . 0)) (WITH . (term . 0)) (BAR . (term . 0)) 
(EQUAL_GREATER . (term . 0)) (IS . (term . 0)) (IN . (term . 0)) (NOT . (term . 
0)) (EQUAL . (term . 0)) (GREATER . (term . 0)) (GREATER_EQUAL . (term . 0)) 
(LESS . (term . 0)) (LESS_EQUAL . (t [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 0)) 
(RIGHT_PAREN . (conditional_quantified_expression . 0)))
-      ((default . error) (DOT .  90) (OF . (primary . 3)) (COLON_EQUAL . 
(primary . 3)) (DO . (primary . 3)) (LOOP . (primary . 3)) (BAR . (primary . 
3)) (COMMA . (primary . 3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) 
(EQUAL_GREATER . (primary . 3)) (RIGHT_PAREN . (primary . 3)) (DIGITS . 
(primary . 3)) (RANGE . (primary . 3)) (THEN . (primary . 3)) (DOT_DOT . 
(primary . 3)) (WITH . (primary . 3)) (IS . (primary . 3)) (IN . (primary . 3)) 
(NOT . (primary . 3)) (EQUAL . (primary .  [...]
-      ((default . error) (RIGHT_PAREN . (pragma_argument_association_list . 
0)) (COMMA . (pragma_argument_association_list . 0)))
-      ((default . error) (COMMA .  375) (RIGHT_PAREN .  374))
-      ((default . error) (OF . (factor . 1)) (COLON_EQUAL . (factor . 1)) (DO 
. (factor . 1)) (LOOP . (factor . 1)) (ELSIF . (factor . 1)) (ELSE . (factor . 
1)) (DIGITS . (factor . 1)) (COMMA . (factor . 1)) (RIGHT_PAREN . (factor . 1)) 
(RANGE . (factor . 1)) (THEN . (factor . 1)) (WITH . (factor . 1)) (BAR . 
(factor . 1)) (EQUAL_GREATER . (factor . 1)) (IS . (factor . 1)) (SLASH_EQUAL . 
(factor . 1)) (LESS_EQUAL . (factor . 1)) (LESS . (factor . 1)) (GREATER_EQUAL 
. (factor . 1)) (GREAT [...]
-      ((default . error) (COMMA . (conditional_quantified_expression . 2)) 
(RIGHT_PAREN . (conditional_quantified_expression . 2)))
-      ((default . error) (DO . (relation . 4)) (LOOP . (relation . 4)) (ELSIF 
. (relation . 4)) (ELSE . (relation . 4)) (EQUAL_GREATER . (relation . 4)) 
(DIGITS . (relation . 4)) (RIGHT_PAREN . (relation . 4)) (COMMA . (relation . 
4)) (RANGE . (relation . 4)) (THEN . (relation . 4)) (SEMICOLON . (relation . 
4)) (WITH . (relation . 4)) (IS . (relation . 4)) (AND . (relation . 4)) (OR . 
(relation . 4)) (XOR . (relation . 4)))
-      ((default . error) (DO . (expression . 1)) (LOOP . (expression . 1)) 
(XOR . (expression . 1)) (OR . (expression . 1)) (AND . ( 372 (expression . 
1))) (ELSIF . (expression . 1)) (ELSE . (expression . 1)) (EQUAL_GREATER . 
(expression . 1)) (DIGITS . (expression . 1)) (COMMA . (expression . 1)) 
(RIGHT_PAREN . (expression . 1)) (RANGE . (expression . 1)) (THEN . (expression 
. 1)) (WITH . (expression . 1)) (SEMICOLON . (expression . 1)) (IS . 
(expression . 1)))
-      ((default . error) (DO . (expression . 2)) (LOOP . (expression . 2)) 
(XOR . (expression . 2)) (OR . (expression . 2)) (AND . ( 371 (expression . 
2))) (ELSIF . (expression . 2)) (ELSE . (expression . 2)) (EQUAL_GREATER . 
(expression . 2)) (DIGITS . (expression . 2)) (COMMA . (expression . 2)) 
(RIGHT_PAREN . (expression . 2)) (RANGE . (expression . 2)) (THEN . (expression 
. 2)) (WITH . (expression . 2)) (SEMICOLON . (expression . 2)) (IS . 
(expression . 2)))
-      ((default . error) (DO . (expression . 3)) (LOOP . (expression . 3)) 
(XOR . (expression . 3)) (OR . ( 370 (expression . 3))) (AND . (expression . 
3)) (ELSIF . (expression . 3)) (ELSE . (expression . 3)) (EQUAL_GREATER . 
(expression . 3)) (DIGITS . (expression . 3)) (COMMA . (expression . 3)) 
(RIGHT_PAREN . (expression . 3)) (RANGE . (expression . 3)) (THEN . (expression 
. 3)) (WITH . (expression . 3)) (SEMICOLON . (expression . 3)) (IS . 
(expression . 3)))
-      ((default . error) (DO . (expression . 4)) (LOOP . (expression . 4)) 
(XOR . (expression . 4)) (OR . ( 369 (expression . 4))) (AND . (expression . 
4)) (ELSIF . (expression . 4)) (ELSE . (expression . 4)) (EQUAL_GREATER . 
(expression . 4)) (DIGITS . (expression . 4)) (COMMA . (expression . 4)) 
(RIGHT_PAREN . (expression . 4)) (RANGE . (expression . 4)) (THEN . (expression 
. 4)) (WITH . (expression . 4)) (SEMICOLON . (expression . 4)) (IS . 
(expression . 4)))
-      ((default . error) (DO . (expression . 5)) (LOOP . (expression . 5)) 
(XOR . ( 368 (expression . 5))) (OR . (expression . 5)) (AND . (expression . 
5)) (ELSIF . (expression . 5)) (ELSE . (expression . 5)) (EQUAL_GREATER . 
(expression . 5)) (DIGITS . (expression . 5)) (COMMA . (expression . 5)) 
(RIGHT_PAREN . (expression . 5)) (RANGE . (expression . 5)) (THEN . (expression 
. 5)) (WITH . (expression . 5)) (SEMICOLON . (expression . 5)) (IS . 
(expression . 5)))
-      ((default . error) (DO . (expression . 0)) (LOOP . (expression . 0)) 
(XOR . ( 367 (expression . 0))) (OR . ( 366 (expression . 0))) (AND . ( 365 
(expression . 0))) (ELSIF . (expression . 0)) (ELSE . (expression . 0)) 
(EQUAL_GREATER . (expression . 0)) (DIGITS . (expression . 0)) (COMMA . 
(expression . 0)) (RIGHT_PAREN . (expression . 0)) (RANGE . (expression . 0)) 
(THEN . (expression . 0)) (WITH . (expression . 0)) (SEMICOLON . (expression . 
0)) (IS . (expression . 0)))
-      ((default . error) (IN .  275) (NOT .  276) (DO . (relation . 0)) (LOOP 
. (relation . 0)) (COMMA . (relation . 0)) (ELSIF . (relation . 0)) (ELSE . 
(relation . 0)) (EQUAL_GREATER . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(DIGITS . (relation . 0)) (RANGE . (relation . 0)) (THEN . (relation . 0)) 
(SEMICOLON . (relation . 0)) (WITH . (relation . 0)) (IS . (relation . 0)) (AND 
. (relation . 0)) (OR . (relation . 0)) (XOR . (relation . 0)) (EQUAL .  278) 
(SLASH_EQUAL .  283) (LES [...]
-      ((default . error) (OF . (term_list . 0)) (COLON_EQUAL . (term_list . 
0)) (DO . (term_list . 0)) (LOOP . (term_list . 0)) (ELSIF . (term_list . 0)) 
(ELSE . (term_list . 0)) (DIGITS . (term_list . 0)) (COMMA . (term_list . 0)) 
(RIGHT_PAREN . (term_list . 0)) (RANGE . (term_list . 0)) (THEN . (term_list . 
0)) (WITH . (term_list . 0)) (BAR . (term_list . 0)) (EQUAL_GREATER . 
(term_list . 0)) (IS . (term_list . 0)) (SLASH_EQUAL . (term_list . 0)) 
(LESS_EQUAL . (term_list . 0)) (LESS .  [...]
-      ((default . error) (OF . (simple_expression . 1)) (COLON_EQUAL . 
(simple_expression . 1)) (DO . (simple_expression . 1)) (LOOP . 
(simple_expression . 1)) (ELSIF . (simple_expression . 1)) (ELSE . 
(simple_expression . 1)) (DIGITS . (simple_expression . 1)) (RIGHT_PAREN . 
(simple_expression . 1)) (COMMA . (simple_expression . 1)) (RANGE . 
(simple_expression . 1)) (THEN . (simple_expression . 1)) (WITH . 
(simple_expression . 1)) (BAR . (simple_expression . 1)) (EQUAL_GREATER . 
(simple [...]
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (IS .  353))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  297) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (BAR . (discrete_choice . 3)) (EQUAL_GREATER . 
(discrete_choice . 3)))
-      ((default . error) (SEMICOLON . (name . 1)) (IS . (name . 1)) (WITH . 
(name . 1)) (RANGE . (name . 1)) (TICK . (name . 1)) (LEFT_PAREN . (name . 1)) 
(DOT . (name . 1)) (PLUS . (name . 1)) (MINUS . (name . 1)) (AMPERSAND . (name 
. 1)) (DOT_DOT . (name . 1)) (IN . (name . 1)) (NOT . (name . 1)) (EQUAL . 
(name . 1)) (GREATER . (name . 1)) (GREATER_EQUAL . (name . 1)) (LESS . (name . 
1)) (LESS_EQUAL . (name . 1)) (SLASH_EQUAL . (name . 1)) (RIGHT_PAREN . (name . 
1)) (COMMA . (name . 1) [...]
       ((default . error) (SEMICOLON . (association_list . 0)) (IS . 
(association_list . 0)) (RIGHT_PAREN . (association_list . 0)) (COMMA . 
(association_list . 0)))
-      ((default . error) (COMMA .  273) (SEMICOLON . (aspect_specification_opt 
. 1)) (IS . (aspect_specification_opt . 1)))
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  367))
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
1)))
       ((default . error) (BAR . (discrete_choice . 0)) (EQUAL_GREATER . 
(discrete_choice . 0)))
-      ((default . error) (AND .  295) (EQUAL_GREATER . (choice_expression . 
1)) (BAR . (choice_expression . 1)))
-      ((default . error) (OR .  294) (EQUAL_GREATER . (choice_expression . 2)) 
(BAR . (choice_expression . 2)))
-      ((default . error) (XOR .  293) (EQUAL_GREATER . (choice_expression . 
3)) (BAR . (choice_expression . 3)))
-      ((default . error) (AND .  292) (EQUAL_GREATER . (choice_expression . 
4)) (BAR . (choice_expression . 4)))
-      ((default . error) (OR .  291) (EQUAL_GREATER . (choice_expression . 5)) 
(BAR . (choice_expression . 5)))
-      ((default . error) (XOR .  290) (OR .  289) (AND .  288) (EQUAL_GREATER 
. (choice_expression . 0)) (BAR . (choice_expression . 0)))
+      ((default . error) (AND .  366) (EQUAL_GREATER . (choice_expression . 
1)) (BAR . (choice_expression . 1)))
+      ((default . error) (OR .  365) (EQUAL_GREATER . (choice_expression . 2)) 
(BAR . (choice_expression . 2)))
+      ((default . error) (XOR .  364) (EQUAL_GREATER . (choice_expression . 
3)) (BAR . (choice_expression . 3)))
+      ((default . error) (AND .  363) (EQUAL_GREATER . (choice_expression . 
4)) (BAR . (choice_expression . 4)))
+      ((default . error) (OR .  362) (EQUAL_GREATER . (choice_expression . 5)) 
(BAR . (choice_expression . 5)))
+      ((default . error) (XOR .  361) (OR .  360) (AND .  359) (EQUAL_GREATER 
. (choice_expression . 0)) (BAR . (choice_expression . 0)))
+      ((default . error) (RIGHT_PAREN .  358))
       ((default . error) (EQUAL_GREATER . (discrete_choice_list . 1)) (BAR . 
(discrete_choice_list . 1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  287))
-      ((default . error) (LOOP . (expression_opt . 1)) (RIGHT_PAREN . 
(expression_opt . 1)) (COMMA . (expression_opt . 1)) (SEMICOLON . 
(expression_opt . 1)) (THEN . (expression_opt . 1)) (IS . (expression_opt . 1)))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  357))
+      ((default . error) (DO . (expression_opt . 1)) (LOOP . (expression_opt . 
1)) (XOR . (expression_opt . 1)) (OR . (expression_opt . 1)) (AND . 
(expression_opt . 1)) (ELSIF . (expression_opt . 1)) (ELSE . (expression_opt . 
1)) (EQUAL_GREATER . (expression_opt . 1)) (DIGITS . (expression_opt . 1)) 
(RIGHT_PAREN . (expression_opt . 1)) (COMMA . (expression_opt . 1)) (RANGE . 
(expression_opt . 1)) (THEN . (expression_opt . 1)) (WITH . (expression_opt . 
1)) (SEMICOLON . (expression_opt . 1 [...]
       ((default . error) (SEMICOLON . (association_opt . 5)) (IS . 
(association_opt . 5)) (COMMA . (association_opt . 5)) (RIGHT_PAREN . 
(association_opt . 5)))
-      ((default . error) (DOT .  90) (DO . (primary . 3)) (LOOP . (primary . 
3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) (DIGITS . (primary . 3)) 
(RANGE . (primary . 3)) (THEN . (primary . 3)) (SEMICOLON . (primary . 3)) (IS 
. (primary . 3)) (WITH . (primary . 3)) (IN . (primary . 3)) (NOT . (primary . 
3)) (RIGHT_PAREN . (primary . 3)) (COMMA . (primary . 3)) (PLUS . (primary . 
3)) (MINUS . (primary . 3)) (AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 
3)) (MOD . (primary . 3))  [...]
+      ((default . error) (OF . (term . 0)) (COLON_EQUAL . (term . 0)) (DO . 
(term . 0)) (LOOP . (term . 0)) (ELSIF . (term . 0)) (ELSE . (term . 0)) 
(DIGITS . (term . 0)) (RIGHT_PAREN . (term . 0)) (COMMA . (term . 0)) (RANGE . 
(term . 0)) (THEN . (term . 0)) (WITH . (term . 0)) (BAR . (term . 0)) 
(EQUAL_GREATER . (term . 0)) (IS . (term . 0)) (IN . (term . 0)) (NOT . (term . 
0)) (EQUAL . (term . 0)) (GREATER . (term . 0)) (GREATER_EQUAL . (term . 0)) 
(LESS . (term . 0)) (LESS_EQUAL . (t [...]
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
0)))
+      ((default . error) (DOT .  90) (DO . (primary . 3)) (LOOP . (primary . 
3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) (DIGITS . (primary . 3)) 
(RANGE . (primary . 3)) (THEN . (primary . 3)) (SEMICOLON . (primary . 3)) (IS 
. (primary . 3)) (WITH . (primary . 3)) (IN . (primary . 3)) (NOT . (primary . 
3)) (RIGHT_PAREN . (primary . 3)) (COMMA . (primary . 3)) (PLUS . (primary . 
3)) (MINUS . (primary . 3)) (AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 
3)) (MOD . (primary . 3))  [...]
+      ((default . error) (OF . (factor . 1)) (COLON_EQUAL . (factor . 1)) (DO 
. (factor . 1)) (LOOP . (factor . 1)) (ELSIF . (factor . 1)) (ELSE . (factor . 
1)) (DIGITS . (factor . 1)) (COMMA . (factor . 1)) (RIGHT_PAREN . (factor . 1)) 
(RANGE . (factor . 1)) (THEN . (factor . 1)) (WITH . (factor . 1)) (BAR . 
(factor . 1)) (EQUAL_GREATER . (factor . 1)) (IS . (factor . 1)) (SLASH_EQUAL . 
(factor . 1)) (LESS_EQUAL . (factor . 1)) (LESS . (factor . 1)) (GREATER_EQUAL 
. (factor . 1)) (GREAT [...]
+      ((default . error) (RIGHT_PAREN . (conditional_quantified_expression . 
2)))
+      ((default . error) (DO . (relation . 4)) (LOOP . (relation . 4)) (ELSIF 
. (relation . 4)) (ELSE . (relation . 4)) (EQUAL_GREATER . (relation . 4)) 
(DIGITS . (relation . 4)) (RIGHT_PAREN . (relation . 4)) (COMMA . (relation . 
4)) (RANGE . (relation . 4)) (THEN . (relation . 4)) (WITH . (relation . 4)) 
(SEMICOLON . (relation . 4)) (IS . (relation . 4)) (AND . (relation . 4)) (OR . 
(relation . 4)) (XOR . (relation . 4)))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)))
-      ((default . error) (IN .  275) (NOT .  276) (SEMICOLON . (relation . 0)) 
(IS . (relation . 0)) (WITH . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(COMMA . (relation . 0)) (DOT_DOT .  277) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . ((choice_relation . 1) (relation 
. 0))) (OR . ((choice_relation . 1) (relation . 0))) (XOR . ((choice_relation . 
1) (relation . 0))) (EQUAL .  278) (SLASH_EQUAL .  283) (LESS .  281) 
(LESS_EQUAL .  282) (GREATER .  27 [...]
+      ((default . error) (DO . (expression . 1)) (LOOP . (expression . 1)) 
(XOR . (expression . 1)) (OR . (expression . 1)) (AND . ( 353 (expression . 
1))) (ELSIF . (expression . 1)) (ELSE . (expression . 1)) (EQUAL_GREATER . 
(expression . 1)) (DIGITS . (expression . 1)) (COMMA . (expression . 1)) 
(RIGHT_PAREN . (expression . 1)) (RANGE . (expression . 1)) (THEN . (expression 
. 1)) (SEMICOLON . (expression . 1)) (WITH . (expression . 1)) (IS . 
(expression . 1)))
+      ((default . error) (DO . (expression . 2)) (LOOP . (expression . 2)) 
(XOR . (expression . 2)) (OR . (expression . 2)) (AND . ( 352 (expression . 
2))) (ELSIF . (expression . 2)) (ELSE . (expression . 2)) (EQUAL_GREATER . 
(expression . 2)) (DIGITS . (expression . 2)) (COMMA . (expression . 2)) 
(RIGHT_PAREN . (expression . 2)) (RANGE . (expression . 2)) (THEN . (expression 
. 2)) (SEMICOLON . (expression . 2)) (WITH . (expression . 2)) (IS . 
(expression . 2)))
+      ((default . error) (DO . (expression . 3)) (LOOP . (expression . 3)) 
(XOR . (expression . 3)) (OR . ( 351 (expression . 3))) (AND . (expression . 
3)) (ELSIF . (expression . 3)) (ELSE . (expression . 3)) (EQUAL_GREATER . 
(expression . 3)) (DIGITS . (expression . 3)) (COMMA . (expression . 3)) 
(RIGHT_PAREN . (expression . 3)) (RANGE . (expression . 3)) (THEN . (expression 
. 3)) (SEMICOLON . (expression . 3)) (WITH . (expression . 3)) (IS . 
(expression . 3)))
+      ((default . error) (DO . (expression . 4)) (LOOP . (expression . 4)) 
(XOR . (expression . 4)) (OR . ( 350 (expression . 4))) (AND . (expression . 
4)) (ELSIF . (expression . 4)) (ELSE . (expression . 4)) (EQUAL_GREATER . 
(expression . 4)) (DIGITS . (expression . 4)) (COMMA . (expression . 4)) 
(RIGHT_PAREN . (expression . 4)) (RANGE . (expression . 4)) (THEN . (expression 
. 4)) (SEMICOLON . (expression . 4)) (WITH . (expression . 4)) (IS . 
(expression . 4)))
+      ((default . error) (DO . (expression . 5)) (LOOP . (expression . 5)) 
(XOR . ( 349 (expression . 5))) (OR . (expression . 5)) (AND . (expression . 
5)) (ELSIF . (expression . 5)) (ELSE . (expression . 5)) (EQUAL_GREATER . 
(expression . 5)) (DIGITS . (expression . 5)) (COMMA . (expression . 5)) 
(RIGHT_PAREN . (expression . 5)) (RANGE . (expression . 5)) (THEN . (expression 
. 5)) (SEMICOLON . (expression . 5)) (WITH . (expression . 5)) (IS . 
(expression . 5)))
+      ((default . error) (DO . (expression . 0)) (LOOP . (expression . 0)) 
(XOR . ( 348 (expression . 0))) (OR . ( 347 (expression . 0))) (AND . ( 346 
(expression . 0))) (ELSIF . (expression . 0)) (ELSE . (expression . 0)) 
(EQUAL_GREATER . (expression . 0)) (DIGITS . (expression . 0)) (COMMA . 
(expression . 0)) (RIGHT_PAREN . (expression . 0)) (RANGE . (expression . 0)) 
(THEN . (expression . 0)) (SEMICOLON . (expression . 0)) (WITH . (expression . 
0)) (IS . (expression . 0)))
+      ((default . error) (IN .  336) (NOT .  337) (SEMICOLON . (relation . 0)) 
(IS . (relation . 0)) (WITH . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(COMMA . (relation . 0)) (DOT_DOT .  338) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . ((choice_relation . 1) (relation 
. 0))) (OR . ((choice_relation . 1) (relation . 0))) (XOR . ((choice_relation . 
1) (relation . 0))) (EQUAL .  339) (SLASH_EQUAL .  344) (LESS .  342) 
(LESS_EQUAL .  343) (GREATER .  34 [...]
+      ((default . error) (OF . (term_list . 0)) (COLON_EQUAL . (term_list . 
0)) (DO . (term_list . 0)) (LOOP . (term_list . 0)) (ELSIF . (term_list . 0)) 
(ELSE . (term_list . 0)) (DIGITS . (term_list . 0)) (COMMA . (term_list . 0)) 
(RIGHT_PAREN . (term_list . 0)) (RANGE . (term_list . 0)) (THEN . (term_list . 
0)) (WITH . (term_list . 0)) (BAR . (term_list . 0)) (EQUAL_GREATER . 
(term_list . 0)) (IS . (term_list . 0)) (SLASH_EQUAL . (term_list . 0)) 
(LESS_EQUAL . (term_list . 0)) (LESS .  [...]
+      ((default . error) (OF . (simple_expression . 1)) (COLON_EQUAL . 
(simple_expression . 1)) (DO . (simple_expression . 1)) (LOOP . 
(simple_expression . 1)) (ELSIF . (simple_expression . 1)) (ELSE . 
(simple_expression . 1)) (DIGITS . (simple_expression . 1)) (RIGHT_PAREN . 
(simple_expression . 1)) (COMMA . (simple_expression . 1)) (RANGE . 
(simple_expression . 1)) (THEN . (simple_expression . 1)) (WITH . 
(simple_expression . 1)) (BAR . (simple_expression . 1)) (EQUAL_GREATER . 
(simple [...]
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (IS .  323))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (COMMA .  267) (SEMICOLON . (aspect_specification_opt 
. 1)) (IS . (aspect_specification_opt . 1)))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  272))
-      ((default . error) (RIGHT_PAREN .  271))
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  266))
+      ((default . error) (RIGHT_PAREN .  265))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)) (RIGHT_PAREN . (range_list . 0)) (COMMA . (range_list . 
0)))
-      ((default . error) (COMMA .  270) (RIGHT_PAREN .  269))
+      ((default . error) (COMMA .  264) (RIGHT_PAREN .  263))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (COMMA .  120) (SEMICOLON .  267))
+      ((default . error) (COMMA .  120) (SEMICOLON .  261))
       ((default . error) ($EOI . (with_clause . 1)) (FUNCTION . (with_clause . 
1)) (GENERIC . (with_clause . 1)) (LIMITED . (with_clause . 1)) (NOT . 
(with_clause . 1)) (OVERRIDING . (with_clause . 1)) (PACKAGE . (with_clause . 
1)) (PRAGMA . (with_clause . 1)) (PRIVATE . (with_clause . 1)) (PROCEDURE . 
(with_clause . 1)) (SEPARATE . (with_clause . 1)) (USE . (with_clause . 1)) 
(WITH . (with_clause . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (BOX .  260) (SEMICOLON . 
(discriminant_specification_opt . 0)) (RIGHT_PAREN . 
(discriminant_specification_opt . 0)) (IDENTIFIER .  77))
-      ((default . error) (IS .  258) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
-      ((default . error) (ABSTRACT .  253) (BOX .  255) (NULL .  254) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  252))
-      ((default . error) (DOT .  90) (TICK .  91) (IS .  251) (LEFT_PAREN .  
107))
+      ((default . error) (BOX .  254) (SEMICOLON . 
(discriminant_specification_opt . 0)) (RIGHT_PAREN . 
(discriminant_specification_opt . 0)) (IDENTIFIER .  77))
+      ((default . error) (IS .  252) (SEMICOLON . (aspect_specification_opt . 
0)) (WITH .  109))
+      ((default . error) (ABSTRACT .  247) (BOX .  249) (NULL .  248) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  246))
+      ((default . error) (DOT .  90) (TICK .  91) (IS .  245) (LEFT_PAREN .  
107))
       ((default . error) (COLON . (identifier_list . 1)) (COMMA . 
(identifier_list . 1)))
-      ((default . error) (OUT .  250) (ACCESS . (mode_opt . 1)) (NOT . 
(mode_opt . 1)) (IDENTIFIER . (mode_opt . 1)) (STRING_LITERAL . (mode_opt . 1)) 
(CHARACTER_LITERAL . (mode_opt . 1)))
+      ((default . error) (OUT .  244) (ACCESS . (mode_opt . 1)) (NOT . 
(mode_opt . 1)) (IDENTIFIER . (mode_opt . 1)) (STRING_LITERAL . (mode_opt . 1)) 
(CHARACTER_LITERAL . (mode_opt . 1)))
       ((default . error) (ACCESS . (mode_opt . 3)) (NOT . (mode_opt . 3)) 
(IDENTIFIER . (mode_opt . 3)) (STRING_LITERAL . (mode_opt . 3)) 
(CHARACTER_LITERAL . (mode_opt . 3)))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (RIGHT_PAREN . 
(null_exclusion_opt . 0)) (COLON_EQUAL . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  232))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (DO . (null_exclusion_opt . 0)) (RIGHT_PAREN . 
(null_exclusion_opt . 0)) (COLON_EQUAL . (null_exclusion_opt . 0)) (RENAMES . 
(null_exclusion_opt . 0)) (WITH . (null_exclusion_opt . 0)) (SEMICOLON . 
(null_exclusion_opt . 0)) (IS . (null_exclusion_opt . 0)) (ACCESS . 
(null_exclusion_opt . 0)) (NOT .  226))
       ((default . error) (DO . (attribute_designator . 1)) (ELSIF . 
(attribute_designator . 1)) (ELSE . (attribute_designator . 1)) (DIGITS . 
(attribute_designator . 1)) (RANGE . (attribute_designator . 1)) (THEN . 
(attribute_designator . 1)) (USE . (attribute_designator . 1)) (COLON_EQUAL . 
(attribute_designator . 1)) (CHARACTER_LITERAL . (attribute_designator . 1)) 
(STRING_LITERAL . (attribute_designator . 1)) (IDENTIFIER . 
(attribute_designator . 1)) (LESS_LESS . (attribute_designator [...]
       ((default . error) (DO . (attribute_designator . 2)) (ELSIF . 
(attribute_designator . 2)) (ELSE . (attribute_designator . 2)) (DIGITS . 
(attribute_designator . 2)) (RANGE . (attribute_designator . 2)) (THEN . 
(attribute_designator . 2)) (USE . (attribute_designator . 2)) (COLON_EQUAL . 
(attribute_designator . 2)) (CHARACTER_LITERAL . (attribute_designator . 2)) 
(STRING_LITERAL . (attribute_designator . 2)) (IDENTIFIER . 
(attribute_designator . 2)) (LESS_LESS . (attribute_designator [...]
       ((default . error) (DO . (attribute_designator . 3)) (ELSIF . 
(attribute_designator . 3)) (ELSE . (attribute_designator . 3)) (DIGITS . 
(attribute_designator . 3)) (RANGE . (attribute_designator . 3)) (THEN . 
(attribute_designator . 3)) (USE . (attribute_designator . 3)) (COLON_EQUAL . 
(attribute_designator . 3)) (CHARACTER_LITERAL . (attribute_designator . 3)) 
(STRING_LITERAL . (attribute_designator . 3)) (IDENTIFIER . 
(attribute_designator . 3)) (LESS_LESS . (attribute_designator [...]
@@ -2045,92 +2039,68 @@
       ((default . error) (DO . (qualified_expression . 0)) (ELSIF . 
(qualified_expression . 0)) (ELSE . (qualified_expression . 0)) (DIGITS . 
(qualified_expression . 0)) (RANGE . (qualified_expression . 0)) (THEN . 
(qualified_expression . 0)) (USE . (qualified_expression . 0)) (COLON_EQUAL . 
(qualified_expression . 0)) (CHARACTER_LITERAL . (qualified_expression . 0)) 
(STRING_LITERAL . (qualified_expression . 0)) (IDENTIFIER . 
(qualified_expression . 0)) (LESS_LESS . (qualified_expression [...]
       ((default . error) (DO . (attribute_reference . 0)) (ELSIF . 
(attribute_reference . 0)) (ELSE . (attribute_reference . 0)) (DIGITS . 
(attribute_reference . 0)) (RANGE . (attribute_reference . 0)) (THEN . 
(attribute_reference . 0)) (USE . (attribute_reference . 0)) (COLON_EQUAL . 
(attribute_reference . 0)) (CHARACTER_LITERAL . (attribute_reference . 0)) 
(STRING_LITERAL . (attribute_reference . 0)) (IDENTIFIER . (attribute_reference 
. 0)) (LESS_LESS . (attribute_reference . 0)) (WHIL [...]
       ((default . error) (DO . (attribute_designator . 0)) (ELSIF . 
(attribute_designator . 0)) (ELSE . (attribute_designator . 0)) (DIGITS . 
(attribute_designator . 0)) (RANGE . (attribute_designator . 0)) (THEN . 
(attribute_designator . 0)) (USE . (attribute_designator . 0)) (COLON_EQUAL . 
(attribute_designator . 0)) (CHARACTER_LITERAL . (attribute_designator . 0)) 
(STRING_LITERAL . (attribute_designator . 0)) (IDENTIFIER . 
(attribute_designator . 0)) (LESS_LESS . (attribute_designator [...]
-      ((default . error) (DO . (selected_component . 3)) (RIGHT_PAREN . 
(selected_component . 3)) (BAR . (selected_component . 3)) (ELSIF . 
(selected_component . 3)) (ELSE . (selected_component . 3)) (EQUAL_GREATER . 
(selected_component . 3)) (DIGITS . (selected_component . 3)) (RANGE . 
(selected_component . 3)) (THEN . (selected_component . 3)) (DOT_DOT . 
(selected_component . 3)) (IN . (selected_component . 3)) (NOT . 
(selected_component . 3)) (EQUAL . (selected_component . 3)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 0)) (RIGHT_PAREN . 
(selected_component . 0)) (BAR . (selected_component . 0)) (ELSIF . 
(selected_component . 0)) (ELSE . (selected_component . 0)) (EQUAL_GREATER . 
(selected_component . 0)) (DIGITS . (selected_component . 0)) (RANGE . 
(selected_component . 0)) (THEN . (selected_component . 0)) (DOT_DOT . 
(selected_component . 0)) (IN . (selected_component . 0)) (NOT . 
(selected_component . 0)) (EQUAL . (selected_component . 0)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 2)) (RIGHT_PAREN . 
(selected_component . 2)) (BAR . (selected_component . 2)) (ELSIF . 
(selected_component . 2)) (ELSE . (selected_component . 2)) (EQUAL_GREATER . 
(selected_component . 2)) (DIGITS . (selected_component . 2)) (RANGE . 
(selected_component . 2)) (THEN . (selected_component . 2)) (DOT_DOT . 
(selected_component . 2)) (IN . (selected_component . 2)) (NOT . 
(selected_component . 2)) (EQUAL . (selected_component . 2)) (GREATE [...]
-      ((default . error) (DO . (selected_component . 1)) (RIGHT_PAREN . 
(selected_component . 1)) (BAR . (selected_component . 1)) (ELSIF . 
(selected_component . 1)) (ELSE . (selected_component . 1)) (EQUAL_GREATER . 
(selected_component . 1)) (DIGITS . (selected_component . 1)) (RANGE . 
(selected_component . 1)) (THEN . (selected_component . 1)) (DOT_DOT . 
(selected_component . 1)) (IN . (selected_component . 1)) (NOT . 
(selected_component . 1)) (EQUAL . (selected_component . 1)) (GREATE [...]
-      ((default . error) (NULL .  245))
+      ((default . error) (DO . (selected_component . 3)) (RIGHT_PAREN . 
(selected_component . 3)) (IN . (selected_component . 3)) (NOT . 
(selected_component . 3)) (PLUS . (selected_component . 3)) (MINUS . 
(selected_component . 3)) (AMPERSAND . (selected_component . 3)) (DOT_DOT . 
(selected_component . 3)) (MOD . (selected_component . 3)) (REM . 
(selected_component . 3)) (SLASH . (selected_component . 3)) (STAR . 
(selected_component . 3)) (STAR_STAR . (selected_component . 3)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 0)) (RIGHT_PAREN . 
(selected_component . 0)) (IN . (selected_component . 0)) (NOT . 
(selected_component . 0)) (PLUS . (selected_component . 0)) (MINUS . 
(selected_component . 0)) (AMPERSAND . (selected_component . 0)) (DOT_DOT . 
(selected_component . 0)) (MOD . (selected_component . 0)) (REM . 
(selected_component . 0)) (SLASH . (selected_component . 0)) (STAR . 
(selected_component . 0)) (STAR_STAR . (selected_component . 0)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 2)) (RIGHT_PAREN . 
(selected_component . 2)) (IN . (selected_component . 2)) (NOT . 
(selected_component . 2)) (PLUS . (selected_component . 2)) (MINUS . 
(selected_component . 2)) (AMPERSAND . (selected_component . 2)) (DOT_DOT . 
(selected_component . 2)) (MOD . (selected_component . 2)) (REM . 
(selected_component . 2)) (SLASH . (selected_component . 2)) (STAR . 
(selected_component . 2)) (STAR_STAR . (selected_component . 2)) (BAR . (se 
[...]
+      ((default . error) (DO . (selected_component . 1)) (RIGHT_PAREN . 
(selected_component . 1)) (IN . (selected_component . 1)) (NOT . 
(selected_component . 1)) (PLUS . (selected_component . 1)) (MINUS . 
(selected_component . 1)) (AMPERSAND . (selected_component . 1)) (DOT_DOT . 
(selected_component . 1)) (MOD . (selected_component . 1)) (REM . 
(selected_component . 1)) (SLASH . (selected_component . 1)) (STAR . 
(selected_component . 1)) (STAR_STAR . (selected_component . 1)) (BAR . (se 
[...]
+      ((default . error) (NULL .  239))
       ((default . error) (DO . (parameter_and_result_profile . 3)) 
(RIGHT_PAREN . (parameter_and_result_profile . 3)) (COLON_EQUAL . 
(parameter_and_result_profile . 3)) (RENAMES . (parameter_and_result_profile . 
3)) (WITH . (parameter_and_result_profile . 3)) (SEMICOLON . 
(parameter_and_result_profile . 3)) (IS . (parameter_and_result_profile . 3)))
-      ((default . error) (ACCESS .  242) (IS . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (WITH . (name_opt . 0)) (RENAMES . (name_opt . 0)) (COLON_EQUAL 
. (name_opt . 0)) (RIGHT_PAREN . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS .  236) (IS . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (WITH . (name_opt . 0)) (RENAMES . (name_opt . 0)) (COLON_EQUAL 
. (name_opt . 0)) (RIGHT_PAREN . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IN . (name . 0)) (NOT . (name . 0)) (EQUAL . (name . 
0)) (GREATER . (name . 0)) (GREATER_EQUAL . (name . 0)) (LESS . (name . 0)) 
(LESS_EQUAL . (name . 0)) (SLASH_EQUAL . (name . 0)) (BAR . (name . 0)) 
(EQUAL_GREATER . (name . 0)) (AND . (name . 0)) (OR . (name . 0)) (XOR . (name 
. 0)) (RIGHT_PAREN . (name . 0)) (LEFT_PAREN . (name . 0)) (RANGE . (name . 0)) 
(TICK . (name . 0)) (DOT . (name . 0)) (PLUS . (name . 0)) (MINUS . (name . 0)) 
(AMPERSAND . (name . 0)) ( [...]
-      ((default . error) (COLON .  241) (COMMA .  96))
+      ((default . error) (COLON .  235) (COMMA .  96))
       ((default . error) (RIGHT_PAREN . (parameter_specification_list . 0)) 
(SEMICOLON . (parameter_specification_list . 0)))
-      ((default . error) (SEMICOLON .  240) (RIGHT_PAREN .  239))
+      ((default . error) (SEMICOLON .  234) (RIGHT_PAREN .  233))
       ((default . error) (COLON_EQUAL . (formal_part . 0)) (RIGHT_PAREN . 
(formal_part . 0)) (DO . (formal_part . 0)) (WHEN . (formal_part . 0)) (RENAMES 
. (formal_part . 0)) (IS . (formal_part . 0)) (SEMICOLON . (formal_part . 0)) 
(WITH . (formal_part . 0)) (RETURN . (formal_part . 0)))
-      ((default . error) (IDENTIFIER .  77))
-      ((default . error) (ACCESS . (aliased_opt . 0)) (NOT . (aliased_opt . 
0)) (IN . (aliased_opt . 0)) (OUT . (aliased_opt . 0)) (IDENTIFIER . 
(aliased_opt . 0)) (STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . 
(aliased_opt . 0)) (ALIASED .  531))
-      ((default . error) (FUNCTION . (protected_opt . 0)) (PROCEDURE . 
(protected_opt . 0)) (PROTECTED .  528) (IDENTIFIER . 
(general_access_modifier_opt . 0)) (STRING_LITERAL . 
(general_access_modifier_opt . 0)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 0)) (ALL .  526) (CONSTANT .  527))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 0)) 
(SEMICOLON . (parameter_specification . 0)) (IDENTIFIER .  77))
+      ((default . error) (ACCESS . (aliased_opt . 0)) (NOT . (aliased_opt . 
0)) (IN . (aliased_opt . 0)) (OUT . (aliased_opt . 0)) (IDENTIFIER . 
(aliased_opt . 0)) (STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . 
(aliased_opt . 0)) (ALIASED .  523))
+      ((default . error) (FUNCTION . (protected_opt . 0)) (PROCEDURE . 
(protected_opt . 0)) (PROTECTED .  520) (IDENTIFIER . 
(general_access_modifier_opt . 0)) (STRING_LITERAL . 
(general_access_modifier_opt . 0)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 0)) (ALL .  518) (CONSTANT .  519))
       ((default . error) (DOT .  90) (DO . (name_opt . 1)) (COLON_EQUAL . 
(name_opt . 1)) (RIGHT_PAREN . (name_opt . 1)) (RENAMES . (name_opt . 1)) (IS . 
(name_opt . 1)) (WITH . (name_opt . 1)) (SEMICOLON . (name_opt . 1)) (TICK .  
91) (LEFT_PAREN .  107))
       ((default . error) (DO . (parameter_and_result_profile . 1)) 
(COLON_EQUAL . (parameter_and_result_profile . 1)) (RIGHT_PAREN . 
(parameter_and_result_profile . 1)) (RENAMES . (parameter_and_result_profile . 
1)) (IS . (parameter_and_result_profile . 1)) (SEMICOLON . 
(parameter_and_result_profile . 1)) (WITH . (parameter_and_result_profile . 1)))
       ((default . error) (DO . (null_exclusion_opt . 1)) (COLON_EQUAL . 
(null_exclusion_opt . 1)) (RIGHT_PAREN . (null_exclusion_opt . 1)) (RENAMES . 
(null_exclusion_opt . 1)) (ACCESS . (null_exclusion_opt . 1)) 
(CHARACTER_LITERAL . (null_exclusion_opt . 1)) (STRING_LITERAL . 
(null_exclusion_opt . 1)) (IDENTIFIER . (null_exclusion_opt . 1)) (IS . 
(null_exclusion_opt . 1)) (SEMICOLON . (null_exclusion_opt . 1)) (WITH . 
(null_exclusion_opt . 1)))
       ((default . error) (DO . (parameter_and_result_profile . 2)) 
(COLON_EQUAL . (parameter_and_result_profile . 2)) (RIGHT_PAREN . 
(parameter_and_result_profile . 2)) (RENAMES . (parameter_and_result_profile . 
2)) (IS . (parameter_and_result_profile . 2)) (SEMICOLON . 
(parameter_and_result_profile . 2)) (WITH . (parameter_and_result_profile . 2)))
-      ((default . error) (ACCESS .  242) (WITH . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (IS . (name_opt . 0)) (RENAMES . (name_opt . 0)) (RIGHT_PAREN . 
(name_opt . 0)) (COLON_EQUAL . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (COLON_EQUAL .  523) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (ACCESS .  242) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS .  236) (WITH . (name_opt . 0)) (SEMICOLON . 
(name_opt . 0)) (IS . (name_opt . 0)) (RENAMES . (name_opt . 0)) (RIGHT_PAREN . 
(name_opt . 0)) (COLON_EQUAL . (name_opt . 0)) (DO . (name_opt . 0)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (COLON_EQUAL .  515) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (ACCESS .  236) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
       ((default . error) (CHARACTER_LITERAL . (mode_opt . 2)) (STRING_LITERAL 
. (mode_opt . 2)) (IDENTIFIER . (mode_opt . 2)) (NOT . (mode_opt . 2)) (ACCESS 
. (mode_opt . 2)))
-      ((default . error) (NEW .  521))
+      ((default . error) (NEW .  513))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 1)) 
(WITH . (formal_subprogram_declaration . 1)) (USE . 
(formal_subprogram_declaration . 1)) (TYPE . (formal_subprogram_declaration . 
1)) (PRAGMA . (formal_subprogram_declaration . 1)) (FUNCTION . 
(formal_subprogram_declaration . 1)) (PROCEDURE . 
(formal_subprogram_declaration . 1)) (PACKAGE . (formal_subprogram_declaration 
. 1)))
-      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109) (BOX .  255) (NULL .  254) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109) (BOX .  249) (NULL .  248) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (WITH . (subprogram_default . 2)) (SEMICOLON . 
(subprogram_default . 2)))
       ((default . error) (WITH . (subprogram_default . 1)) (SEMICOLON . 
(subprogram_default . 1)))
       ((default . error) (WITH . (subprogram_default . 0)) (SEMICOLON . 
(subprogram_default . 0)) (DOT .  90) (TICK .  91) (LEFT_PAREN .  107))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (LEFT_PAREN .  502) (RANGE .  506) (MOD .  504) 
(DIGITS .  500) (DELTA .  499) (TASK .  509) (PROTECTED .  505) (INTERFACE .  
501) (ARRAY .  498) (PRIVATE . (abstract_tagged_limited_opt . 0)) (TAGGED .  
508) (NEW . (abstract_limited_synchronized_opt . 0)) (ABSTRACT .  497) (LIMITED 
.  503) (SYNCHRONIZED .  507) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (SEMICOLON .  496))
-      ((default . error) (RIGHT_PAREN .  495))
+      ((default . error) (LEFT_PAREN .  494) (RANGE .  498) (MOD .  496) 
(DIGITS .  492) (DELTA .  491) (TASK .  501) (PROTECTED .  497) (INTERFACE .  
493) (ARRAY .  490) (PRIVATE . (abstract_tagged_limited_opt . 0)) (TAGGED .  
500) (NEW . (abstract_limited_synchronized_opt . 0)) (ABSTRACT .  489) (LIMITED 
.  495) (SYNCHRONIZED .  499) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (SEMICOLON .  488))
+      ((default . error) (RIGHT_PAREN .  487))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_list . 0)) 
(SEMICOLON . (discriminant_specification_list . 0)))
-      ((default . error) (SEMICOLON .  494) (RIGHT_PAREN .  493))
-      ((default . error) (COMMA .  96) (COLON .  492))
+      ((default . error) (SEMICOLON .  486) (RIGHT_PAREN .  485))
+      ((default . error) (COMMA .  96) (COLON .  484))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (WITH . (with_clause . 0)) (USE . (with_clause . 0)) 
(SEPARATE . (with_clause . 0)) (PROCEDURE . (with_clause . 0)) (PRIVATE . 
(with_clause . 0)) (PRAGMA . (with_clause . 0)) (PACKAGE . (with_clause . 0)) 
(OVERRIDING . (with_clause . 0)) (NOT . (with_clause . 0)) (LIMITED . 
(with_clause . 0)) (GENERIC . (with_clause . 0)) (FUNCTION . (with_clause . 0)) 
($EOI . (with_clause . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DO . (name . 2)) (STAR_STAR . (name . 2)) (STAR . 
(name . 2)) (SLASH . (name . 2)) (REM . (name . 2)) (MOD . (name . 2)) (DOT_DOT 
. (name . 2)) (AMPERSAND . (name . 2)) (MINUS . (name . 2)) (PLUS . (name . 2)) 
(RIGHT_PAREN . (name . 2)) (XOR . (name . 2)) (OR . (name . 2)) (EQUAL_GREATER 
. (name . 2)) (BAR . (name . 2)) (SLASH_EQUAL . (name . 2)) (LESS_EQUAL . (name 
. 2)) (LESS . (name . 2)) (GREATER_EQUAL . (name . 2)) (GREATER . (name . 2)) 
(EQUAL . (name . 2) [...]
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (STAR_STAR . (actual_parameter_part . 1)) (STAR . 
(actual_parameter_part . 1)) (SLASH . (actual_parameter_part . 1)) (REM . 
(actual_parameter_part . 1)) (MOD . (actual_parameter_part . 1)) (DOT_DOT . 
(actual_parameter_part . 1)) (AMPERSAND . (actual_parameter_part . 1)) (MINUS . 
(actual_parameter_part . 1)) (PLUS . (actual_parameter_part . 1)) (RIGHT_PAREN 
. (actual_parameter_part . 1)) (XOR . (actual_parameter_part . 1)) (OR . 
(actual_parameter_part . 1)) (EQUAL [...]
       ((default . error) (STAR_STAR . (actual_parameter_part . 0)) (STAR . 
(actual_parameter_part . 0)) (SLASH . (actual_parameter_part . 0)) (REM . 
(actual_parameter_part . 0)) (MOD . (actual_parameter_part . 0)) (DOT_DOT . 
(actual_parameter_part . 0)) (AMPERSAND . (actual_parameter_part . 0)) (MINUS . 
(actual_parameter_part . 0)) (PLUS . (actual_parameter_part . 0)) (RIGHT_PAREN 
. (actual_parameter_part . 0)) (XOR . (actual_parameter_part . 0)) (OR . 
(actual_parameter_part . 0)) (EQUAL [...]
-      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (IS . 
((expression_opt . 0) (association_opt . 0))) (SEMICOLON . ((expression_opt . 
0) (association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  181) (NUME [...]
-      ((default . error) (SEMICOLON .  484))
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (IN .  479))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ABS . (relational_operator . 0)) (LEFT_PAREN . 
(relational_operator . 0)) (NEW . (relational_operator . 0)) (NOT . 
(relational_operator . 0)) (NULL . (relational_operator . 0)) (MINUS . 
(relational_operator . 0)) (PLUS . (relational_operator . 0)) (NUMERIC_LITERAL 
. (relational_operator . 0)) (IDENTIFIER . (relational_operator . 0)) 
(STRING_LITERAL . (relational_operator . 0)) (CHARACTER_LITERAL . 
(relational_operator . 0)))
-      ((default . error) (ABS . (relational_operator . 4)) (LEFT_PAREN . 
(relational_operator . 4)) (NEW . (relational_operator . 4)) (NOT . 
(relational_operator . 4)) (NULL . (relational_operator . 4)) (MINUS . 
(relational_operator . 4)) (PLUS . (relational_operator . 4)) (NUMERIC_LITERAL 
. (relational_operator . 4)) (IDENTIFIER . (relational_operator . 4)) 
(STRING_LITERAL . (relational_operator . 4)) (CHARACTER_LITERAL . 
(relational_operator . 4)))
-      ((default . error) (ABS . (relational_operator . 5)) (LEFT_PAREN . 
(relational_operator . 5)) (NEW . (relational_operator . 5)) (NOT . 
(relational_operator . 5)) (NULL . (relational_operator . 5)) (MINUS . 
(relational_operator . 5)) (PLUS . (relational_operator . 5)) (NUMERIC_LITERAL 
. (relational_operator . 5)) (IDENTIFIER . (relational_operator . 5)) 
(STRING_LITERAL . (relational_operator . 5)) (CHARACTER_LITERAL . 
(relational_operator . 5)))
-      ((default . error) (ABS . (relational_operator . 2)) (LEFT_PAREN . 
(relational_operator . 2)) (NEW . (relational_operator . 2)) (NOT . 
(relational_operator . 2)) (NULL . (relational_operator . 2)) (MINUS . 
(relational_operator . 2)) (PLUS . (relational_operator . 2)) (NUMERIC_LITERAL 
. (relational_operator . 2)) (IDENTIFIER . (relational_operator . 2)) 
(STRING_LITERAL . (relational_operator . 2)) (CHARACTER_LITERAL . 
(relational_operator . 2)))
-      ((default . error) (ABS . (relational_operator . 3)) (LEFT_PAREN . 
(relational_operator . 3)) (NEW . (relational_operator . 3)) (NOT . 
(relational_operator . 3)) (NULL . (relational_operator . 3)) (MINUS . 
(relational_operator . 3)) (PLUS . (relational_operator . 3)) (NUMERIC_LITERAL 
. (relational_operator . 3)) (IDENTIFIER . (relational_operator . 3)) 
(STRING_LITERAL . (relational_operator . 3)) (CHARACTER_LITERAL . 
(relational_operator . 3)))
-      ((default . error) (ABS . (relational_operator . 1)) (LEFT_PAREN . 
(relational_operator . 1)) (NEW . (relational_operator . 1)) (NOT . 
(relational_operator . 1)) (NULL . (relational_operator . 1)) (MINUS . 
(relational_operator . 1)) (PLUS . (relational_operator . 1)) (NUMERIC_LITERAL 
. (relational_operator . 1)) (IDENTIFIER . (relational_operator . 1)) 
(STRING_LITERAL . (relational_operator . 1)) (CHARACTER_LITERAL . 
(relational_operator . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RANGE .  476) (LEFT_PAREN .  148) (ACCESS .  221) 
(DELTA .  222) (DIGITS .  223) (MOD .  224) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (OTHERS .  182) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  472) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (THEN .  470) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSE .  468) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ELSE .  466))
-      ((default . error) (THEN .  465))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  459) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (XOR . (primary . 1)) (OR . (primary . 1)) (AND . 
(primary . 1)) (SLASH_EQUAL . (primary . 1)) (LESS_EQUAL . (primary . 1)) (LESS 
. (primary . 1)) (GREATER_EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(EQUAL . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (BAR . (primary . 1)) 
(PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(DOT_DOT . (primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . 
(primary . 1)) (STAR . (primar [...]
-      ((default . error) (COLON_EQUAL . (factor . 3)) (OF . (factor . 3)) 
(LOOP . (factor . 3)) (DO . (factor . 3)) (PLUS . (factor . 3)) (MINUS . 
(factor . 3)) (AMPERSAND . (factor . 3)) (SEMICOLON . (factor . 3)) (MOD . 
(factor . 3)) (REM . (factor . 3)) (SLASH . (factor . 3)) (STAR . (factor . 3)) 
(XOR . (factor . 3)) (OR . (factor . 3)) (AND . (factor . 3)) (IN . (factor . 
3)) (NOT . (factor . 3)) (EQUAL . (factor . 3)) (GREATER . (factor . 3)) 
(GREATER_EQUAL . (factor . 3)) (LESS .  [...]
-      ((default . error) (IDENTIFIER .  453) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  454))
-      ((default . error) (BODY .  452) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49))
-      ((default . error) (IDENTIFIER .  451) (TYPE .  450) (BODY .  449))
-      ((default . error) (IDENTIFIER .  448))
-      ((default . error) (TYPE .  446) (BODY .  445) (IDENTIFIER .  447))
-      ((default . error) (IDENTIFIER .  444))
-      ((default . error) (COLON . ( 443 (identifier_list . 0))) (COMMA . 
(identifier_list . 0)))
+      ((default . error) (IS . ((expression_opt . 0) (association_opt . 0))) 
(SEMICOLON . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (RIGHT_PAREN . ((expression_opt . 
0) (association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUME [...]
+      ((default . error) (SEMICOLON .  476))
+      ((default . error) (IDENTIFIER .  471) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  472))
+      ((default . error) (BODY .  470) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49))
+      ((default . error) (IDENTIFIER .  469) (TYPE .  468) (BODY .  467))
+      ((default . error) (IDENTIFIER .  466))
+      ((default . error) (TYPE .  464) (BODY .  463) (IDENTIFIER .  465))
+      ((default . error) (IDENTIFIER .  462))
+      ((default . error) (COLON . ( 461 (identifier_list . 0))) (COMMA . 
(identifier_list . 0)))
       ((default . error) (END . (declaration . 0)) (PRIVATE . (declaration . 
0)) (IDENTIFIER . (declaration . 0)) (USE . (declaration . 0)) (TYPE . 
(declaration . 0)) (TASK . (declaration . 0)) (SUBTYPE . (declaration . 0)) 
(PROTECTED . (declaration . 0)) (PROCEDURE . (declaration . 0)) (PRAGMA . 
(declaration . 0)) (PACKAGE . (declaration . 0)) (OVERRIDING . (declaration . 
0)) (NOT . (declaration . 0)) (GENERIC . (declaration . 0)) (FUNCTION . 
(declaration . 0)) (FOR . (declaration . 0)) [...]
       ((default . error) (END . (declaration . 1)) (PRIVATE . (declaration . 
1)) (IDENTIFIER . (declaration . 1)) (USE . (declaration . 1)) (TYPE . 
(declaration . 1)) (TASK . (declaration . 1)) (SUBTYPE . (declaration . 1)) 
(PROTECTED . (declaration . 1)) (PROCEDURE . (declaration . 1)) (PRAGMA . 
(declaration . 1)) (PACKAGE . (declaration . 1)) (OVERRIDING . (declaration . 
1)) (NOT . (declaration . 1)) (GENERIC . (declaration . 1)) (FUNCTION . 
(declaration . 1)) (FOR . (declaration . 1)) [...]
       ((default . error) (WHEN . (aspect_clause . 3)) (PRIVATE . 
(aspect_clause . 3)) (END . (aspect_clause . 3)) (CASE . (aspect_clause . 3)) 
(BEGIN . (aspect_clause . 3)) (ENTRY . (aspect_clause . 3)) (FOR . 
(aspect_clause . 3)) (FUNCTION . (aspect_clause . 3)) (GENERIC . (aspect_clause 
. 3)) (NOT . (aspect_clause . 3)) (OVERRIDING . (aspect_clause . 3)) (PACKAGE . 
(aspect_clause . 3)) (PRAGMA . (aspect_clause . 3)) (PROCEDURE . (aspect_clause 
. 3)) (PROTECTED . (aspect_clause . 3)) (S [...]
       ((default . error) (END . (declaration . 2)) (PRIVATE . (declaration . 
2)) (IDENTIFIER . (declaration . 2)) (USE . (declaration . 2)) (TYPE . 
(declaration . 2)) (TASK . (declaration . 2)) (SUBTYPE . (declaration . 2)) 
(PROTECTED . (declaration . 2)) (PROCEDURE . (declaration . 2)) (PRAGMA . 
(declaration . 2)) (PACKAGE . (declaration . 2)) (OVERRIDING . (declaration . 
2)) (NOT . (declaration . 2)) (GENERIC . (declaration . 2)) (FUNCTION . 
(declaration . 2)) (FOR . (declaration . 2)) [...]
       ((default . error) (PRIVATE . (body . 1)) (END . (body . 1)) (BEGIN . 
(body . 1)) (ENTRY . (body . 1)) (FOR . (body . 1)) (FUNCTION . (body . 1)) 
(GENERIC . (body . 1)) (NOT . (body . 1)) (OVERRIDING . (body . 1)) (PACKAGE . 
(body . 1)) (PRAGMA . (body . 1)) (PROCEDURE . (body . 1)) (PROTECTED . (body . 
1)) (SUBTYPE . (body . 1)) (TASK . (body . 1)) (TYPE . (body . 1)) (USE . (body 
. 1)) (IDENTIFIER . (body . 1)))
       ((default . error) (PRIVATE . (declarations . 0)) (END . (declarations . 
0)) (BEGIN . (declarations . 0)) (ENTRY . (declarations . 0)) (FOR . 
(declarations . 0)) (FUNCTION . (declarations . 0)) (GENERIC . (declarations . 
0)) (NOT . (declarations . 0)) (OVERRIDING . (declarations . 0)) (PACKAGE . 
(declarations . 0)) (PRAGMA . (declarations . 0)) (PROCEDURE . (declarations . 
0)) (PROTECTED . (declarations . 0)) (SUBTYPE . (declarations . 0)) (TASK . 
(declarations . 0)) (TYPE . (decla [...]
-      ((default . error) (END . (declarative_part_opt . 1)) (PRIVATE . 
(declarative_part_opt . 1)) (BEGIN . (declarative_part_opt . 1)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (END .  440) (PRIVATE .  441))
+      ((default . error) (END . (declarative_part_opt . 1)) (PRIVATE . 
(declarative_part_opt . 1)) (BEGIN . (declarative_part_opt . 1)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (END .  458) (PRIVATE .  459))
       ((default . error) (END . (declaration . 3)) (PRIVATE . (declaration . 
3)) (IDENTIFIER . (declaration . 3)) (USE . (declaration . 3)) (TYPE . 
(declaration . 3)) (TASK . (declaration . 3)) (SUBTYPE . (declaration . 3)) 
(PROTECTED . (declaration . 3)) (PROCEDURE . (declaration . 3)) (PRAGMA . 
(declaration . 3)) (PACKAGE . (declaration . 3)) (OVERRIDING . (declaration . 
3)) (NOT . (declaration . 3)) (GENERIC . (declaration . 3)) (FUNCTION . 
(declaration . 3)) (FOR . (declaration . 3)) [...]
       ((default . error) (WHEN . (aspect_clause . 1)) (PRIVATE . 
(aspect_clause . 1)) (END . (aspect_clause . 1)) (CASE . (aspect_clause . 1)) 
(BEGIN . (aspect_clause . 1)) (ENTRY . (aspect_clause . 1)) (FOR . 
(aspect_clause . 1)) (FUNCTION . (aspect_clause . 1)) (GENERIC . (aspect_clause 
. 1)) (NOT . (aspect_clause . 1)) (OVERRIDING . (aspect_clause . 1)) (PACKAGE . 
(aspect_clause . 1)) (PRAGMA . (aspect_clause . 1)) (PROCEDURE . (aspect_clause 
. 1)) (PROTECTED . (aspect_clause . 1)) (S [...]
       ((default . error) (END . (declaration . 4)) (PRIVATE . (declaration . 
4)) (IDENTIFIER . (declaration . 4)) (USE . (declaration . 4)) (TYPE . 
(declaration . 4)) (TASK . (declaration . 4)) (SUBTYPE . (declaration . 4)) 
(PROTECTED . (declaration . 4)) (PROCEDURE . (declaration . 4)) (PRAGMA . 
(declaration . 4)) (PACKAGE . (declaration . 4)) (OVERRIDING . (declaration . 
4)) (NOT . (declaration . 4)) (GENERIC . (declaration . 4)) (FUNCTION . 
(declaration . 4)) (FOR . (declaration . 4)) [...]
@@ -2139,12 +2109,12 @@
       ((default . error) (END . (declaration . 6)) (PRIVATE . (declaration . 
6)) (IDENTIFIER . (declaration . 6)) (USE . (declaration . 6)) (TYPE . 
(declaration . 6)) (TASK . (declaration . 6)) (SUBTYPE . (declaration . 6)) 
(PROTECTED . (declaration . 6)) (PROCEDURE . (declaration . 6)) (PRAGMA . 
(declaration . 6)) (PACKAGE . (declaration . 6)) (OVERRIDING . (declaration . 
6)) (NOT . (declaration . 6)) (GENERIC . (declaration . 6)) (FUNCTION . 
(declaration . 6)) (FOR . (declaration . 6)) [...]
       ((default . error) (END . (declaration . 7)) (PRIVATE . (declaration . 
7)) (IDENTIFIER . (declaration . 7)) (USE . (declaration . 7)) (TYPE . 
(declaration . 7)) (TASK . (declaration . 7)) (SUBTYPE . (declaration . 7)) 
(PROTECTED . (declaration . 7)) (PROCEDURE . (declaration . 7)) (PRAGMA . 
(declaration . 7)) (PACKAGE . (declaration . 7)) (OVERRIDING . (declaration . 
7)) (NOT . (declaration . 7)) (GENERIC . (declaration . 7)) (FUNCTION . 
(declaration . 7)) (FOR . (declaration . 7)) [...]
       ((default . error) (PRIVATE . (renaming_declaration . 3)) (END . 
(renaming_declaration . 3)) (BEGIN . (renaming_declaration . 3)) (ENTRY . 
(renaming_declaration . 3)) (FOR . (renaming_declaration . 3)) (FUNCTION . 
(renaming_declaration . 3)) (GENERIC . (renaming_declaration . 3)) (NOT . 
(renaming_declaration . 3)) (OVERRIDING . (renaming_declaration . 3)) (PACKAGE 
. (renaming_declaration . 3)) (PRAGMA . (renaming_declaration . 3)) (PROCEDURE 
. (renaming_declaration . 3)) (PROTECTED [...]
-      ((default . error) (COMMA .  96) (COLON .  439))
+      ((default . error) (COMMA .  96) (COLON .  457))
       ((default . error) (PRIVATE . (type_declaration . 1)) (END . 
(type_declaration . 1)) (BEGIN . (type_declaration . 1)) (ENTRY . 
(type_declaration . 1)) (FOR . (type_declaration . 1)) (FUNCTION . 
(type_declaration . 1)) (GENERIC . (type_declaration . 1)) (NOT . 
(type_declaration . 1)) (OVERRIDING . (type_declaration . 1)) (PACKAGE . 
(type_declaration . 1)) (PRAGMA . (type_declaration . 1)) (PROCEDURE . 
(type_declaration . 1)) (PROTECTED . (type_declaration . 1)) (SUBTYPE . 
(type_decl [...]
       ((default . error) (END . (declaration . 8)) (PRIVATE . (declaration . 
8)) (IDENTIFIER . (declaration . 8)) (USE . (declaration . 8)) (TYPE . 
(declaration . 8)) (TASK . (declaration . 8)) (SUBTYPE . (declaration . 8)) 
(PROTECTED . (declaration . 8)) (PROCEDURE . (declaration . 8)) (PRAGMA . 
(declaration . 8)) (PACKAGE . (declaration . 8)) (OVERRIDING . (declaration . 
8)) (NOT . (declaration . 8)) (GENERIC . (declaration . 8)) (FUNCTION . 
(declaration . 8)) (FOR . (declaration . 8)) [...]
       ((default . error) (END . (declaration . 10)) (PRIVATE . (declaration . 
10)) (IDENTIFIER . (declaration . 10)) (USE . (declaration . 10)) (TYPE . 
(declaration . 10)) (TASK . (declaration . 10)) (SUBTYPE . (declaration . 10)) 
(PROTECTED . (declaration . 10)) (PROCEDURE . (declaration . 10)) (PRAGMA . 
(declaration . 10)) (PACKAGE . (declaration . 10)) (OVERRIDING . (declaration . 
10)) (NOT . (declaration . 10)) (GENERIC . (declaration . 10)) (FUNCTION . 
(declaration . 10)) (FOR . (de [...]
       ((default . error) (PRIVATE . (renaming_declaration . 0)) (END . 
(renaming_declaration . 0)) (BEGIN . (renaming_declaration . 0)) (ENTRY . 
(renaming_declaration . 0)) (FOR . (renaming_declaration . 0)) (FUNCTION . 
(renaming_declaration . 0)) (GENERIC . (renaming_declaration . 0)) (NOT . 
(renaming_declaration . 0)) (OVERRIDING . (renaming_declaration . 0)) (PACKAGE 
. (renaming_declaration . 0)) (PRAGMA . (renaming_declaration . 0)) (PROCEDURE 
. (renaming_declaration . 0)) (PROTECTED [...]
-      ((default . error) (ENTRY .  435) (FUNCTION .  40) (PROCEDURE .  41))
+      ((default . error) (ENTRY .  453) (FUNCTION .  40) (PROCEDURE .  41))
       ((default . error) ($EOI . (proper_body . 1)) (LIMITED . (proper_body . 
1)) (SEPARATE . (proper_body . 1)) (WITH . (proper_body . 1)) (END . 
(proper_body . 1)) (PRIVATE . (proper_body . 1)) (IDENTIFIER . (proper_body . 
1)) (USE . (proper_body . 1)) (TYPE . (proper_body . 1)) (TASK . (proper_body . 
1)) (SUBTYPE . (proper_body . 1)) (PROTECTED . (proper_body . 1)) (PROCEDURE . 
(proper_body . 1)) (PRAGMA . (proper_body . 1)) (PACKAGE . (proper_body . 1)) 
(OVERRIDING . (proper_body . 1 [...]
       ((default . error) (END . (body_stub . 1)) (PRIVATE . (body_stub . 1)) 
(IDENTIFIER . (body_stub . 1)) (USE . (body_stub . 1)) (TYPE . (body_stub . 1)) 
(TASK . (body_stub . 1)) (SUBTYPE . (body_stub . 1)) (PROTECTED . (body_stub . 
1)) (PROCEDURE . (body_stub . 1)) (PRAGMA . (body_stub . 1)) (PACKAGE . 
(body_stub . 1)) (OVERRIDING . (body_stub . 1)) (NOT . (body_stub . 1)) 
(GENERIC . (body_stub . 1)) (FUNCTION . (body_stub . 1)) (FOR . (body_stub . 
1)) (ENTRY . (body_stub . 1)) (BEGI [...]
       ((default . error) (END . (declaration . 11)) (PRIVATE . (declaration . 
11)) (IDENTIFIER . (declaration . 11)) (USE . (declaration . 11)) (TYPE . 
(declaration . 11)) (TASK . (declaration . 11)) (SUBTYPE . (declaration . 11)) 
(PROTECTED . (declaration . 11)) (PROCEDURE . (declaration . 11)) (PRAGMA . 
(declaration . 11)) (PACKAGE . (declaration . 11)) (OVERRIDING . (declaration . 
11)) (NOT . (declaration . 11)) (GENERIC . (declaration . 11)) (FUNCTION . 
(declaration . 11)) (FOR . (de [...]
@@ -2170,302 +2140,324 @@
       ((default . error) (END . (full_type_declaration . 1)) (PRIVATE . 
(full_type_declaration . 1)) (IDENTIFIER . (full_type_declaration . 1)) (USE . 
(full_type_declaration . 1)) (TYPE . (full_type_declaration . 1)) (TASK . 
(full_type_declaration . 1)) (SUBTYPE . (full_type_declaration . 1)) (PROTECTED 
. (full_type_declaration . 1)) (PROCEDURE . (full_type_declaration . 1)) 
(PRAGMA . (full_type_declaration . 1)) (PACKAGE . (full_type_declaration . 1)) 
(OVERRIDING . (full_type_declaratio [...]
       ((default . error) (END . (declaration . 16)) (PRIVATE . (declaration . 
16)) (IDENTIFIER . (declaration . 16)) (USE . (declaration . 16)) (TYPE . 
(declaration . 16)) (TASK . (declaration . 16)) (SUBTYPE . (declaration . 16)) 
(PROTECTED . (declaration . 16)) (PROCEDURE . (declaration . 16)) (PRAGMA . 
(declaration . 16)) (PACKAGE . (declaration . 16)) (OVERRIDING . (declaration . 
16)) (NOT . (declaration . 16)) (GENERIC . (declaration . 16)) (FUNCTION . 
(declaration . 16)) (FOR . (de [...]
       ((default . error) (END . (declaration . 17)) (PRIVATE . (declaration . 
17)) (IDENTIFIER . (declaration . 17)) (USE . (declaration . 17)) (TYPE . 
(declaration . 17)) (TASK . (declaration . 17)) (SUBTYPE . (declaration . 17)) 
(PROTECTED . (declaration . 17)) (PROCEDURE . (declaration . 17)) (PRAGMA . 
(declaration . 17)) (PACKAGE . (declaration . 17)) (OVERRIDING . (declaration . 
17)) (NOT . (declaration . 17)) (GENERIC . (declaration . 17)) (FUNCTION . 
(declaration . 17)) (FOR . (de [...]
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (END . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (COLON_EQUAL . (simple_expression . 0)) (OF . 
(simple_expression . 0)) (LOOP . (simple_expression . 0)) (DO . 
(simple_expression . 0)) (DOT_DOT . (simple_expression . 0)) (SEMICOLON . 
(simple_expression . 0)) (XOR . (simple_expression . 0)) (OR . 
(simple_expression . 0)) (AND . (simple_expression . 0)) (SLASH_EQUAL . 
(simple_expression . 0)) (LESS_EQUAL . (simple_expression . 0)) (LESS . 
(simple_expression . 0)) (GREATER_EQUAL . (simple_expression . 0)) (GREATER  
[...]
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (END . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DOT .  90) (OF . (primary . 3)) (COLON_EQUAL . 
(primary . 3)) (DO . (primary . 3)) (LOOP . (primary . 3)) (BAR . (primary . 
3)) (COMMA . (primary . 3)) (ELSIF . (primary . 3)) (ELSE . (primary . 3)) 
(EQUAL_GREATER . (primary . 3)) (RIGHT_PAREN . (primary . 3)) (DIGITS . 
(primary . 3)) (RANGE . (primary . 3)) (THEN . (primary . 3)) (DOT_DOT . 
(primary . 3)) (WITH . (primary . 3)) (IS . (primary . 3)) (IN . (primary . 3)) 
(NOT . (primary . 3)) (EQUAL . (primary .  [...]
+      ((default . error) (COLON_EQUAL . (simple_expression . 0)) (OF . 
(simple_expression . 0)) (LOOP . (simple_expression . 0)) (DO . 
(simple_expression . 0)) (DOT_DOT . (simple_expression . 0)) (SEMICOLON . 
(simple_expression . 0)) (XOR . (simple_expression . 0)) (OR . 
(simple_expression . 0)) (AND . (simple_expression . 0)) (SLASH_EQUAL . 
(simple_expression . 0)) (LESS_EQUAL . (simple_expression . 0)) (LESS . 
(simple_expression . 0)) (GREATER_EQUAL . (simple_expression . 0)) (GREATER  
[...]
       ((default . error) (ABS . (binary_adding_operator . 2)) (LEFT_PAREN . 
(binary_adding_operator . 2)) (NEW . (binary_adding_operator . 2)) (NOT . 
(binary_adding_operator . 2)) (NULL . (binary_adding_operator . 2)) 
(NUMERIC_LITERAL . (binary_adding_operator . 2)) (IDENTIFIER . 
(binary_adding_operator . 2)) (STRING_LITERAL . (binary_adding_operator . 2)) 
(CHARACTER_LITERAL . (binary_adding_operator . 2)))
       ((default . error) (ABS . (binary_adding_operator . 1)) (LEFT_PAREN . 
(binary_adding_operator . 1)) (NEW . (binary_adding_operator . 1)) (NOT . 
(binary_adding_operator . 1)) (NULL . (binary_adding_operator . 1)) 
(NUMERIC_LITERAL . (binary_adding_operator . 1)) (IDENTIFIER . 
(binary_adding_operator . 1)) (STRING_LITERAL . (binary_adding_operator . 1)) 
(CHARACTER_LITERAL . (binary_adding_operator . 1)))
       ((default . error) (ABS . (binary_adding_operator . 0)) (LEFT_PAREN . 
(binary_adding_operator . 0)) (NEW . (binary_adding_operator . 0)) (NOT . 
(binary_adding_operator . 0)) (NULL . (binary_adding_operator . 0)) 
(NUMERIC_LITERAL . (binary_adding_operator . 0)) (IDENTIFIER . 
(binary_adding_operator . 0)) (STRING_LITERAL . (binary_adding_operator . 0)) 
(CHARACTER_LITERAL . (binary_adding_operator . 0)))
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (ABS . (multiplying_operator . 2)) (LEFT_PAREN . 
(multiplying_operator . 2)) (NEW . (multiplying_operator . 2)) (NOT . 
(multiplying_operator . 2)) (NULL . (multiplying_operator . 2)) 
(NUMERIC_LITERAL . (multiplying_operator . 2)) (IDENTIFIER . 
(multiplying_operator . 2)) (STRING_LITERAL . (multiplying_operator . 2)) 
(CHARACTER_LITERAL . (multiplying_operator . 2)))
       ((default . error) (ABS . (multiplying_operator . 3)) (LEFT_PAREN . 
(multiplying_operator . 3)) (NEW . (multiplying_operator . 3)) (NOT . 
(multiplying_operator . 3)) (NULL . (multiplying_operator . 3)) 
(NUMERIC_LITERAL . (multiplying_operator . 3)) (IDENTIFIER . 
(multiplying_operator . 3)) (STRING_LITERAL . (multiplying_operator . 3)) 
(CHARACTER_LITERAL . (multiplying_operator . 3)))
       ((default . error) (ABS . (multiplying_operator . 1)) (LEFT_PAREN . 
(multiplying_operator . 1)) (NEW . (multiplying_operator . 1)) (NOT . 
(multiplying_operator . 1)) (NULL . (multiplying_operator . 1)) 
(NUMERIC_LITERAL . (multiplying_operator . 1)) (IDENTIFIER . 
(multiplying_operator . 1)) (STRING_LITERAL . (multiplying_operator . 1)) 
(CHARACTER_LITERAL . (multiplying_operator . 1)))
       ((default . error) (ABS . (multiplying_operator . 0)) (LEFT_PAREN . 
(multiplying_operator . 0)) (NEW . (multiplying_operator . 0)) (NOT . 
(multiplying_operator . 0)) (NULL . (multiplying_operator . 0)) 
(NUMERIC_LITERAL . (multiplying_operator . 0)) (IDENTIFIER . 
(multiplying_operator . 0)) (STRING_LITERAL . (multiplying_operator . 0)) 
(CHARACTER_LITERAL . (multiplying_operator . 0)))
-      ((default . error) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (THEN .  429) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (ELSE .  427) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSE .  424))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (THEN .  422))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  419))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  156) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  416))
-      ((default . error) (LOOP . (raise_expression . 0)) (DO . 
(raise_expression . 0)) (XOR . (raise_expression . 0)) (OR . (raise_expression 
. 0)) (AND . (raise_expression . 0)) (IS . (raise_expression . 0)) (SEMICOLON . 
(raise_expression . 0)) (THEN . (raise_expression . 0)) (RANGE . 
(raise_expression . 0)) (RIGHT_PAREN . (raise_expression . 0)) (COMMA . 
(raise_expression . 0)) (DIGITS . (raise_expression . 0)) (EQUAL_GREATER . 
(raise_expression . 0)) (ELSE . (raise_expression . 0)) (E [...]
+      ((default . error) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IN .  445))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ABS . (relational_operator . 0)) (LEFT_PAREN . 
(relational_operator . 0)) (NEW . (relational_operator . 0)) (NOT . 
(relational_operator . 0)) (NULL . (relational_operator . 0)) (MINUS . 
(relational_operator . 0)) (PLUS . (relational_operator . 0)) (NUMERIC_LITERAL 
. (relational_operator . 0)) (IDENTIFIER . (relational_operator . 0)) 
(STRING_LITERAL . (relational_operator . 0)) (CHARACTER_LITERAL . 
(relational_operator . 0)))
+      ((default . error) (ABS . (relational_operator . 4)) (LEFT_PAREN . 
(relational_operator . 4)) (NEW . (relational_operator . 4)) (NOT . 
(relational_operator . 4)) (NULL . (relational_operator . 4)) (MINUS . 
(relational_operator . 4)) (PLUS . (relational_operator . 4)) (NUMERIC_LITERAL 
. (relational_operator . 4)) (IDENTIFIER . (relational_operator . 4)) 
(STRING_LITERAL . (relational_operator . 4)) (CHARACTER_LITERAL . 
(relational_operator . 4)))
+      ((default . error) (ABS . (relational_operator . 5)) (LEFT_PAREN . 
(relational_operator . 5)) (NEW . (relational_operator . 5)) (NOT . 
(relational_operator . 5)) (NULL . (relational_operator . 5)) (MINUS . 
(relational_operator . 5)) (PLUS . (relational_operator . 5)) (NUMERIC_LITERAL 
. (relational_operator . 5)) (IDENTIFIER . (relational_operator . 5)) 
(STRING_LITERAL . (relational_operator . 5)) (CHARACTER_LITERAL . 
(relational_operator . 5)))
+      ((default . error) (ABS . (relational_operator . 2)) (LEFT_PAREN . 
(relational_operator . 2)) (NEW . (relational_operator . 2)) (NOT . 
(relational_operator . 2)) (NULL . (relational_operator . 2)) (MINUS . 
(relational_operator . 2)) (PLUS . (relational_operator . 2)) (NUMERIC_LITERAL 
. (relational_operator . 2)) (IDENTIFIER . (relational_operator . 2)) 
(STRING_LITERAL . (relational_operator . 2)) (CHARACTER_LITERAL . 
(relational_operator . 2)))
+      ((default . error) (ABS . (relational_operator . 3)) (LEFT_PAREN . 
(relational_operator . 3)) (NEW . (relational_operator . 3)) (NOT . 
(relational_operator . 3)) (NULL . (relational_operator . 3)) (MINUS . 
(relational_operator . 3)) (PLUS . (relational_operator . 3)) (NUMERIC_LITERAL 
. (relational_operator . 3)) (IDENTIFIER . (relational_operator . 3)) 
(STRING_LITERAL . (relational_operator . 3)) (CHARACTER_LITERAL . 
(relational_operator . 3)))
+      ((default . error) (ABS . (relational_operator . 1)) (LEFT_PAREN . 
(relational_operator . 1)) (NEW . (relational_operator . 1)) (NOT . 
(relational_operator . 1)) (NULL . (relational_operator . 1)) (MINUS . 
(relational_operator . 1)) (PLUS . (relational_operator . 1)) (NUMERIC_LITERAL 
. (relational_operator . 1)) (IDENTIFIER . (relational_operator . 1)) 
(STRING_LITERAL . (relational_operator . 1)) (CHARACTER_LITERAL . 
(relational_operator . 1)))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (THEN .  441) (RAISE .  153) (PLUS .  155) (MINUS .  
154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (ELSE .  439) (RAISE .  153) (PLUS .  155) (MINUS .  
154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSE .  436))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (THEN .  434))
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (RANGE .  431) (LEFT_PAREN .  148) (ACCESS .  215) 
(DELTA .  216) (DIGITS .  217) (MOD .  218) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (OTHERS .  152) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BOX .  427) (SEMICOLON . (expression_opt . 0)) (IS . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  426))
+      ((default . error) (THEN .  424) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSE .  422) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSE .  420))
+      ((default . error) (THEN .  419))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  414))
+      ((default . error) (BOX .  412) (SEMICOLON . (expression_opt . 0)) (IS . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (LOOP . (raise_expression . 0)) (DO . 
(raise_expression . 0)) (XOR . (raise_expression . 0)) (OR . (raise_expression 
. 0)) (AND . (raise_expression . 0)) (IS . (raise_expression . 0)) (SEMICOLON . 
(raise_expression . 0)) (THEN . (raise_expression . 0)) (RANGE . 
(raise_expression . 0)) (RIGHT_PAREN . (raise_expression . 0)) (COMMA . 
(raise_expression . 0)) (DIGITS . (raise_expression . 0)) (EQUAL_GREATER . 
(raise_expression . 0)) (ELSE . (raise_expression . 0)) (E [...]
+      ((default . error) (XOR . (primary . 1)) (OR . (primary . 1)) (AND . 
(primary . 1)) (SLASH_EQUAL . (primary . 1)) (LESS_EQUAL . (primary . 1)) (LESS 
. (primary . 1)) (GREATER_EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(EQUAL . (primary . 1)) (EQUAL_GREATER . (primary . 1)) (BAR . (primary . 1)) 
(PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(DOT_DOT . (primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . 
(primary . 1)) (STAR . (primar [...]
+      ((default . error) (COLON_EQUAL . (factor . 3)) (OF . (factor . 3)) 
(LOOP . (factor . 3)) (DO . (factor . 3)) (THEN . (factor . 3)) (RANGE . 
(factor . 3)) (DIGITS . (factor . 3)) (ELSE . (factor . 3)) (ELSIF . (factor . 
3)) (XOR . (factor . 3)) (OR . (factor . 3)) (AND . (factor . 3)) (SLASH_EQUAL 
. (factor . 3)) (LESS_EQUAL . (factor . 3)) (LESS . (factor . 3)) 
(GREATER_EQUAL . (factor . 3)) (GREATER . (factor . 3)) (EQUAL . (factor . 3)) 
(EQUAL_GREATER . (factor . 3)) (BAR . (fac [...]
       ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL . (primary . 
4)) (OF . (primary . 4)) (LOOP . (primary . 4)) (DO . (primary . 4)) (STAR_STAR 
. (primary . 4)) (STAR . (primary . 4)) (SLASH . (primary . 4)) (REM . (primary 
. 4)) (MOD . (primary . 4)) (DOT_DOT . (primary . 4)) (AMPERSAND . (primary . 
4)) (MINUS . (primary . 4)) (PLUS . (primary . 4)) (SEMICOLON . (primary . 4)) 
(XOR . (primary . 4)) (OR . (primary . 4)) (AND . (primary . 4)) (SLASH_EQUAL . 
(primary . 4)) (LES [...]
-      ((default . error) (DOT_DOT . (primary . 1)) (RIGHT_PAREN . (primary . 
1)) (COMMA . (primary . 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 
1)) (PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER . 
(primary . 1)) (GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) 
(LESS_EQUAL . (primary . 1)) (SLASH_EQUAL . (primary . 1)) (WITH . (primary . 
1)) (MOD . (primary . 1)) (REM . [...]
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  413))
-      ((default . error) (RIGHT_PAREN .  412))
-      ((default . error) (RIGHT_PAREN . (expression_opt . 1)) (COMMA . 
(expression_opt . 1)) (WITH .  411))
-      ((default . error) (THEN .  410))
+      ((default . error) (DOT_DOT . (primary . 1)) (RIGHT_PAREN . (primary . 
1)) (COMMA . (primary . 1)) (BAR . (primary . 1)) (EQUAL_GREATER . (primary . 
1)) (PLUS . (primary . 1)) (MINUS . (primary . 1)) (AMPERSAND . (primary . 1)) 
(IN . (primary . 1)) (NOT . (primary . 1)) (EQUAL . (primary . 1)) (GREATER . 
(primary . 1)) (GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) 
(LESS_EQUAL . (primary . 1)) (SLASH_EQUAL . (primary . 1)) (WITH . (primary . 
1)) (MOD . (primary . 1)) (REM . [...]
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  408))
+      ((default . error) (RIGHT_PAREN .  407))
+      ((default . error) (COMMA . (association_opt . 5)) (RIGHT_PAREN . 
(association_opt . 5)) (WITH .  406))
+      ((default . error) (THEN .  405))
+      ((default . error) (IN .  336) (NOT .  337) (DO . (relation . 0)) (LOOP 
. (relation . 0)) (COMMA . (relation . 0)) (ELSIF . (relation . 0)) (ELSE . 
(relation . 0)) (EQUAL_GREATER . (relation . 0)) (RIGHT_PAREN . (relation . 0)) 
(DIGITS . (relation . 0)) (RANGE . (relation . 0)) (THEN . (relation . 0)) 
(WITH . (relation . 0)) (SEMICOLON . (relation . 0)) (IS . (relation . 0)) (AND 
. (relation . 0)) (OR . (relation . 0)) (XOR . (relation . 0)) (EQUAL .  339) 
(SLASH_EQUAL .  344) (LES [...]
       ((default . error) (IDENTIFIER . (quantifier . 0)))
       ((default . error) (IDENTIFIER . (quantifier . 1)))
-      ((default . error) (IDENTIFIER .  408))
-      ((default . error) (IS .  407))
+      ((default . error) (IDENTIFIER .  402))
+      ((default . error) (IS .  401))
       ((default . error) (COLON_EQUAL . (factor . 2)) (OF . (factor . 2)) 
(LOOP . (factor . 2)) (DO . (factor . 2)) (PLUS . (factor . 2)) (MINUS . 
(factor . 2)) (AMPERSAND . (factor . 2)) (DOT_DOT . (factor . 2)) (MOD . 
(factor . 2)) (REM . (factor . 2)) (SLASH . (factor . 2)) (STAR . (factor . 2)) 
(SEMICOLON . (factor . 2)) (XOR . (factor . 2)) (OR . (factor . 2)) (AND . 
(factor . 2)) (IN . (factor . 2)) (NOT . (factor . 2)) (EQUAL . (factor . 2)) 
(GREATER . (factor . 2)) (GREATER_EQUAL [...]
       ((default . error) (BODY .  67))
-      ((default . error) (BODY .  406))
-      ((default . error) (BODY .  405))
+      ((default . error) (BODY .  400))
+      ((default . error) (BODY .  399))
       ((default . error) (FUNCTION .  1) (PROCEDURE .  9))
       ((default . error) ($EOI . (subunit . 0)) (FUNCTION . (subunit . 0)) 
(GENERIC . (subunit . 0)) (LIMITED . (subunit . 0)) (NOT . (subunit . 0)) 
(OVERRIDING . (subunit . 0)) (PACKAGE . (subunit . 0)) (PRAGMA . (subunit . 0)) 
(PRIVATE . (subunit . 0)) (PROCEDURE . (subunit . 0)) (SEPARATE . (subunit . 
0)) (USE . (subunit . 0)) (WITH . (subunit . 0)))
       ((default . error) (SEPARATE . (use_clause . 1)) (LIMITED . (use_clause 
. 1)) ($EOI . (use_clause . 1)) (WITH . (use_clause . 1)) (PRIVATE . 
(use_clause . 1)) (END . (use_clause . 1)) (BEGIN . (use_clause . 1)) (ENTRY . 
(use_clause . 1)) (FOR . (use_clause . 1)) (FUNCTION . (use_clause . 1)) 
(GENERIC . (use_clause . 1)) (NOT . (use_clause . 1)) (OVERRIDING . (use_clause 
. 1)) (PACKAGE . (use_clause . 1)) (PRAGMA . (use_clause . 1)) (PROCEDURE . 
(use_clause . 1)) (PROTECTED . (use_c [...]
-      ((default . error) (SEMICOLON .  403))
-      ((default . error) (BEGIN .  402))
+      ((default . error) (SEMICOLON .  397))
+      ((default . error) (BEGIN .  396))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (BEGIN . (subprogram_renaming_declaration . 0)) 
(ENTRY . (subprogram_renaming_declaration . 0)) (FOR . 
(subprogram_renaming_declaration . 0)) (PROTECTED . 
(subprogram_renaming_declaration . 0)) (SUBTYPE . 
(subprogram_renaming_declaration . 0)) (TASK . (subprogram_renaming_declaration 
. 0)) (TYPE . (subprogram_renaming_declaration . 0)) (IDENTIFIER . 
(subprogram_renaming_declaration . 0)) (END . (subprogram_renaming_declaration 
. 0)) (WITH . (subprogram_renaming_d [...]
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IDENTIFIER .  628))
-      ((default . error) (IDENTIFIER .  627))
-      ((default . error) (WHEN .  624))
-      ((default . error) (OF .  622) (COLON .  623) (IN .  621))
-      ((default . error) (EQUAL_GREATER .  620))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  182) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  
152) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  
155) (NULL .  617) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  620))
+      ((default . error) (IDENTIFIER .  619))
+      ((default . error) (WHEN .  616))
+      ((default . error) (OF .  614) (COLON .  615) (IN .  613))
+      ((default . error) (EQUAL_GREATER .  612))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSIF . (expression_opt . 0)) (ELSE . 
(expression_opt . 0)) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) (PLUS 
.  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL 
.  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . ((expression_opt . 0) (association_opt 
. 0))) (COMMA . ((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS .  152) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  
153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  
156) (NULL .  608) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (USE . (aggregate . 2)) (COLON_EQUAL . (aggregate . 
2)) (CHARACTER_LITERAL . (aggregate . 2)) (STRING_LITERAL . (aggregate . 2)) 
(IDENTIFIER . (aggregate . 2)) (LESS_LESS . (aggregate . 2)) (WHILE . 
(aggregate . 2)) (SELECT . (aggregate . 2)) (REQUEUE . (aggregate . 2)) (RAISE 
. (aggregate . 2)) (PRAGMA . (aggregate . 2)) (NULL . (aggregate . 2)) (IF . 
(aggregate . 2)) (GOTO . (aggregate . 2)) (FOR . (aggregate . 2)) (EXIT . 
(aggregate . 2)) (DELAY . (aggregate . [...]
       ((default . error) (USE . (aggregate . 0)) (COLON_EQUAL . (aggregate . 
0)) (CHARACTER_LITERAL . (aggregate . 0)) (STRING_LITERAL . (aggregate . 0)) 
(IDENTIFIER . (aggregate . 0)) (LESS_LESS . (aggregate . 0)) (WHILE . 
(aggregate . 0)) (SELECT . (aggregate . 0)) (REQUEUE . (aggregate . 0)) (RAISE 
. (aggregate . 0)) (PRAGMA . (aggregate . 0)) (NULL . (aggregate . 0)) (IF . 
(aggregate . 0)) (GOTO . (aggregate . 0)) (FOR . (aggregate . 0)) (EXIT . 
(aggregate . 0)) (DELAY . (aggregate . [...]
-      ((default . error) (RIGHT_PAREN .  616))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (EQUAL_GREATER .  614))
-      ((default . error) (COMMA . (pragma_argument_association . 0)) 
(RIGHT_PAREN . (pragma_argument_association . 0)))
-      ((default . error) (RIGHT_PAREN . (pragma_argument_association_list . 
1)) (COMMA . (pragma_argument_association_list . 1)))
-      ((default . error) (WHEN . (pragma . 0)) (THEN . (pragma . 0)) (OR . 
(pragma . 0)) (ELSIF . (pragma . 0)) (ELSE . (pragma . 0)) (CHARACTER_LITERAL . 
(pragma . 0)) (STRING_LITERAL . (pragma . 0)) (WHILE . (pragma . 0)) (SELECT . 
(pragma . 0)) (RETURN . (pragma . 0)) (REQUEUE . (pragma . 0)) (RAISE . (pragma 
. 0)) (NULL . (pragma . 0)) (LOOP . (pragma . 0)) (IF . (pragma . 0)) (GOTO . 
(pragma . 0)) (EXIT . (pragma . 0)) (DELAY . (pragma . 0)) (DECLARE . (pragma . 
0)) (CASE . (pragma  [...]
-      ((default . error) (OF . (factor . 0)) (COLON_EQUAL . (factor . 0)) (DO 
. (factor . 0)) (LOOP . (factor . 0)) (ELSIF . (factor . 0)) (ELSE . (factor . 
0)) (DIGITS . (factor . 0)) (COMMA . (factor . 0)) (RIGHT_PAREN . (factor . 0)) 
(RANGE . (factor . 0)) (THEN . (factor . 0)) (WITH . (factor . 0)) (BAR . 
(factor . 0)) (EQUAL_GREATER . (factor . 0)) (IS . (factor . 0)) (SLASH_EQUAL . 
(factor . 0)) (LESS_EQUAL . (factor . 0)) (LESS . (factor . 0)) (GREATER_EQUAL 
. (factor . 0)) (GREAT [...]
-      ((default . error) (DO . (relation_and_list . 1)) (LOOP . 
(relation_and_list . 1)) (XOR . (relation_and_list . 1)) (OR . 
(relation_and_list . 1)) (ELSIF . (relation_and_list . 1)) (ELSE . 
(relation_and_list . 1)) (EQUAL_GREATER . (relation_and_list . 1)) (DIGITS . 
(relation_and_list . 1)) (RIGHT_PAREN . (relation_and_list . 1)) (COMMA . 
(relation_and_list . 1)) (RANGE . (relation_and_list . 1)) (THEN . 
(relation_and_list . 1)) (SEMICOLON . (relation_and_list . 1)) (WITH . 
(relation [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_or_list . 1)) (LOOP . 
(relation_or_list . 1)) (XOR . (relation_or_list . 1)) (AND . (relation_or_list 
. 1)) (ELSIF . (relation_or_list . 1)) (ELSE . (relation_or_list . 1)) 
(EQUAL_GREATER . (relation_or_list . 1)) (DIGITS . (relation_or_list . 1)) 
(RIGHT_PAREN . (relation_or_list . 1)) (COMMA . (relation_or_list . 1)) (RANGE 
. (relation_or_list . 1)) (THEN . (relation_or_list . 1)) (SEMICOLON . 
(relation_or_list . 1)) (WITH . (relation_or_list . 1 [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_xor_list . 1)) (LOOP . 
(relation_xor_list . 1)) (OR . (relation_xor_list . 1)) (AND . 
(relation_xor_list . 1)) (ELSIF . (relation_xor_list . 1)) (ELSE . 
(relation_xor_list . 1)) (EQUAL_GREATER . (relation_xor_list . 1)) (DIGITS . 
(relation_xor_list . 1)) (RIGHT_PAREN . (relation_xor_list . 1)) (COMMA . 
(relation_xor_list . 1)) (RANGE . (relation_xor_list . 1)) (THEN . 
(relation_xor_list . 1)) (SEMICOLON . (relation_xor_list . 1)) (WITH . 
(relation [...]
-      ((default . error) (DO . (relation_xor_list . 0)) (LOOP . 
(relation_xor_list . 0)) (OR . (relation_xor_list . 0)) (AND . 
(relation_xor_list . 0)) (ELSIF . (relation_xor_list . 0)) (ELSE . 
(relation_xor_list . 0)) (EQUAL_GREATER . (relation_xor_list . 0)) (DIGITS . 
(relation_xor_list . 0)) (RIGHT_PAREN . (relation_xor_list . 0)) (COMMA . 
(relation_xor_list . 0)) (RANGE . (relation_xor_list . 0)) (THEN . 
(relation_xor_list . 0)) (SEMICOLON . (relation_xor_list . 0)) (WITH . 
(relation [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_or_list . 0)) (LOOP . 
(relation_or_list . 0)) (XOR . (relation_or_list . 0)) (AND . (relation_or_list 
. 0)) (ELSIF . (relation_or_list . 0)) (ELSE . (relation_or_list . 0)) 
(EQUAL_GREATER . (relation_or_list . 0)) (DIGITS . (relation_or_list . 0)) 
(RIGHT_PAREN . (relation_or_list . 0)) (COMMA . (relation_or_list . 0)) (RANGE 
. (relation_or_list . 0)) (THEN . (relation_or_list . 0)) (SEMICOLON . 
(relation_or_list . 0)) (WITH . (relation_or_list . 0 [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DO . (relation_and_list . 0)) (LOOP . 
(relation_and_list . 0)) (XOR . (relation_and_list . 0)) (OR . 
(relation_and_list . 0)) (ELSIF . (relation_and_list . 0)) (ELSE . 
(relation_and_list . 0)) (EQUAL_GREATER . (relation_and_list . 0)) (DIGITS . 
(relation_and_list . 0)) (RIGHT_PAREN . (relation_and_list . 0)) (COMMA . 
(relation_and_list . 0)) (RANGE . (relation_and_list . 0)) (THEN . 
(relation_and_list . 0)) (SEMICOLON . (relation_and_list . 0)) (WITH . 
(relation [...]
-      ((default . error) (DO . (relation . 1)) (LOOP . (relation . 1)) (COMMA 
. (relation . 1)) (ELSIF . (relation . 1)) (ELSE . (relation . 1)) 
(EQUAL_GREATER . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (DIGITS . 
(relation . 1)) (RANGE . (relation . 1)) (THEN . (relation . 1)) (SEMICOLON . 
(relation . 1)) (WITH . (relation . 1)) (IS . (relation . 1)) (AND . (relation 
. 1)) (OR . (relation . 1)) (XOR . (relation . 1)))
-      ((default . error) (OF . (term . 1)) (COLON_EQUAL . (term . 1)) (DO . 
(term . 1)) (LOOP . (term . 1)) (ELSIF . (term . 1)) (ELSE . (term . 1)) 
(DIGITS . (term . 1)) (RIGHT_PAREN . (term . 1)) (COMMA . (term . 1)) (RANGE . 
(term . 1)) (THEN . (term . 1)) (WITH . (term . 1)) (BAR . (term . 1)) 
(EQUAL_GREATER . (term . 1)) (IS . (term . 1)) (IN . (term . 1)) (NOT . (term . 
1)) (EQUAL . (term . 1)) (GREATER . (term . 1)) (GREATER_EQUAL . (term . 1)) 
(LESS . (term . 1)) (LESS_EQUAL . (t [...]
-      ((default . error) (OF . (term_list . 1)) (COLON_EQUAL . (term_list . 
1)) (DO . (term_list . 1)) (LOOP . (term_list . 1)) (ELSIF . (term_list . 1)) 
(ELSE . (term_list . 1)) (DIGITS . (term_list . 1)) (COMMA . (term_list . 1)) 
(RIGHT_PAREN . (term_list . 1)) (RANGE . (term_list . 1)) (THEN . (term_list . 
1)) (WITH . (term_list . 1)) (BAR . (term_list . 1)) (EQUAL_GREATER . 
(term_list . 1)) (IS . (term_list . 1)) (SLASH_EQUAL . (term_list . 1)) 
(LESS_EQUAL . (term_list . 1)) (LESS .  [...]
-      ((default . error) (BEGIN .  608) (END .  609))
-      ((default . error) (IDENTIFIER .  607))
-      ((default . error) (RENAMES . (subprogram_specification . 1)) (IS . ( 
606 (subprogram_specification . 1))) (WITH . (subprogram_specification . 1)) 
(SEMICOLON . (subprogram_specification . 1)))
-      ((default . error) (RENAMES . (subprogram_specification . 0)) (IS . ( 
605 (subprogram_specification . 0))) (WITH . (subprogram_specification . 0)) 
(SEMICOLON . (subprogram_specification . 0)))
-      ((default . error) (RENAMES .  128) (SEMICOLON . 
(aspect_specification_opt . 0)) (IS . ( 604 (aspect_specification_opt . 0))) 
(WITH .  109))
-      ((default . error) (EXCEPTION .  602) (CONSTANT . ( 601 (aliased_opt . 
0))) (ARRAY . (aliased_opt . 0)) (ACCESS . (aliased_opt . 0)) (NOT . 
(aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) (STRING_LITERAL . 
(aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) (ALIASED .  531))
-      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (IDENTIFIER . (declarations . 1)) (USE . 
(declarations . 1)) (TYPE . (declarations . 1)) (TASK . (declarations . 1)) 
(SUBTYPE . (declarations . 1)) (PROTECTED . (declarations . 1)) (PROCEDURE . 
(declarations . 1)) (PRAGMA . (declarations . 1)) (PACKAGE . (declarations . 
1)) (OVERRIDING . (declarations . 1)) (NOT . (declarations . 1)) (GENERIC . 
(declarations . 1)) (FUNCTION . (declarations . 1)) (FOR . (declarations . 1)) 
(ENTRY . (declarations . 1)) (BEGIN . (de [...]
-      ((default . error) (EXCEPTION .  596) (IDENTIFIER . (null_exclusion_opt 
. 0)) (STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (IS . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  211))
-      ((default . error) (IDENTIFIER .  594))
-      ((default . error) (IDENTIFIER .  593))
-      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IS .  591))
-      ((default . error) (IDENTIFIER .  590))
-      ((default . error) (IDENTIFIER .  589))
-      ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (USE . ((name . 0) (direct_name . 0))) (LEFT_PAREN . 
(name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
-      ((default . error) (USE . ((name . 7) (direct_name . 1))) (LEFT_PAREN . 
(name . 7)) (DOT . (name . 7)) (TICK . (name . 7)))
-      ((default . error) (USE . ( 586 (name . 4))) (LEFT_PAREN . (name . 4)) 
(DOT . (name . 4)) (TICK . (name . 4)))
-      ((default . error) (USE .  585))
-      ((default . error) (DOT .  90) (TICK .  91) (USE .  584) (LEFT_PAREN .  
107))
+      ((default . error) (RIGHT_PAREN .  607))
       ((default . error) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (LEFT_PAREN .  107))
+      ((default . error) (XOR . (expression_opt . 0)) (OR . (expression_opt . 
0)) (AND . (expression_opt . 0)) (IS . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (THEN . 
(expression_opt . 0)) (RANGE . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (COMMA . (expression_opt . 0)) (DIGITS . (expression_opt 
. 0)) (EQUAL_GREATER . (expression_opt . 0)) (ELSE . (expression_opt . 0)) 
(ELSIF . (expression_opt . 0)) (LOOP . (expression_opt . 0 [...]
       ((default . error) (SEMICOLON . (association_opt . 2)) (IS . 
(association_opt . 2)) (COMMA . (association_opt . 2)) (RIGHT_PAREN . 
(association_opt . 2)))
       ((default . error) (SEMICOLON . (association_opt . 1)) (IS . 
(association_opt . 1)) (COMMA . (association_opt . 1)) (RIGHT_PAREN . 
(association_opt . 1)))
+      ((default . error) (WHEN . (pragma . 0)) (THEN . (pragma . 0)) (OR . 
(pragma . 0)) (ELSIF . (pragma . 0)) (ELSE . (pragma . 0)) (CHARACTER_LITERAL . 
(pragma . 0)) (STRING_LITERAL . (pragma . 0)) (WHILE . (pragma . 0)) (SELECT . 
(pragma . 0)) (RETURN . (pragma . 0)) (REQUEUE . (pragma . 0)) (RAISE . (pragma 
. 0)) (NULL . (pragma . 0)) (LOOP . (pragma . 0)) (IF . (pragma . 0)) (GOTO . 
(pragma . 0)) (EXIT . (pragma . 0)) (DELAY . (pragma . 0)) (DECLARE . (pragma . 
0)) (CASE . (pragma  [...]
       ((default . error) (BAR . (choice_relation_and_list . 1)) (EQUAL_GREATER 
. (choice_relation_and_list . 1)) (AND . (choice_relation_and_list . 1)))
-      ((default . error) (XOR . (choice_relation . 1)) (OR . (choice_relation 
. 1)) (BAR . (choice_relation . 1)) (EQUAL_GREATER . (choice_relation . 1)) 
(AND . (choice_relation . 1)) (EQUAL .  278) (SLASH_EQUAL .  283) (LESS .  281) 
(LESS_EQUAL .  282) (GREATER .  279) (GREATER_EQUAL .  280))
+      ((default . error) (XOR . (choice_relation . 1)) (OR . (choice_relation 
. 1)) (BAR . (choice_relation . 1)) (EQUAL_GREATER . (choice_relation . 1)) 
(AND . (choice_relation . 1)) (EQUAL .  339) (SLASH_EQUAL .  344) (LESS .  342) 
(LESS_EQUAL .  343) (GREATER .  340) (GREATER_EQUAL .  341))
       ((default . error) (BAR . (choice_relation_or_list . 1)) (EQUAL_GREATER 
. (choice_relation_or_list . 1)) (OR . (choice_relation_or_list . 1)))
       ((default . error) (BAR . (choice_relation_xor_list . 1)) (EQUAL_GREATER 
. (choice_relation_xor_list . 1)) (XOR . (choice_relation_xor_list . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_xor_list . 0)) (EQUAL_GREATER 
. (choice_relation_xor_list . 0)) (XOR . (choice_relation_xor_list . 0)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_or_list . 0)) (EQUAL_GREATER 
. (choice_relation_or_list . 0)) (OR . (choice_relation_or_list . 0)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (BAR . (choice_relation_and_list . 0)) (EQUAL_GREATER 
. (choice_relation_and_list . 0)) (AND . (choice_relation_and_list . 0)))
+      ((default . error) (WHEN . (pragma . 1)) (THEN . (pragma . 1)) (OR . 
(pragma . 1)) (ELSIF . (pragma . 1)) (ELSE . (pragma . 1)) (CHARACTER_LITERAL . 
(pragma . 1)) (STRING_LITERAL . (pragma . 1)) (WHILE . (pragma . 1)) (SELECT . 
(pragma . 1)) (RETURN . (pragma . 1)) (REQUEUE . (pragma . 1)) (RAISE . (pragma 
. 1)) (NULL . (pragma . 1)) (LOOP . (pragma . 1)) (IF . (pragma . 1)) (GOTO . 
(pragma . 1)) (EXIT . (pragma . 1)) (DELAY . (pragma . 1)) (DECLARE . (pragma . 
1)) (CASE . (pragma  [...]
       ((default . error) (SEMICOLON . (association_opt . 4)) (IS . 
(association_opt . 4)) (COMMA . (association_opt . 4)) (RIGHT_PAREN . 
(association_opt . 4)))
       ((default . error) (SEMICOLON . (association_opt . 3)) (IS . 
(association_opt . 3)) (COMMA . (association_opt . 3)) (RIGHT_PAREN . 
(association_opt . 3)))
       ((default . error) (EQUAL_GREATER . (discrete_choice_list . 2)) (BAR . 
(discrete_choice_list . 2)))
-      ((default . error) (DOT_DOT .  277) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . (choice_relation . 1)) (OR . 
(choice_relation . 1)) (XOR . (choice_relation . 1)) (EQUAL .  278) 
(SLASH_EQUAL .  283) (LESS .  281) (LESS_EQUAL .  282) (GREATER .  279) 
(GREATER_EQUAL .  280))
-      ((default . error) (LOOP . (range . 1)) (DO . (range . 1)) (OF . (range 
. 1)) (COLON_EQUAL . (range . 1)) (ELSIF . (range . 1)) (ELSE . (range . 1)) 
(DIGITS . (range . 1)) (RANGE . (range . 1)) (THEN . (range . 1)) (SEMICOLON . 
(range . 1)) (WITH . (range . 1)) (IS . (range . 1)) (AND . (range . 1)) (OR . 
(range . 1)) (XOR . (range . 1)) (COMMA . (range . 1)) (RIGHT_PAREN . (range . 
1)) (EQUAL_GREATER . (range . 1)) (BAR . (range . 1)) (LEFT_PAREN .  578))
+      ((default . error) (DOT_DOT .  338) (BAR . (choice_relation . 1)) 
(EQUAL_GREATER . (choice_relation . 1)) (AND . (choice_relation . 1)) (OR . 
(choice_relation . 1)) (XOR . (choice_relation . 1)) (EQUAL .  339) 
(SLASH_EQUAL .  344) (LESS .  342) (LESS_EQUAL .  343) (GREATER .  340) 
(GREATER_EQUAL .  341))
+      ((default . error) (LOOP . (range . 1)) (DO . (range . 1)) (ELSIF . 
(range . 1)) (ELSE . (range . 1)) (DIGITS . (range . 1)) (RANGE . (range . 1)) 
(THEN . (range . 1)) (OF . (range . 1)) (COLON_EQUAL . (range . 1)) (SEMICOLON 
. (range . 1)) (IS . (range . 1)) (WITH . (range . 1)) (AND . (range . 1)) (OR 
. (range . 1)) (XOR . (range . 1)) (COMMA . (range . 1)) (RIGHT_PAREN . (range 
. 1)) (EQUAL_GREATER . (range . 1)) (BAR . (range . 1)) (LEFT_PAREN .  600))
+      ((default . error) (OF . (factor . 0)) (COLON_EQUAL . (factor . 0)) (DO 
. (factor . 0)) (LOOP . (factor . 0)) (ELSIF . (factor . 0)) (ELSE . (factor . 
0)) (DIGITS . (factor . 0)) (COMMA . (factor . 0)) (RIGHT_PAREN . (factor . 0)) 
(RANGE . (factor . 0)) (THEN . (factor . 0)) (WITH . (factor . 0)) (BAR . 
(factor . 0)) (EQUAL_GREATER . (factor . 0)) (IS . (factor . 0)) (SLASH_EQUAL . 
(factor . 0)) (LESS_EQUAL . (factor . 0)) (LESS . (factor . 0)) (GREATER_EQUAL 
. (factor . 0)) (GREAT [...]
+      ((default . error) (DO . (relation_and_list . 1)) (LOOP . 
(relation_and_list . 1)) (XOR . (relation_and_list . 1)) (OR . 
(relation_and_list . 1)) (ELSIF . (relation_and_list . 1)) (ELSE . 
(relation_and_list . 1)) (EQUAL_GREATER . (relation_and_list . 1)) (DIGITS . 
(relation_and_list . 1)) (RIGHT_PAREN . (relation_and_list . 1)) (COMMA . 
(relation_and_list . 1)) (RANGE . (relation_and_list . 1)) (THEN . 
(relation_and_list . 1)) (WITH . (relation_and_list . 1)) (SEMICOLON . 
(relation [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_or_list . 1)) (LOOP . 
(relation_or_list . 1)) (XOR . (relation_or_list . 1)) (AND . (relation_or_list 
. 1)) (ELSIF . (relation_or_list . 1)) (ELSE . (relation_or_list . 1)) 
(EQUAL_GREATER . (relation_or_list . 1)) (DIGITS . (relation_or_list . 1)) 
(RIGHT_PAREN . (relation_or_list . 1)) (COMMA . (relation_or_list . 1)) (RANGE 
. (relation_or_list . 1)) (THEN . (relation_or_list . 1)) (WITH . 
(relation_or_list . 1)) (SEMICOLON . (relation_or_list . 1 [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_xor_list . 1)) (LOOP . 
(relation_xor_list . 1)) (OR . (relation_xor_list . 1)) (AND . 
(relation_xor_list . 1)) (ELSIF . (relation_xor_list . 1)) (ELSE . 
(relation_xor_list . 1)) (EQUAL_GREATER . (relation_xor_list . 1)) (DIGITS . 
(relation_xor_list . 1)) (RIGHT_PAREN . (relation_xor_list . 1)) (COMMA . 
(relation_xor_list . 1)) (RANGE . (relation_xor_list . 1)) (THEN . 
(relation_xor_list . 1)) (WITH . (relation_xor_list . 1)) (SEMICOLON . 
(relation [...]
+      ((default . error) (DO . (relation_xor_list . 0)) (LOOP . 
(relation_xor_list . 0)) (OR . (relation_xor_list . 0)) (AND . 
(relation_xor_list . 0)) (ELSIF . (relation_xor_list . 0)) (ELSE . 
(relation_xor_list . 0)) (EQUAL_GREATER . (relation_xor_list . 0)) (DIGITS . 
(relation_xor_list . 0)) (RIGHT_PAREN . (relation_xor_list . 0)) (COMMA . 
(relation_xor_list . 0)) (RANGE . (relation_xor_list . 0)) (THEN . 
(relation_xor_list . 0)) (WITH . (relation_xor_list . 0)) (SEMICOLON . 
(relation [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_or_list . 0)) (LOOP . 
(relation_or_list . 0)) (XOR . (relation_or_list . 0)) (AND . (relation_or_list 
. 0)) (ELSIF . (relation_or_list . 0)) (ELSE . (relation_or_list . 0)) 
(EQUAL_GREATER . (relation_or_list . 0)) (DIGITS . (relation_or_list . 0)) 
(RIGHT_PAREN . (relation_or_list . 0)) (COMMA . (relation_or_list . 0)) (RANGE 
. (relation_or_list . 0)) (THEN . (relation_or_list . 0)) (WITH . 
(relation_or_list . 0)) (SEMICOLON . (relation_or_list . 0 [...]
+      ((default . error) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (DO . (relation_and_list . 0)) (LOOP . 
(relation_and_list . 0)) (XOR . (relation_and_list . 0)) (OR . 
(relation_and_list . 0)) (ELSIF . (relation_and_list . 0)) (ELSE . 
(relation_and_list . 0)) (EQUAL_GREATER . (relation_and_list . 0)) (DIGITS . 
(relation_and_list . 0)) (RIGHT_PAREN . (relation_and_list . 0)) (COMMA . 
(relation_and_list . 0)) (RANGE . (relation_and_list . 0)) (THEN . 
(relation_and_list . 0)) (WITH . (relation_and_list . 0)) (SEMICOLON . 
(relation [...]
       ((default . error) (SEMICOLON . (relation . 1)) (IS . (relation . 1)) 
(WITH . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (COMMA . (relation . 1)) 
(BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) (AND . 
((choice_relation . 0) (relation . 1))) (OR . ((choice_relation . 0) (relation 
. 1))) (XOR . ((choice_relation . 0) (relation . 1))))
-      ((default . error) (DO . (range . 2)) (LOOP . (range . 2)) (OF . (range 
. 2)) (COLON_EQUAL . (range . 2)) (ELSIF . (range . 2)) (ELSE . (range . 2)) 
(DIGITS . (range . 2)) (RANGE . (range . 2)) (THEN . (range . 2)) (SEMICOLON . 
(range . 2)) (WITH . (range . 2)) (IS . (range . 2)) (AND . (range . 2)) (OR . 
(range . 2)) (XOR . (range . 2)) (COMMA . (range . 2)) (RIGHT_PAREN . (range . 
2)) (EQUAL_GREATER . (range . 2)) (BAR . (range . 2)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BAR .  576) (DO . (relation . 3)) (LOOP . (relation 
. 3)) (COMMA . (relation . 3)) (ELSIF . (relation . 3)) (ELSE . (relation . 3)) 
(EQUAL_GREATER . (relation . 3)) (RIGHT_PAREN . (relation . 3)) (DIGITS . 
(relation . 3)) (RANGE . (relation . 3)) (THEN . (relation . 3)) (SEMICOLON . 
(relation . 3)) (WITH . (relation . 3)) (IS . (relation . 3)) (AND . (relation 
. 3)) (OR . (relation . 3)) (XOR . (relation . 3)))
-      ((default . error) (DO . (membership_choice_list . 0)) (LOOP . 
(membership_choice_list . 0)) (COMMA . (membership_choice_list . 0)) (ELSIF . 
(membership_choice_list . 0)) (ELSE . (membership_choice_list . 0)) 
(EQUAL_GREATER . (membership_choice_list . 0)) (RIGHT_PAREN . 
(membership_choice_list . 0)) (DIGITS . (membership_choice_list . 0)) (RANGE . 
(membership_choice_list . 0)) (THEN . (membership_choice_list . 0)) (SEMICOLON 
. (membership_choice_list . 0)) (WITH . (membership_choic [...]
-      ((default . error) (DO . (membership_choice . 1)) (LOOP . 
(membership_choice . 1)) (COMMA . (membership_choice . 1)) (ELSIF . 
(membership_choice . 1)) (ELSE . (membership_choice . 1)) (EQUAL_GREATER . 
(membership_choice . 1)) (RIGHT_PAREN . (membership_choice . 1)) (DIGITS . 
(membership_choice . 1)) (RANGE . (membership_choice . 1)) (THEN . 
(membership_choice . 1)) (SEMICOLON . (membership_choice . 1)) (WITH . 
(membership_choice . 1)) (IS . (membership_choice . 1)) (AND . (membersh [...]
-      ((default . error) (DOT_DOT .  277) (DO . (membership_choice . 0)) (LOOP 
. (membership_choice . 0)) (COMMA . (membership_choice . 0)) (ELSIF . 
(membership_choice . 0)) (ELSE . (membership_choice . 0)) (EQUAL_GREATER . 
(membership_choice . 0)) (RIGHT_PAREN . (membership_choice . 0)) (DIGITS . 
(membership_choice . 0)) (RANGE . (membership_choice . 0)) (THEN . 
(membership_choice . 0)) (SEMICOLON . (membership_choice . 0)) (WITH . 
(membership_choice . 0)) (IS . (membership_choice . 0)) [...]
+      ((default . error) (DO . (range . 2)) (LOOP . (range . 2)) (ELSIF . 
(range . 2)) (ELSE . (range . 2)) (DIGITS . (range . 2)) (RANGE . (range . 2)) 
(THEN . (range . 2)) (OF . (range . 2)) (COLON_EQUAL . (range . 2)) (SEMICOLON 
. (range . 2)) (IS . (range . 2)) (WITH . (range . 2)) (AND . (range . 2)) (OR 
. (range . 2)) (XOR . (range . 2)) (COMMA . (range . 2)) (RIGHT_PAREN . (range 
. 2)) (EQUAL_GREATER . (range . 2)) (BAR . (range . 2)))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BAR .  594) (DO . (relation . 3)) (LOOP . (relation 
. 3)) (ELSIF . (relation . 3)) (ELSE . (relation . 3)) (EQUAL_GREATER . 
(relation . 3)) (DIGITS . (relation . 3)) (RANGE . (relation . 3)) (THEN . 
(relation . 3)) (SEMICOLON . (relation . 3)) (IS . (relation . 3)) (WITH . 
(relation . 3)) (RIGHT_PAREN . (relation . 3)) (COMMA . (relation . 3)) (AND . 
(relation . 3)) (OR . (relation . 3)) (XOR . (relation . 3)))
+      ((default . error) (DO . (membership_choice_list . 0)) (LOOP . 
(membership_choice_list . 0)) (ELSIF . (membership_choice_list . 0)) (ELSE . 
(membership_choice_list . 0)) (EQUAL_GREATER . (membership_choice_list . 0)) 
(DIGITS . (membership_choice_list . 0)) (RANGE . (membership_choice_list . 0)) 
(THEN . (membership_choice_list . 0)) (SEMICOLON . (membership_choice_list . 
0)) (IS . (membership_choice_list . 0)) (WITH . (membership_choice_list . 0)) 
(RIGHT_PAREN . (membership_choice_l [...]
+      ((default . error) (DO . (membership_choice . 1)) (LOOP . 
(membership_choice . 1)) (ELSIF . (membership_choice . 1)) (ELSE . 
(membership_choice . 1)) (EQUAL_GREATER . (membership_choice . 1)) (DIGITS . 
(membership_choice . 1)) (RANGE . (membership_choice . 1)) (THEN . 
(membership_choice . 1)) (SEMICOLON . (membership_choice . 1)) (IS . 
(membership_choice . 1)) (WITH . (membership_choice . 1)) (RIGHT_PAREN . 
(membership_choice . 1)) (COMMA . (membership_choice . 1)) (AND . (membersh 
[...]
+      ((default . error) (DOT_DOT .  338) (DO . (membership_choice . 0)) (LOOP 
. (membership_choice . 0)) (ELSIF . (membership_choice . 0)) (ELSE . 
(membership_choice . 0)) (EQUAL_GREATER . (membership_choice . 0)) (DIGITS . 
(membership_choice . 0)) (RANGE . (membership_choice . 0)) (THEN . 
(membership_choice . 0)) (SEMICOLON . (membership_choice . 0)) (IS . 
(membership_choice . 0)) (WITH . (membership_choice . 0)) (RIGHT_PAREN . 
(membership_choice . 0)) (COMMA . (membership_choice . 0)) [...]
+      ((default . error) (OF . (term . 1)) (COLON_EQUAL . (term . 1)) (DO . 
(term . 1)) (LOOP . (term . 1)) (ELSIF . (term . 1)) (ELSE . (term . 1)) 
(DIGITS . (term . 1)) (RIGHT_PAREN . (term . 1)) (COMMA . (term . 1)) (RANGE . 
(term . 1)) (THEN . (term . 1)) (WITH . (term . 1)) (BAR . (term . 1)) 
(EQUAL_GREATER . (term . 1)) (IS . (term . 1)) (IN . (term . 1)) (NOT . (term . 
1)) (EQUAL . (term . 1)) (GREATER . (term . 1)) (GREATER_EQUAL . (term . 1)) 
(LESS . (term . 1)) (LESS_EQUAL . (t [...]
+      ((default . error) (OF . (term_list . 1)) (COLON_EQUAL . (term_list . 
1)) (DO . (term_list . 1)) (LOOP . (term_list . 1)) (ELSIF . (term_list . 1)) 
(ELSE . (term_list . 1)) (DIGITS . (term_list . 1)) (COMMA . (term_list . 1)) 
(RIGHT_PAREN . (term_list . 1)) (RANGE . (term_list . 1)) (THEN . (term_list . 
1)) (WITH . (term_list . 1)) (BAR . (term_list . 1)) (EQUAL_GREATER . 
(term_list . 1)) (IS . (term_list . 1)) (SLASH_EQUAL . (term_list . 1)) 
(LESS_EQUAL . (term_list . 1)) (LESS .  [...]
+      ((default . error) (BEGIN .  592) (END .  593))
+      ((default . error) (IDENTIFIER .  591))
+      ((default . error) (RENAMES . (subprogram_specification . 1)) (IS . ( 
590 (subprogram_specification . 1))) (WITH . (subprogram_specification . 1)) 
(SEMICOLON . (subprogram_specification . 1)))
+      ((default . error) (RENAMES . (subprogram_specification . 0)) (IS . ( 
589 (subprogram_specification . 0))) (WITH . (subprogram_specification . 0)) 
(SEMICOLON . (subprogram_specification . 0)))
+      ((default . error) (RENAMES .  128) (SEMICOLON . 
(aspect_specification_opt . 0)) (IS . ( 588 (aspect_specification_opt . 0))) 
(WITH .  109))
+      ((default . error) (EXCEPTION .  586) (CONSTANT . ( 585 (aliased_opt . 
0))) (ARRAY . (aliased_opt . 0)) (ACCESS . (aliased_opt . 0)) (NOT . 
(aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) (STRING_LITERAL . 
(aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) (ALIASED .  523))
+      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (IDENTIFIER . (declarations . 1)) (USE . 
(declarations . 1)) (TYPE . (declarations . 1)) (TASK . (declarations . 1)) 
(SUBTYPE . (declarations . 1)) (PROTECTED . (declarations . 1)) (PROCEDURE . 
(declarations . 1)) (PRAGMA . (declarations . 1)) (PACKAGE . (declarations . 
1)) (OVERRIDING . (declarations . 1)) (NOT . (declarations . 1)) (GENERIC . 
(declarations . 1)) (FUNCTION . (declarations . 1)) (FOR . (declarations . 1)) 
(ENTRY . (declarations . 1)) (BEGIN . (de [...]
+      ((default . error) (EXCEPTION .  580) (IDENTIFIER . (null_exclusion_opt 
. 0)) (STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (ACCESS . (null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (IS . (discriminant_part_opt . 0)) (SEMICOLON . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  205))
+      ((default . error) (IDENTIFIER .  578))
+      ((default . error) (IDENTIFIER .  577))
+      ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (IS .  575))
+      ((default . error) (IDENTIFIER .  574))
+      ((default . error) (IDENTIFIER .  573))
+      ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
+      ((default . error) (USE . ((name . 0) (direct_name . 0))) (LEFT_PAREN . 
(name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
+      ((default . error) (USE . ((name . 7) (direct_name . 1))) (LEFT_PAREN . 
(name . 7)) (DOT . (name . 7)) (TICK . (name . 7)))
+      ((default . error) (USE . ( 570 (name . 4))) (LEFT_PAREN . (name . 4)) 
(DOT . (name . 4)) (TICK . (name . 4)))
+      ((default . error) (USE .  569))
+      ((default . error) (DOT .  90) (TICK .  91) (USE .  568) (LEFT_PAREN .  
107))
       ((default . error) (BEGIN . (package_renaming_declaration . 0)) (ENTRY . 
(package_renaming_declaration . 0)) (FOR . (package_renaming_declaration . 0)) 
(PROTECTED . (package_renaming_declaration . 0)) (SUBTYPE . 
(package_renaming_declaration . 0)) (TASK . (package_renaming_declaration . 0)) 
(TYPE . (package_renaming_declaration . 0)) (IDENTIFIER . 
(package_renaming_declaration . 0)) (END . (package_renaming_declaration . 0)) 
(WITH . (package_renaming_declaration . 0)) (USE . (packa [...]
-      ((default . error) (SEMICOLON . (association_list . 1)) (IS . 
(association_list . 1)) (COMMA . (association_list . 1)) (RIGHT_PAREN . 
(association_list . 1)))
+      ((default . error) (RIGHT_PAREN . (association_list . 1)) (COMMA . 
(association_list . 1)) (SEMICOLON . (association_list . 1)) (IS . 
(association_list . 1)))
       ((default . error) (RIGHT_PAREN . (range_list . 1)) (COMMA . (range_list 
. 1)))
-      ((default . error) (DOT_DOT .  277))
-      ((default . error) (SEMICOLON .  575))
-      ((default . error) (SEMICOLON .  574))
-      ((default . error) (SEMICOLON .  573))
-      ((default . error) (SEMICOLON .  572))
-      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  566) 
(IDENTIFIER .  567) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (DOT_DOT .  338))
+      ((default . error) (SEMICOLON .  567))
+      ((default . error) (SEMICOLON .  566))
+      ((default . error) (SEMICOLON .  565))
+      ((default . error) (SEMICOLON .  564))
+      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  558) 
(IDENTIFIER .  559) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IS . (discriminant_part_opt . 2)) (WITH . 
(discriminant_part_opt . 2)) (SEMICOLON . (discriminant_part_opt . 2)))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_opt . 0)) 
(SEMICOLON . (discriminant_specification_opt . 0)) (IDENTIFIER .  77))
       ((default . error) (IS . (discriminant_part_opt . 1)) (WITH . 
(discriminant_part_opt . 1)) (SEMICOLON . (discriminant_part_opt . 1)))
       ((default . error) (PACKAGE . (formal_type_declaration . 2)) (PROCEDURE 
. (formal_type_declaration . 2)) (FUNCTION . (formal_type_declaration . 2)) 
(PRAGMA . (formal_type_declaration . 2)) (TYPE . (formal_type_declaration . 2)) 
(USE . (formal_type_declaration . 2)) (WITH . (formal_type_declaration . 2)) 
(IDENTIFIER . (formal_type_declaration . 2)))
-      ((default . error) (TAGGED .  564) (NEW . 
(abstract_limited_synchronized_opt . 3)) (SYNCHRONIZED .  563) (LIMITED .  562))
-      ((default . error) (LEFT_PAREN .  561))
-      ((default . error) (BOX .  560))
-      ((default . error) (BOX .  559))
+      ((default . error) (TAGGED .  556) (NEW . 
(abstract_limited_synchronized_opt . 3)) (SYNCHRONIZED .  555) (LIMITED .  554))
+      ((default . error) (LEFT_PAREN .  553))
+      ((default . error) (BOX .  552))
+      ((default . error) (BOX .  551))
       ((default . error) (SEMICOLON . (interface_type_definition . 8)) (WITH . 
(interface_type_definition . 8)))
-      ((default . error) (BOX .  558))
-      ((default . error) (INTERFACE .  557) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NEW . (abstract_limited_synchronized_opt . 
4)))
-      ((default . error) (BOX .  556))
-      ((default . error) (INTERFACE .  555))
-      ((default . error) (BOX .  554))
-      ((default . error) (INTERFACE .  553) (NEW . 
(abstract_limited_synchronized_opt . 5)))
-      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 4)) 
(LIMITED .  551) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (INTERFACE .  550))
-      ((default . error) (NEW .  549))
-      ((default . error) (PRIVATE .  548))
+      ((default . error) (BOX .  550))
+      ((default . error) (INTERFACE .  549) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NEW . (abstract_limited_synchronized_opt . 
4)))
+      ((default . error) (BOX .  548))
+      ((default . error) (INTERFACE .  547))
+      ((default . error) (BOX .  546))
+      ((default . error) (INTERFACE .  545) (NEW . 
(abstract_limited_synchronized_opt . 5)))
+      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 4)) 
(LIMITED .  543) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (INTERFACE .  542))
+      ((default . error) (NEW .  541))
+      ((default . error) (PRIVATE .  540))
       ((default . error) (WITH . (formal_type_definition . 9)) (SEMICOLON . 
(formal_type_definition . 9)))
       ((default . error) (WITH . (formal_type_definition . 8)) (SEMICOLON . 
(formal_type_definition . 8)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (WITH . (formal_type_definition . 1)) (SEMICOLON . 
(formal_type_definition . 1)))
       ((default . error) (WITH . (formal_type_definition . 10)) (SEMICOLON . 
(formal_type_definition . 10)))
-      ((default . error) (ACCESS .  242))
-      ((default . error) (SEMICOLON .  546))
-      ((default . error) (SEMICOLON .  545))
+      ((default . error) (ACCESS .  236))
+      ((default . error) (SEMICOLON .  538))
+      ((default . error) (SEMICOLON .  537))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL .  541) 
(LEFT_PAREN .  107) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  539))
+      ((default . error) (DOT .  90) (TICK .  91) (COLON_EQUAL .  533) 
(LEFT_PAREN .  107) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  531))
       ((default . error) (DO . (parameter_and_result_profile . 0)) 
(RIGHT_PAREN . (parameter_and_result_profile . 0)) (COLON_EQUAL . 
(parameter_and_result_profile . 0)) (RENAMES . (parameter_and_result_profile . 
0)) (WITH . (parameter_and_result_profile . 0)) (SEMICOLON . 
(parameter_and_result_profile . 0)) (IS . (parameter_and_result_profile . 0)))
       ((default . error) (IDENTIFIER . (general_access_modifier_opt . 1)) 
(STRING_LITERAL . (general_access_modifier_opt . 1)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 1)))
       ((default . error) (IDENTIFIER . (general_access_modifier_opt . 2)) 
(STRING_LITERAL . (general_access_modifier_opt . 2)) (CHARACTER_LITERAL . 
(general_access_modifier_opt . 2)))
       ((default . error) (FUNCTION . (protected_opt . 1)) (PROCEDURE . 
(protected_opt . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (FUNCTION .  536) (PROCEDURE .  537))
+      ((default . error) (FUNCTION .  528) (PROCEDURE .  529))
       ((default . error) (IN . (aliased_opt . 1)) (OUT . (aliased_opt . 1)) 
(ARRAY . (aliased_opt . 1)) (CONSTANT . (aliased_opt . 1)) (ACCESS . 
(aliased_opt . 1)) (NOT . (aliased_opt . 1)) (IDENTIFIER . (aliased_opt . 1)) 
(STRING_LITERAL . (aliased_opt . 1)) (CHARACTER_LITERAL . (aliased_opt . 1)))
-      ((default . error) (IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . 
(mode_opt . 0)) (CHARACTER_LITERAL . (mode_opt . 0)) (IN .  217) (OUT .  218) 
(ACCESS . (null_exclusion_opt . 0)) (NOT . ( 232 (mode_opt . 0))))
+      ((default . error) (IDENTIFIER . (mode_opt . 0)) (STRING_LITERAL . 
(mode_opt . 0)) (CHARACTER_LITERAL . (mode_opt . 0)) (IN .  211) (OUT .  212) 
(ACCESS . (null_exclusion_opt . 0)) (NOT . ( 226 (mode_opt . 0))))
       ((default . error) (RIGHT_PAREN . (parameter_specification_list . 1)) 
(SEMICOLON . (parameter_specification_list . 1)))
-      ((default . error) (COLON_EQUAL .  814) (RIGHT_PAREN . 
(parameter_specification . 3)) (SEMICOLON . (parameter_specification . 3)))
-      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (NOT .  232))
-      ((default . error) (RETURN .  89) (LEFT_PAREN .  810))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (IS . (parameter_profile_opt . 0)) (COLON_EQUAL . 
(parameter_profile_opt . 0)) (RIGHT_PAREN . (parameter_profile_opt . 0)) 
(RENAMES . (parameter_profile_opt . 0)) (DO . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  810))
+      ((default . error) (COLON_EQUAL .  805) (RIGHT_PAREN . 
(parameter_specification . 4)) (SEMICOLON . (parameter_specification . 4)))
+      ((default . error) (IDENTIFIER . (null_exclusion_opt . 0)) 
(STRING_LITERAL . (null_exclusion_opt . 0)) (CHARACTER_LITERAL . 
(null_exclusion_opt . 0)) (NOT .  226))
+      ((default . error) (RETURN .  89) (LEFT_PAREN .  801))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (IS . (parameter_profile_opt . 0)) (COLON_EQUAL . 
(parameter_profile_opt . 0)) (RIGHT_PAREN . (parameter_profile_opt . 0)) 
(RENAMES . (parameter_profile_opt . 0)) (DO . (parameter_profile_opt . 0)) 
(LEFT_PAREN .  801))
       ((default . error) (DOT .  90) (TICK .  91) (DO . (access_definition . 
0)) (RENAMES . (access_definition . 0)) (RIGHT_PAREN . (access_definition . 0)) 
(COLON_EQUAL . (access_definition . 0)) (IS . (access_definition . 0)) 
(SEMICOLON . (access_definition . 0)) (WITH . (access_definition . 0)) 
(LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER . (formal_object_declaration . 3)) (WITH 
. (formal_object_declaration . 3)) (USE . (formal_object_declaration . 3)) 
(TYPE . (formal_object_declaration . 3)) (PRAGMA . (formal_object_declaration . 
3)) (FUNCTION . (formal_object_declaration . 3)) (PROCEDURE . 
(formal_object_declaration . 3)) (PACKAGE . (formal_object_declaration . 3)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  807))
-      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(formal_package_actual_part . 1)) (SEMICOLON . (formal_package_actual_part . 
1)) (LEFT_PAREN .  805))
-      ((default . error) (SEMICOLON .  804))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  798))
+      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(formal_package_actual_part . 1)) (SEMICOLON . (formal_package_actual_part . 
1)) (LEFT_PAREN .  796))
+      ((default . error) (SEMICOLON .  795))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 3)) 
(WITH . (formal_subprogram_declaration . 3)) (USE . 
(formal_subprogram_declaration . 3)) (TYPE . (formal_subprogram_declaration . 
3)) (PRAGMA . (formal_subprogram_declaration . 3)) (FUNCTION . 
(formal_subprogram_declaration . 3)) (PROCEDURE . 
(formal_subprogram_declaration . 3)) (PACKAGE . (formal_subprogram_declaration 
. 3)))
       ((default . error) (IDENTIFIER . (formal_subprogram_declaration . 0)) 
(WITH . (formal_subprogram_declaration . 0)) (USE . 
(formal_subprogram_declaration . 0)) (TYPE . (formal_subprogram_declaration . 
0)) (PRAGMA . (formal_subprogram_declaration . 0)) (FUNCTION . 
(formal_subprogram_declaration . 0)) (PROCEDURE . 
(formal_subprogram_declaration . 0)) (PACKAGE . (formal_subprogram_declaration 
. 0)))
-      ((default . error) (SEMICOLON .  803))
+      ((default . error) (SEMICOLON .  794))
       ((default . error) (SEMICOLON . (formal_type_definition . 0)) (WITH . 
(formal_type_definition . 0)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (AND .  801) (WITH . (interface_type_definition . 5)) 
(SEMICOLON . (interface_type_definition . 5)))
+      ((default . error) (AND .  792) (WITH . (interface_type_definition . 5)) 
(SEMICOLON . (interface_type_definition . 5)))
       ((default . error) (RECORD . (abstract_tagged_limited_opt . 3)) (NULL . 
(abstract_tagged_limited_opt . 3)) (PRIVATE . (abstract_tagged_limited_opt . 
3)))
-      ((default . error) (SEMICOLON .  800))
-      ((default . error) (AND .  799) (WITH . (interface_type_definition . 7)) 
(SEMICOLON . (interface_type_definition . 7)))
+      ((default . error) (SEMICOLON .  791))
+      ((default . error) (AND .  790) (WITH . (interface_type_definition . 7)) 
(SEMICOLON . (interface_type_definition . 7)))
       ((default . error) (SEMICOLON . (formal_type_definition . 3)) (WITH . 
(formal_type_definition . 3)))
-      ((default . error) (AND .  798) (WITH . (interface_type_definition . 6)) 
(SEMICOLON . (interface_type_definition . 6)))
+      ((default . error) (AND .  789) (WITH . (interface_type_definition . 6)) 
(SEMICOLON . (interface_type_definition . 6)))
       ((default . error) (SEMICOLON . (formal_type_definition . 4)) (WITH . 
(formal_type_definition . 4)))
-      ((default . error) (AND .  797) (WITH . (interface_type_definition . 4)) 
(SEMICOLON . (interface_type_definition . 4)))
-      ((default . error) (RIGHT_PAREN .  796))
+      ((default . error) (AND .  788) (WITH . (interface_type_definition . 4)) 
(SEMICOLON . (interface_type_definition . 4)))
+      ((default . error) (RIGHT_PAREN .  787))
       ((default . error) (SEMICOLON . (formal_type_definition . 5)) (WITH . 
(formal_type_definition . 5)))
-      ((default . error) (SEMICOLON . (formal_type_definition . 6)) (WITH . 
(formal_type_definition . 6)) (DIGITS .  795))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON . (formal_type_definition . 6)) (WITH . 
(formal_type_definition . 6)) (DIGITS .  786))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (NEW . (abstract_limited_synchronized_opt . 1)))
       ((default . error) (NEW . (abstract_limited_synchronized_opt . 2)))
-      ((default . error) (LIMITED .  789) (RECORD . 
(abstract_tagged_limited_opt . 2)) (NULL . (abstract_tagged_limited_opt . 2)) 
(PRIVATE . (abstract_tagged_limited_opt . 2)))
+      ((default . error) (LIMITED .  780) (RECORD . 
(abstract_tagged_limited_opt . 2)) (NULL . (abstract_tagged_limited_opt . 2)) 
(PRIVATE . (abstract_tagged_limited_opt . 2)))
       ((default . error) (RIGHT_PAREN . (discriminant_specification_list . 1)) 
(SEMICOLON . (discriminant_specification_list . 1)))
-      ((default . error) (NULL .  788))
+      ((default . error) (NULL .  779))
       ((default . error) (SEMICOLON . (null_exclusion_opt_name_type . 0)) 
(RIGHT_PAREN . (null_exclusion_opt_name_type . 0)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 0)) (DOT . (name . 0)) (LEFT_PAREN . (name . 
0)) (TICK . (name . 0)))
-      ((default . error) (SEMICOLON . (discriminant_specification_opt . 4)) 
(RIGHT_PAREN . (discriminant_specification_opt . 4)) (COLON_EQUAL .  787))
+      ((default . error) (SEMICOLON . (discriminant_specification_opt . 4)) 
(RIGHT_PAREN . (discriminant_specification_opt . 4)) (COLON_EQUAL .  778))
       ((default . error) (DOT .  90) (TICK .  91) (LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON . (discriminant_specification_opt . 2)) 
(RIGHT_PAREN . (discriminant_specification_opt . 2)) (COLON_EQUAL .  786))
+      ((default . error) (SEMICOLON . (discriminant_specification_opt . 2)) 
(RIGHT_PAREN . (discriminant_specification_opt . 2)) (COLON_EQUAL .  777))
       ((default . error) (SEMICOLON . (null_exclusion_opt_name_type . 1)) 
(RIGHT_PAREN . (null_exclusion_opt_name_type . 1)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 1)) (DOT . (name . 3)) (LEFT_PAREN . (name . 
3)) (TICK . (name . 3)))
       ((default . error) ($EOI . (generic_renaming_declaration . 1)) (LIMITED 
. (generic_renaming_declaration . 1)) (SEPARATE . (generic_renaming_declaration 
. 1)) (WITH . (generic_renaming_declaration . 1)) (END . 
(generic_renaming_declaration . 1)) (PRIVATE . (generic_renaming_declaration . 
1)) (IDENTIFIER . (generic_renaming_declaration . 1)) (USE . 
(generic_renaming_declaration . 1)) (TYPE . (generic_renaming_declaration . 1)) 
(TASK . (generic_renaming_declaration . 1)) (SUBTYPE . (g [...]
       ((default . error) ($EOI . (generic_renaming_declaration . 0)) (LIMITED 
. (generic_renaming_declaration . 0)) (SEPARATE . (generic_renaming_declaration 
. 0)) (WITH . (generic_renaming_declaration . 0)) (END . 
(generic_renaming_declaration . 0)) (PRIVATE . (generic_renaming_declaration . 
0)) (IDENTIFIER . (generic_renaming_declaration . 0)) (USE . 
(generic_renaming_declaration . 0)) (TYPE . (generic_renaming_declaration . 0)) 
(TASK . (generic_renaming_declaration . 0)) (SUBTYPE . (g [...]
       ((default . error) ($EOI . (generic_renaming_declaration . 2)) (LIMITED 
. (generic_renaming_declaration . 2)) (SEPARATE . (generic_renaming_declaration 
. 2)) (WITH . (generic_renaming_declaration . 2)) (END . 
(generic_renaming_declaration . 2)) (PRIVATE . (generic_renaming_declaration . 
2)) (IDENTIFIER . (generic_renaming_declaration . 2)) (USE . 
(generic_renaming_declaration . 2)) (TYPE . (generic_renaming_declaration . 2)) 
(TASK . (generic_renaming_declaration . 2)) (SUBTYPE . (g [...]
       ((default . error) (END . (generic_instantiation . 0)) (BEGIN . 
(generic_instantiation . 0)) (ENTRY . (generic_instantiation . 0)) (FOR . 
(generic_instantiation . 0)) (PROTECTED . (generic_instantiation . 0)) (SUBTYPE 
. (generic_instantiation . 0)) (TASK . (generic_instantiation . 0)) (TYPE . 
(generic_instantiation . 0)) (IDENTIFIER . (generic_instantiation . 0)) ($EOI . 
(generic_instantiation . 0)) (FUNCTION . (generic_instantiation . 0)) (GENERIC 
. (generic_instantiation . 0)) (L [...]
-      ((default . error) (PLUS .  154) (MINUS .  153) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
-      ((default . error) (BAR .  576) (LOOP . (relation . 2)) (DO . (relation 
. 2)) (XOR . (relation . 2)) (OR . (relation . 2)) (AND . (relation . 2)) (IS . 
(relation . 2)) (WITH . (relation . 2)) (SEMICOLON . (relation . 2)) (THEN . 
(relation . 2)) (RANGE . (relation . 2)) (DIGITS . (relation . 2)) (RIGHT_PAREN 
. (relation . 2)) (EQUAL_GREATER . (relation . 2)) (ELSE . (relation . 2)) 
(ELSIF . (relation . 2)) (COMMA . (relation . 2)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (LEFT_PAREN .  148) (RECORD .  774))
+      ((default . error) (AT .  773))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (DOT .  90) (TICK .  91) (IS . ( 771 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
+      ((default . error) (IS .  770))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  205))
+      ((default . error) (IS . ( 768 (aspect_specification_opt . 0))) (WITH .  
109))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  766) (IS .  765))
+      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (SEMICOLON . (discriminant_part_opt . 0)) 
(LEFT_PAREN .  205))
+      ((default . error) (IS . ( 763 (aspect_specification_opt . 0))) (WITH .  
109))
+      ((default . error) (SEMICOLON .  762) (IS .  761))
+      ((default . error) (RENAMES .  760))
+      ((default . error) (RENAMES .  759))
+      ((default . error) (ACCESS .  236) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (END .  757))
+      ((default . error) (SEMICOLON . (package_specification . 1)))
+      ((default . error) (COLON_EQUAL .  756))
+      ((default . error) (SEMICOLON .  755))
+      ((default . error) (NOT . (constant_opt . 0)) (IDENTIFIER . 
(constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) (CHARACTER_LITERAL . 
(constant_opt . 0)) (ACCESS . (constant_opt . 0)) (ARRAY . (constant_opt . 0)) 
(CONSTANT .  753))
+      ((default . error) (SEPARATE .  752) (ABSTRACT .  751))
+      ((default . error) (NULL .  750))
+      ((default . error) (LEFT_PAREN .  748))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  746))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (PLUS .  155) (MINUS .  154) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (BAR .  594) (LOOP . (relation . 2)) (DO . (relation 
. 2)) (THEN . (relation . 2)) (RANGE . (relation . 2)) (DIGITS . (relation . 
2)) (EQUAL_GREATER . (relation . 2)) (ELSE . (relation . 2)) (ELSIF . (relation 
. 2)) (XOR . (relation . 2)) (OR . (relation . 2)) (AND . (relation . 2)) 
(COMMA . (relation . 2)) (RIGHT_PAREN . (relation . 2)) (WITH . (relation . 2)) 
(IS . (relation . 2)) (SEMICOLON . (relation . 2)))
+      ((default . error) (OR . (relation_and_then_list . 0)) (XOR . 
(relation_and_then_list . 0)) (LOOP . (relation_and_then_list . 0)) (DO . 
(relation_and_then_list . 0)) (AND . (relation_and_then_list . 0)) (IS . 
(relation_and_then_list . 0)) (SEMICOLON . (relation_and_then_list . 0)) (WITH 
. (relation_and_then_list . 0)) (THEN . (relation_and_then_list . 0)) (RANGE . 
(relation_and_then_list . 0)) (COMMA . (relation_and_then_list . 0)) 
(RIGHT_PAREN . (relation_and_then_list . 0)) (DIGI [...]
+      ((default . error) (AND . (relation_or_else_list . 0)) (XOR . 
(relation_or_else_list . 0)) (LOOP . (relation_or_else_list . 0)) (DO . 
(relation_or_else_list . 0)) (OR . (relation_or_else_list . 0)) (IS . 
(relation_or_else_list . 0)) (SEMICOLON . (relation_or_else_list . 0)) (WITH . 
(relation_or_else_list . 0)) (THEN . (relation_or_else_list . 0)) (RANGE . 
(relation_or_else_list . 0)) (COMMA . (relation_or_else_list . 0)) (RIGHT_PAREN 
. (relation_or_else_list . 0)) (DIGITS . (relati [...]
+      ((default . error) (AND . (relation_or_else_list . 1)) (XOR . 
(relation_or_else_list . 1)) (LOOP . (relation_or_else_list . 1)) (DO . 
(relation_or_else_list . 1)) (OR . (relation_or_else_list . 1)) (IS . 
(relation_or_else_list . 1)) (SEMICOLON . (relation_or_else_list . 1)) (WITH . 
(relation_or_else_list . 1)) (THEN . (relation_or_else_list . 1)) (RANGE . 
(relation_or_else_list . 1)) (COMMA . (relation_or_else_list . 1)) (RIGHT_PAREN 
. (relation_or_else_list . 1)) (DIGITS . (relati [...]
+      ((default . error) (OR . (relation_and_then_list . 1)) (XOR . 
(relation_and_then_list . 1)) (LOOP . (relation_and_then_list . 1)) (DO . 
(relation_and_then_list . 1)) (AND . (relation_and_then_list . 1)) (IS . 
(relation_and_then_list . 1)) (SEMICOLON . (relation_and_then_list . 1)) (WITH 
. (relation_and_then_list . 1)) (THEN . (relation_and_then_list . 1)) (RANGE . 
(relation_and_then_list . 1)) (COMMA . (relation_and_then_list . 1)) 
(RIGHT_PAREN . (relation_and_then_list . 1)) (DIGI [...]
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (AND . (choice_relation_and_then_list . 0)) 
(EQUAL_GREATER . (choice_relation_and_then_list . 0)) (BAR . 
(choice_relation_and_then_list . 0)))
       ((default . error) (OR . (choice_relation_or_else_list . 0)) 
(EQUAL_GREATER . (choice_relation_or_else_list . 0)) (BAR . 
(choice_relation_or_else_list . 0)))
       ((default . error) (OR . (choice_relation_or_else_list . 1)) 
(EQUAL_GREATER . (choice_relation_or_else_list . 1)) (BAR . 
(choice_relation_or_else_list . 1)))
       ((default . error) (AND . (choice_relation_and_then_list . 1)) 
(EQUAL_GREATER . (choice_relation_and_then_list . 1)) (BAR . 
(choice_relation_and_then_list . 1)))
-      ((default . error) (LEFT_PAREN .  148) (RECORD .  780))
-      ((default . error) (AT .  779))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (DOT .  90) (TICK .  91) (IS . ( 777 
(aspect_specification_opt . 0))) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (IS .  776))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (LEFT_PAREN .  211))
-      ((default . error) (IS . ( 774 (aspect_specification_opt . 0))) (WITH .  
109))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  772) (IS .  771))
-      ((default . error) (WITH . (discriminant_part_opt . 0)) (IS . 
(discriminant_part_opt . 0)) (SEMICOLON . (discriminant_part_opt . 0)) 
(LEFT_PAREN .  211))
-      ((default . error) (IS . ( 769 (aspect_specification_opt . 0))) (WITH .  
109))
-      ((default . error) (SEMICOLON .  768) (IS .  767))
-      ((default . error) (RENAMES .  766))
-      ((default . error) (RENAMES .  765))
-      ((default . error) (ACCESS .  242) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (END .  763))
-      ((default . error) (SEMICOLON . (package_specification . 1)))
-      ((default . error) (COLON_EQUAL .  762))
-      ((default . error) (SEMICOLON .  761))
-      ((default . error) (NOT . (constant_opt . 0)) (IDENTIFIER . 
(constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) (CHARACTER_LITERAL . 
(constant_opt . 0)) (ACCESS . (constant_opt . 0)) (ARRAY . (constant_opt . 0)) 
(CONSTANT .  759))
-      ((default . error) (SEPARATE .  758) (ABSTRACT .  757))
-      ((default . error) (NULL .  756))
-      ((default . error) (LEFT_PAREN .  754))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  752))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (OR . (relation_and_then_list . 0)) (XOR . 
(relation_and_then_list . 0)) (LOOP . (relation_and_then_list . 0)) (DO . 
(relation_and_then_list . 0)) (AND . (relation_and_then_list . 0)) (IS . 
(relation_and_then_list . 0)) (WITH . (relation_and_then_list . 0)) (SEMICOLON 
. (relation_and_then_list . 0)) (THEN . (relation_and_then_list . 0)) (RANGE . 
(relation_and_then_list . 0)) (COMMA . (relation_and_then_list . 0)) 
(RIGHT_PAREN . (relation_and_then_list . 0)) (DIGI [...]
-      ((default . error) (AND . (relation_or_else_list . 0)) (XOR . 
(relation_or_else_list . 0)) (LOOP . (relation_or_else_list . 0)) (DO . 
(relation_or_else_list . 0)) (OR . (relation_or_else_list . 0)) (IS . 
(relation_or_else_list . 0)) (WITH . (relation_or_else_list . 0)) (SEMICOLON . 
(relation_or_else_list . 0)) (THEN . (relation_or_else_list . 0)) (RANGE . 
(relation_or_else_list . 0)) (COMMA . (relation_or_else_list . 0)) (RIGHT_PAREN 
. (relation_or_else_list . 0)) (DIGITS . (relati [...]
-      ((default . error) (AND . (relation_or_else_list . 1)) (XOR . 
(relation_or_else_list . 1)) (LOOP . (relation_or_else_list . 1)) (DO . 
(relation_or_else_list . 1)) (OR . (relation_or_else_list . 1)) (IS . 
(relation_or_else_list . 1)) (WITH . (relation_or_else_list . 1)) (SEMICOLON . 
(relation_or_else_list . 1)) (THEN . (relation_or_else_list . 1)) (RANGE . 
(relation_or_else_list . 1)) (COMMA . (relation_or_else_list . 1)) (RIGHT_PAREN 
. (relation_or_else_list . 1)) (DIGITS . (relati [...]
-      ((default . error) (OR . (relation_and_then_list . 1)) (XOR . 
(relation_and_then_list . 1)) (LOOP . (relation_and_then_list . 1)) (DO . 
(relation_and_then_list . 1)) (AND . (relation_and_then_list . 1)) (IS . 
(relation_and_then_list . 1)) (WITH . (relation_and_then_list . 1)) (SEMICOLON 
. (relation_and_then_list . 1)) (THEN . (relation_and_then_list . 1)) (RANGE . 
(relation_and_then_list . 1)) (COMMA . (relation_and_then_list . 1)) 
(RIGHT_PAREN . (relation_and_then_list . 1)) (DIGI [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (LOOP . (raise_expression . 1)) (DO . 
(raise_expression . 1)) (XOR . (raise_expression . 1)) (OR . (raise_expression 
. 1)) (AND . (raise_expression . 1)) (IS . (raise_expression . 1)) (SEMICOLON . 
(raise_expression . 1)) (WITH . (raise_expression . 1)) (THEN . 
(raise_expression . 1)) (RANGE . (raise_expression . 1)) (RIGHT_PAREN . 
(raise_expression . 1)) (COMMA . (raise_expression . 1)) (DIGITS . 
(raise_expression . 1)) (EQUAL_GREATER . (raise_expression . 1)) (E [...]
+      ((default . error) (LOOP . (raise_expression . 1)) (DO . 
(raise_expression . 1)) (XOR . (raise_expression . 1)) (OR . (raise_expression 
. 1)) (AND . (raise_expression . 1)) (IS . (raise_expression . 1)) (WITH . 
(raise_expression . 1)) (SEMICOLON . (raise_expression . 1)) (THEN . 
(raise_expression . 1)) (RANGE . (raise_expression . 1)) (RIGHT_PAREN . 
(raise_expression . 1)) (COMMA . (raise_expression . 1)) (DIGITS . 
(raise_expression . 1)) (EQUAL_GREATER . (raise_expression . 1)) (E [...]
       ((default . error) (LOOP . (aggregate . 4)) (DO . (aggregate . 4)) (OF . 
(aggregate . 4)) (ACCEPT . (aggregate . 4)) (ABORT . (aggregate . 4)) (BEGIN . 
(aggregate . 4)) (CASE . (aggregate . 4)) (DECLARE . (aggregate . 4)) (DELAY . 
(aggregate . 4)) (EXIT . (aggregate . 4)) (FOR . (aggregate . 4)) (GOTO . 
(aggregate . 4)) (IF . (aggregate . 4)) (NULL . (aggregate . 4)) (PRAGMA . 
(aggregate . 4)) (RAISE . (aggregate . 4)) (REQUEUE . (aggregate . 4)) (SELECT 
. (aggregate . 4)) (WHILE . [...]
-      ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (IN . (primary . 1)) (NOT 
. (primary . 1)) (EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) (LESS_EQUAL . (primary . 
1)) (SLASH_EQUAL . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . (primary . 
1)) (STAR . (primary . 1)) (STAR_STAR . ( [...]
-      ((default . error) (COMMA .  273) (RIGHT_PAREN .  747))
-      ((default . error) (ELSE .  743) (RIGHT_PAREN . (if_expression . 3)) 
(COMMA . (if_expression . 3)) (ELSIF .  744))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (REVERSE .  737) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  736) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (REVERSE .  734) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (IN . (primary . 1)) (NOT 
. (primary . 1)) (EQUAL . (primary . 1)) (GREATER . (primary . 1)) 
(GREATER_EQUAL . (primary . 1)) (LESS . (primary . 1)) (LESS_EQUAL . (primary . 
1)) (SLASH_EQUAL . (primary . 1)) (RIGHT_PAREN . (primary . 1)) (COMMA . 
(primary . 1)) (MOD . (primary . 1)) (REM . (primary . 1)) (SLASH . (primary . 
1)) (STAR . (primary . 1)) (STAR_STAR . ( [...]
+      ((default . error) (COMMA .  267) (RIGHT_PAREN .  739))
+      ((default . error) (ELSE .  735) (RIGHT_PAREN . (if_expression . 3)) 
(ELSIF .  736))
+      ((default . error) (DO . (relation . 1)) (LOOP . (relation . 1)) (COMMA 
. (relation . 1)) (ELSIF . (relation . 1)) (ELSE . (relation . 1)) 
(EQUAL_GREATER . (relation . 1)) (RIGHT_PAREN . (relation . 1)) (DIGITS . 
(relation . 1)) (RANGE . (relation . 1)) (THEN . (relation . 1)) (WITH . 
(relation . 1)) (SEMICOLON . (relation . 1)) (IS . (relation . 1)) (AND . 
(relation . 1)) (OR . (relation . 1)) (XOR . (relation . 1)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (REVERSE .  729) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  728) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (REVERSE .  726) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (case_expression_alternative_list . 
0)) (COMMA . (case_expression_alternative_list . 0)))
-      ((default . error) (RIGHT_PAREN . (case_expression . 0)) (COMMA . ( 729 
(case_expression . 0))))
+      ((default . error) (COMMA .  721) (RIGHT_PAREN . (case_expression . 0)))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (IS .  134))
-      ((default . error) (IDENTIFIER .  726))
+      ((default . error) (IDENTIFIER .  718))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (IS . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (UNTIL .  720) (RAISE .  152) (PLUS .  154) (MINUS .  
153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  
149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
-      ((default . error) (WHEN . (identifier_opt . 0)) (SEMICOLON . 
(identifier_opt . 0)) (IDENTIFIER .  718))
-      ((default . error) (LOOP . (iterator_specification_opt . 0)) (IDENTIFIER 
.  408))
-      ((default . error) (IDENTIFIER .  715))
-      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (SEMICOLON .  712))
-      ((default . error) (SEMICOLON .  710) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (UNTIL .  712) (SEMICOLON . (expression_opt . 0)) 
(RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (WHEN . (identifier_opt . 0)) (SEMICOLON . 
(identifier_opt . 0)) (IDENTIFIER .  710))
+      ((default . error) (LOOP . (iterator_specification_opt . 0)) (IDENTIFIER 
.  402))
+      ((default . error) (IDENTIFIER .  707))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (SEMICOLON .  704))
+      ((default . error) (SEMICOLON .  702) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  704) (DO . 
(extended_return_object_declaration_opt . 0)) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) 
(NEW .  149) (IDENTIFIER .  705) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (LEFT_PAREN .  148))
-      ((default . error) (ELSE . (select_alternative_list_opt . 0)) (END . 
(select_alternative_list_opt . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (DELAY .  635) (WHEN .  693) (TERMINATE .  692) (ACCEPT 
.  630))
-      ((default . error) (LOOP . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER .  690))
-      ((default . error) (COLON .  689))
+      ((default . error) (DO . (extended_return_object_declaration_opt . 0)) 
(SEMICOLON . ( 696 (expression_opt . 0))) (RAISE .  153) (PLUS .  155) (MINUS . 
 154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  
149) (IDENTIFIER .  697) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) 
(LEFT_PAREN .  148))
+      ((default . error) (ELSE . (select_alternative_list_opt . 0)) (END . 
(select_alternative_list_opt . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (DELAY .  627) (WHEN .  685) (TERMINATE .  684) (ACCEPT 
.  622))
+      ((default . error) (LOOP . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  682))
+      ((default . error) (COLON .  681))
       ((default . error) (OR . (compound_statement . 5)) (THEN . 
(compound_statement . 5)) (WHEN . (compound_statement . 5)) (EXCEPTION . 
(compound_statement . 5)) (END . (compound_statement . 5)) (LESS_LESS . 
(compound_statement . 5)) (ACCEPT . (compound_statement . 5)) (ABORT . 
(compound_statement . 5)) (BEGIN . (compound_statement . 5)) (CASE . 
(compound_statement . 5)) (DECLARE . (compound_statement . 5)) (DELAY . 
(compound_statement . 5)) (EXIT . (compound_statement . 5)) (FOR . (co [...]
       ((default . error) (OR . (simple_statement . 1)) (THEN . 
(simple_statement . 1)) (WHEN . (simple_statement . 1)) (EXCEPTION . 
(simple_statement . 1)) (END . (simple_statement . 1)) (LESS_LESS . 
(simple_statement . 1)) (ACCEPT . (simple_statement . 1)) (ABORT . 
(simple_statement . 1)) (BEGIN . (simple_statement . 1)) (CASE . 
(simple_statement . 1)) (DECLARE . (simple_statement . 1)) (DELAY . 
(simple_statement . 1)) (EXIT . (simple_statement . 1)) (FOR . 
(simple_statement . 1)) (GOTO [...]
       ((default . error) (OR . (select_statement . 3)) (THEN . 
(select_statement . 3)) (WHEN . (select_statement . 3)) (EXCEPTION . 
(select_statement . 3)) (END . (select_statement . 3)) (LESS_LESS . 
(select_statement . 3)) (ACCEPT . (select_statement . 3)) (ABORT . 
(select_statement . 3)) (BEGIN . (select_statement . 3)) (CASE . 
(select_statement . 3)) (DECLARE . (select_statement . 3)) (DELAY . 
(select_statement . 3)) (EXIT . (select_statement . 3)) (FOR . 
(select_statement . 3)) (GOTO [...]
@@ -2476,220 +2468,218 @@
       ((default . error) (OR . (simple_statement . 2)) (THEN . 
(simple_statement . 2)) (WHEN . (simple_statement . 2)) (EXCEPTION . 
(simple_statement . 2)) (END . (simple_statement . 2)) (LESS_LESS . 
(simple_statement . 2)) (ACCEPT . (simple_statement . 2)) (ABORT . 
(simple_statement . 2)) (BEGIN . (simple_statement . 2)) (CASE . 
(simple_statement . 2)) (DECLARE . (simple_statement . 2)) (DELAY . 
(simple_statement . 2)) (EXIT . (simple_statement . 2)) (FOR . 
(simple_statement . 2)) (GOTO [...]
       ((default . error) (OR . (compound_statement . 4)) (THEN . 
(compound_statement . 4)) (WHEN . (compound_statement . 4)) (EXCEPTION . 
(compound_statement . 4)) (END . (compound_statement . 4)) (LESS_LESS . 
(compound_statement . 4)) (ACCEPT . (compound_statement . 4)) (ABORT . 
(compound_statement . 4)) (BEGIN . (compound_statement . 4)) (CASE . 
(compound_statement . 4)) (DECLARE . (compound_statement . 4)) (DELAY . 
(compound_statement . 4)) (EXIT . (compound_statement . 4)) (FOR . (co [...]
       ((default . error) (ACCEPT . (label_opt . 1)) (BEGIN . (label_opt . 1)) 
(CASE . (label_opt . 1)) (DECLARE . (label_opt . 1)) (FOR . (label_opt . 1)) 
(IF . (label_opt . 1)) (LOOP . (label_opt . 1)) (RETURN . (label_opt . 1)) 
(SELECT . (label_opt . 1)) (WHILE . (label_opt . 1)) (ABORT . (label_opt . 1)) 
(DELAY . (label_opt . 1)) (EXIT . (label_opt . 1)) (GOTO . (label_opt . 1)) 
(NULL . (label_opt . 1)) (PRAGMA . (label_opt . 1)) (RAISE . (label_opt . 1)) 
(REQUEUE . (label_opt . 1)) ( [...]
-      ((default . error) (END .  688))
+      ((default . error) (END .  680))
       ((default . error) (OR . (compound_statement . 0)) (THEN . 
(compound_statement . 0)) (WHEN . (compound_statement . 0)) (EXCEPTION . 
(compound_statement . 0)) (END . (compound_statement . 0)) (LESS_LESS . 
(compound_statement . 0)) (ACCEPT . (compound_statement . 0)) (ABORT . 
(compound_statement . 0)) (BEGIN . (compound_statement . 0)) (CASE . 
(compound_statement . 0)) (DECLARE . (compound_statement . 0)) (DELAY . 
(compound_statement . 0)) (EXIT . (compound_statement . 0)) (FOR . (co [...]
-      ((default . error) (LOOP .  687))
-      ((default . error) (NULL .  641) (GOTO .  638) (ABORT .  631) (ACCEPT .  
630) (DECLARE .  634) (BEGIN .  632) (LOOP .  640) (CASE .  633) (IF .  639) 
(PRAGMA .  7) (RAISE .  642) (DELAY .  635) (REQUEUE .  643) (RETURN .  644) 
(EXIT .  636) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (WHILE .  646) (FOR .  637) (SELECT .  645))
+      ((default . error) (LOOP .  679))
+      ((default . error) (NULL .  633) (GOTO .  630) (ABORT .  623) (ACCEPT .  
622) (DECLARE .  626) (BEGIN .  624) (LOOP .  632) (CASE .  625) (IF .  631) 
(PRAGMA .  7) (RAISE .  634) (DELAY .  627) (REQUEUE .  635) (RETURN .  636) 
(EXIT .  628) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  
49) (WHILE .  638) (FOR .  629) (SELECT .  637))
       ((default . error) (OR . (compound_statement . 2)) (THEN . 
(compound_statement . 2)) (WHEN . (compound_statement . 2)) (EXCEPTION . 
(compound_statement . 2)) (END . (compound_statement . 2)) (LESS_LESS . 
(compound_statement . 2)) (ACCEPT . (compound_statement . 2)) (ABORT . 
(compound_statement . 2)) (BEGIN . (compound_statement . 2)) (CASE . 
(compound_statement . 2)) (DECLARE . (compound_statement . 2)) (DELAY . 
(compound_statement . 2)) (EXIT . (compound_statement . 2)) (FOR . (co [...]
-      ((default . error) (DOT .  90) (SEMICOLON .  684) (TICK .  91) 
(COLON_EQUAL .  683) (LEFT_PAREN .  107))
+      ((default . error) (DOT .  90) (SEMICOLON .  676) (TICK .  91) 
(COLON_EQUAL .  675) (LEFT_PAREN .  107))
       ((default . error) (OR . (simple_statement . 10)) (THEN . 
(simple_statement . 10)) (WHEN . (simple_statement . 10)) (EXCEPTION . 
(simple_statement . 10)) (END . (simple_statement . 10)) (LESS_LESS . 
(simple_statement . 10)) (ACCEPT . (simple_statement . 10)) (ABORT . 
(simple_statement . 10)) (BEGIN . (simple_statement . 10)) (CASE . 
(simple_statement . 10)) (DECLARE . (simple_statement . 10)) (DELAY . 
(simple_statement . 10)) (EXIT . (simple_statement . 10)) (FOR . 
(simple_statemen [...]
       ((default . error) (OR . (simple_statement . 4)) (THEN . 
(simple_statement . 4)) (WHEN . (simple_statement . 4)) (EXCEPTION . 
(simple_statement . 4)) (END . (simple_statement . 4)) (LESS_LESS . 
(simple_statement . 4)) (ACCEPT . (simple_statement . 4)) (ABORT . 
(simple_statement . 4)) (BEGIN . (simple_statement . 4)) (CASE . 
(simple_statement . 4)) (DECLARE . (simple_statement . 4)) (DELAY . 
(simple_statement . 4)) (EXIT . (simple_statement . 4)) (FOR . 
(simple_statement . 4)) (GOTO [...]
       ((default . error) (OR . (simple_statement . 9)) (THEN . 
(simple_statement . 9)) (WHEN . (simple_statement . 9)) (EXCEPTION . 
(simple_statement . 9)) (END . (simple_statement . 9)) (LESS_LESS . 
(simple_statement . 9)) (ACCEPT . (simple_statement . 9)) (ABORT . 
(simple_statement . 9)) (BEGIN . (simple_statement . 9)) (CASE . 
(simple_statement . 9)) (DECLARE . (simple_statement . 9)) (DELAY . 
(simple_statement . 9)) (EXIT . (simple_statement . 9)) (FOR . 
(simple_statement . 9)) (GOTO [...]
       ((default . error) (OR . (simple_statement . 6)) (THEN . 
(simple_statement . 6)) (WHEN . (simple_statement . 6)) (EXCEPTION . 
(simple_statement . 6)) (END . (simple_statement . 6)) (LESS_LESS . 
(simple_statement . 6)) (ACCEPT . (simple_statement . 6)) (ABORT . 
(simple_statement . 6)) (BEGIN . (simple_statement . 6)) (CASE . 
(simple_statement . 6)) (DECLARE . (simple_statement . 6)) (DELAY . 
(simple_statement . 6)) (EXIT . (simple_statement . 6)) (FOR . 
(simple_statement . 6)) (GOTO [...]
       ((default . error) (OR . (select_statement . 0)) (THEN . 
(select_statement . 0)) (WHEN . (select_statement . 0)) (EXCEPTION . 
(select_statement . 0)) (END . (select_statement . 0)) (LESS_LESS . 
(select_statement . 0)) (ACCEPT . (select_statement . 0)) (ABORT . 
(select_statement . 0)) (BEGIN . (select_statement . 0)) (CASE . 
(select_statement . 0)) (DECLARE . (select_statement . 0)) (DELAY . 
(select_statement . 0)) (EXIT . (select_statement . 0)) (FOR . 
(select_statement . 0)) (GOTO [...]
       ((default . error) (OR . (compound_statement . 6)) (THEN . 
(compound_statement . 6)) (WHEN . (compound_statement . 6)) (EXCEPTION . 
(compound_statement . 6)) (END . (compound_statement . 6)) (LESS_LESS . 
(compound_statement . 6)) (ACCEPT . (compound_statement . 6)) (ABORT . 
(compound_statement . 6)) (BEGIN . (compound_statement . 6)) (CASE . 
(compound_statement . 6)) (DECLARE . (compound_statement . 6)) (DELAY . 
(compound_statement . 6)) (EXIT . (compound_statement . 6)) (FOR . (co [...]
-      ((default . error) (WHEN . (sequence_of_statements_opt . 1)) (THEN . 
(sequence_of_statements_opt . 1)) (OR . (sequence_of_statements_opt . 1)) 
(ELSIF . (sequence_of_statements_opt . 1)) (ELSE . (sequence_of_statements_opt 
. 1)) (END . (sequence_of_statements_opt . 1)) (EXCEPTION . 
(sequence_of_statements_opt . 1)) (LESS_LESS .  647) (ACCEPT . (label_opt . 0)) 
(BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) 
(FOR . (label_opt . 0)) (IF . (label_opt . 0) [...]
-      ((default . error) (END . (handled_sequence_of_statements . 1)) 
(EXCEPTION .  680))
+      ((default . error) (WHEN . (sequence_of_statements_opt . 1)) (THEN . 
(sequence_of_statements_opt . 1)) (OR . (sequence_of_statements_opt . 1)) 
(ELSIF . (sequence_of_statements_opt . 1)) (ELSE . (sequence_of_statements_opt 
. 1)) (END . (sequence_of_statements_opt . 1)) (EXCEPTION . 
(sequence_of_statements_opt . 1)) (LESS_LESS .  639) (ACCEPT . (label_opt . 0)) 
(BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) 
(FOR . (label_opt . 0)) (IF . (label_opt . 0) [...]
+      ((default . error) (END . (handled_sequence_of_statements . 1)) 
(EXCEPTION .  672))
       ((default . error) (OR . (simple_statement . 5)) (THEN . 
(simple_statement . 5)) (WHEN . (simple_statement . 5)) (EXCEPTION . 
(simple_statement . 5)) (END . (simple_statement . 5)) (LESS_LESS . 
(simple_statement . 5)) (ACCEPT . (simple_statement . 5)) (ABORT . 
(simple_statement . 5)) (BEGIN . (simple_statement . 5)) (CASE . 
(simple_statement . 5)) (DECLARE . (simple_statement . 5)) (DELAY . 
(simple_statement . 5)) (EXIT . (simple_statement . 5)) (FOR . 
(simple_statement . 5)) (GOTO [...]
       ((default . error) (WHEN . (sequence_of_statements . 0)) (THEN . 
(sequence_of_statements . 0)) (OR . (sequence_of_statements . 0)) (ELSIF . 
(sequence_of_statements . 0)) (ELSE . (sequence_of_statements . 0)) (EXCEPTION 
. (sequence_of_statements . 0)) (END . (sequence_of_statements . 0)) (LESS_LESS 
. (sequence_of_statements . 0)) (ACCEPT . (sequence_of_statements . 0)) (ABORT 
. (sequence_of_statements . 0)) (BEGIN . (sequence_of_statements . 0)) (CASE . 
(sequence_of_statements . 0)) [...]
       ((default . error) (OR . (select_statement . 1)) (THEN . 
(select_statement . 1)) (WHEN . (select_statement . 1)) (EXCEPTION . 
(select_statement . 1)) (END . (select_statement . 1)) (LESS_LESS . 
(select_statement . 1)) (ACCEPT . (select_statement . 1)) (ABORT . 
(select_statement . 1)) (BEGIN . (select_statement . 1)) (CASE . 
(select_statement . 1)) (DECLARE . (select_statement . 1)) (DELAY . 
(select_statement . 1)) (EXIT . (select_statement . 1)) (FOR . 
(select_statement . 1)) (GOTO [...]
-      ((default . error) (SEMICOLON .  679))
-      ((default . error) (SEMICOLON .  678))
+      ((default . error) (SEMICOLON .  671))
+      ((default . error) (SEMICOLON .  670))
       ((default . error) (IDENTIFIER . (generic_instantiation . 2)) (TYPE . 
(generic_instantiation . 2)) (TASK . (generic_instantiation . 2)) (SUBTYPE . 
(generic_instantiation . 2)) (PROTECTED . (generic_instantiation . 2)) (FOR . 
(generic_instantiation . 2)) (ENTRY . (generic_instantiation . 2)) (BEGIN . 
(generic_instantiation . 2)) (END . (generic_instantiation . 2)) (WITH . 
(generic_instantiation . 2)) (USE . (generic_instantiation . 2)) (SEPARATE . 
(generic_instantiation . 2)) (PROCE [...]
       ((default . error) (IDENTIFIER . (generic_instantiation . 1)) (TYPE . 
(generic_instantiation . 1)) (TASK . (generic_instantiation . 1)) (SUBTYPE . 
(generic_instantiation . 1)) (PROTECTED . (generic_instantiation . 1)) (FOR . 
(generic_instantiation . 1)) (ENTRY . (generic_instantiation . 1)) (BEGIN . 
(generic_instantiation . 1)) (END . (generic_instantiation . 1)) (WITH . 
(generic_instantiation . 1)) (USE . (generic_instantiation . 1)) (SEPARATE . 
(generic_instantiation . 1)) (PROCE [...]
-      ((default . error) (END . (exception_handler_list_opt . 0)) (WHEN .  
952))
+      ((default . error) (END . (exception_handler_list_opt . 0)) (WHEN .  
943))
       ((default . error) (OR . (sequence_of_statements . 2)) (THEN . 
(sequence_of_statements . 2)) (WHEN . (sequence_of_statements . 2)) 
(CHARACTER_LITERAL . ((sequence_of_statements . 2) (label_opt . 1))) 
(STRING_LITERAL . ((sequence_of_statements . 2) (label_opt . 1))) (IDENTIFIER . 
((sequence_of_statements . 2) (label_opt . 1))) (WHILE . 
((sequence_of_statements . 2) (label_opt . 1))) (SELECT . 
((sequence_of_statements . 2) (label_opt . 1))) (RETURN . 
((sequence_of_statements . 2) (la [...]
       ((default . error) (OR . (sequence_of_statements . 1)) (THEN . 
(sequence_of_statements . 1)) (WHEN . (sequence_of_statements . 1)) 
(CHARACTER_LITERAL . (sequence_of_statements . 1)) (STRING_LITERAL . 
(sequence_of_statements . 1)) (IDENTIFIER . (sequence_of_statements . 1)) 
(WHILE . (sequence_of_statements . 1)) (SELECT . (sequence_of_statements . 1)) 
(RETURN . (sequence_of_statements . 1)) (REQUEUE . (sequence_of_statements . 
1)) (RAISE . (sequence_of_statements . 1)) (PRAGMA . (se [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (WHEN . (procedure_call_statement . 0)) (OR . 
(procedure_call_statement . 0)) (THEN . (procedure_call_statement . 0)) (ELSIF 
. (procedure_call_statement . 0)) (ELSE . (procedure_call_statement . 0)) 
(CHARACTER_LITERAL . (procedure_call_statement . 0)) (STRING_LITERAL . 
(procedure_call_statement . 0)) (IDENTIFIER . (procedure_call_statement . 0)) 
(WHILE . (procedure_call_statement . 0)) (SELECT . (procedure_call_statement . 
0)) (RETURN . (procedure_call_statement  [...]
       ((default . error) (OR . (statement . 1)) (THEN . (statement . 1)) (WHEN 
. (statement . 1)) (EXCEPTION . (statement . 1)) (END . (statement . 1)) 
(LESS_LESS . (statement . 1)) (ACCEPT . (statement . 1)) (ABORT . (statement . 
1)) (BEGIN . (statement . 1)) (CASE . (statement . 1)) (DECLARE . (statement . 
1)) (DELAY . (statement . 1)) (EXIT . (statement . 1)) (FOR . (statement . 1)) 
(GOTO . (statement . 1)) (IF . (statement . 1)) (LOOP . (statement . 1)) (NULL 
. (statement . 1)) (PRAG [...]
       ((default . error) (OR . (statement . 0)) (THEN . (statement . 0)) (WHEN 
. (statement . 0)) (EXCEPTION . (statement . 0)) (END . (statement . 0)) 
(LESS_LESS . (statement . 0)) (ACCEPT . (statement . 0)) (ABORT . (statement . 
0)) (BEGIN . (statement . 0)) (CASE . (statement . 0)) (DECLARE . (statement . 
0)) (DELAY . (statement . 0)) (EXIT . (statement . 0)) (FOR . (statement . 0)) 
(GOTO . (statement . 0)) (IF . (statement . 0)) (LOOP . (statement . 0)) (NULL 
. (statement . 0)) (PRAG [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (CHARACTER_LITERAL . (label_opt . 2)) (STRING_LITERAL 
. (label_opt . 2)) (IDENTIFIER . (label_opt . 2)) (REQUEUE . (label_opt . 2)) 
(RAISE . (label_opt . 2)) (PRAGMA . (label_opt . 2)) (NULL . (label_opt . 2)) 
(GOTO . (label_opt . 2)) (EXIT . (label_opt . 2)) (DELAY . (label_opt . 2)) 
(ABORT . (label_opt . 2)) (WHILE . (label_opt . 2)) (SELECT . (label_opt . 2)) 
(RETURN . (label_opt . 2)) (LOOP . (label_opt . 2)) (IF . (label_opt . 2)) (FOR 
. (label_opt . 2)) (DE [...]
-      ((default . error) (GREATER_GREATER .  948))
+      ((default . error) (GREATER_GREATER .  939))
       ((default . error) (LOOP . (iteration_scheme . 0)))
-      ((default . error) (SEMICOLON .  947))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (SEMICOLON .  938))
+      ((default . error) (EQUAL_GREATER . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
       ((default . error) (ELSE . (select_alternative . 3)) (OR . 
(select_alternative . 3)) (END . (select_alternative . 3)))
-      ((default . error) (OR . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_op [...]
-      ((default . error) (ELSE .  942) (OR .  943))
-      ((default . error) (DOT .  90) (SEMICOLON .  684) (TICK .  91) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (LEFT_PAREN .  107) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . [...]
-      ((default . error) (OR . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (THEN . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO .  [...]
+      ((default . error) (OR . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_op [...]
+      ((default . error) (ELSE .  933) (OR .  934))
+      ((default . error) (DOT .  90) (SEMICOLON .  676) (TICK .  91) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(THEN . (sequence_of_statements_opt . 0)) (LEFT_PAREN .  107) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . [...]
+      ((default . error) (OR . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (THEN . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO .  [...]
       ((default . error) (ELSE . (select_alternative_list . 0)) (END . 
(select_alternative_list . 0)) (OR . (select_alternative_list . 0)))
-      ((default . error) (ELSE . (select_alternative_list_opt . 1)) (END . 
(select_alternative_list_opt . 1)) (OR .  939))
-      ((default . error) (ELSE .  937) (END .  938))
-      ((default . error) (THEN .  936))
+      ((default . error) (ELSE . (select_alternative_list_opt . 1)) (END . 
(select_alternative_list_opt . 1)) (OR .  930))
+      ((default . error) (ELSE .  928) (END .  929))
+      ((default . error) (THEN .  927))
       ((default . error) (WHEN . (simple_return_statement . 0)) (THEN . 
(simple_return_statement . 0)) (OR . (simple_return_statement . 0)) (ELSIF . 
(simple_return_statement . 0)) (ELSE . (simple_return_statement . 0)) 
(CHARACTER_LITERAL . (simple_return_statement . 0)) (STRING_LITERAL . 
(simple_return_statement . 0)) (IDENTIFIER . (simple_return_statement . 0)) 
(WHILE . (simple_return_statement . 0)) (SELECT . (simple_return_statement . 
0)) (RETURN . (simple_return_statement . 0)) (REQU [...]
-      ((default . error) (COLON .  935) (STAR_STAR . (name . 0)) (STAR . (name 
. 0)) (SLASH . (name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SEMICOLON . 
(name . 0)) (SLASH_EQUAL . (name . 0)) (LESS_EQUAL . (name . 0)) (LESS . (name 
. 0)) (GREATER_EQUAL . (name . 0)) (GREATER . (name . 0)) (EQUAL . (name . 0)) 
(NOT . (name . 0)) (IN . (name . 0)) (AMPERSAND . (name . 0)) (MINUS . (name . 
0)) (PLUS . (name . 0)) (LEFT_PAREN . (name . 0)) (AND . (name . 0)) (OR . 
(name . 0)) (XOR . (nam [...]
-      ((default . error) (SEMICOLON .  934))
-      ((default . error) (DO . (extended_return_object_declaration_opt . 1)) 
(SEMICOLON .  933))
-      ((default . error) (DO .  932))
-      ((default . error) (WITH .  930) (DOT .  90) (TICK .  91) (SEMICOLON .  
931) (LEFT_PAREN .  107))
+      ((default . error) (COLON .  926) (STAR_STAR . (name . 0)) (STAR . (name 
. 0)) (SLASH . (name . 0)) (REM . (name . 0)) (MOD . (name . 0)) (SEMICOLON . 
(name . 0)) (SLASH_EQUAL . (name . 0)) (LESS_EQUAL . (name . 0)) (LESS . (name 
. 0)) (GREATER_EQUAL . (name . 0)) (GREATER . (name . 0)) (EQUAL . (name . 0)) 
(NOT . (name . 0)) (IN . (name . 0)) (AMPERSAND . (name . 0)) (MINUS . (name . 
0)) (PLUS . (name . 0)) (LEFT_PAREN . (name . 0)) (AND . (name . 0)) (OR . 
(name . 0)) (XOR . (nam [...]
+      ((default . error) (SEMICOLON .  925))
+      ((default . error) (DO . (extended_return_object_declaration_opt . 1)) 
(SEMICOLON .  924))
+      ((default . error) (DO .  923))
+      ((default . error) (WITH .  921) (DOT .  90) (TICK .  91) (SEMICOLON .  
922) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (raise_statement . 0)) (THEN . 
(raise_statement . 0)) (OR . (raise_statement . 0)) (ELSIF . (raise_statement . 
0)) (ELSE . (raise_statement . 0)) (CHARACTER_LITERAL . (raise_statement . 0)) 
(STRING_LITERAL . (raise_statement . 0)) (IDENTIFIER . (raise_statement . 0)) 
(WHILE . (raise_statement . 0)) (SELECT . (raise_statement . 0)) (RETURN . 
(raise_statement . 0)) (REQUEUE . (raise_statement . 0)) (RAISE . 
(raise_statement . 0)) (PRAGMA . (raise_statement  [...]
-      ((default . error) (WITH .  928) (DOT .  90) (TICK .  91) (SEMICOLON .  
929) (LEFT_PAREN .  107))
+      ((default . error) (WITH .  919) (DOT .  90) (TICK .  91) (SEMICOLON .  
920) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (simple_statement . 0)) (THEN . 
(simple_statement . 0)) (OR . (simple_statement . 0)) (ELSIF . 
(simple_statement . 0)) (ELSE . (simple_statement . 0)) (CHARACTER_LITERAL . 
(simple_statement . 0)) (STRING_LITERAL . (simple_statement . 0)) (IDENTIFIER . 
(simple_statement . 0)) (WHILE . (simple_statement . 0)) (SELECT . 
(simple_statement . 0)) (RETURN . (simple_statement . 0)) (REQUEUE . 
(simple_statement . 0)) (RAISE . (simple_statement . 0)) (PRAGMA . (sim [...]
-      ((default . error) (END .  927))
-      ((default . error) (THEN .  926))
-      ((default . error) (SEMICOLON .  925))
+      ((default . error) (END .  918))
+      ((default . error) (THEN .  917))
+      ((default . error) (SEMICOLON .  916))
       ((default . error) (LOOP . (iterator_specification_opt . 1)))
       ((default . error) (LOOP . (iteration_scheme . 1)))
       ((default . error) (WHEN . (identifier_opt . 1)) (SEMICOLON . 
(identifier_opt . 1)))
-      ((default . error) (WHEN .  923) (SEMICOLON .  924))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  921))
-      ((default . error) (BEGIN .  920))
-      ((default . error) (IS .  919))
-      ((default . error) (END .  918))
-      ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON .  917) 
(LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON . (actual_parameter_part_opt . 0)) (DO . 
(actual_parameter_part_opt . 0)) (LEFT_PAREN . ( 914 (actual_parameter_part_opt 
. 0))))
-      ((default . error) (IS .  913))
-      ((default . error) (IS .  912))
-      ((default . error) (WHEN .  624))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  910))
-      ((default . error) (NULL .  909))
-      ((default . error) (DO . (subtype_indication . 3)) (OF . 
(subtype_indication . 3)) (AND . (subtype_indication . 3)) (SEMICOLON . 
(subtype_indication . 3)) (WITH . (subtype_indication . 3)) (COLON_EQUAL . 
(subtype_indication . 3)) (DOT .  90) (TICK .  91) (RANGE .  904) (LEFT_PAREN . 
 829))
-      ((default . error) (OF .  908))
+      ((default . error) (WHEN .  914) (SEMICOLON .  915))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  912))
+      ((default . error) (BEGIN .  911))
+      ((default . error) (IS .  910))
+      ((default . error) (END .  909))
+      ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON .  908) 
(LEFT_PAREN .  107))
+      ((default . error) (SEMICOLON . (actual_parameter_part_opt . 0)) (DO . 
(actual_parameter_part_opt . 0)) (LEFT_PAREN . ( 905 (actual_parameter_part_opt 
. 0))))
+      ((default . error) (IS .  904))
+      ((default . error) (IS .  903))
+      ((default . error) (WHEN .  616))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  901))
+      ((default . error) (NULL .  900))
+      ((default . error) (DO . (subtype_indication . 3)) (OF . 
(subtype_indication . 3)) (AND . (subtype_indication . 3)) (SEMICOLON . 
(subtype_indication . 3)) (WITH . (subtype_indication . 3)) (COLON_EQUAL . 
(subtype_indication . 3)) (DOT .  90) (TICK .  91) (RANGE .  895) (LEFT_PAREN . 
 820))
+      ((default . error) (OF .  899))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 5)) (EQUAL_GREATER . (iterator_specification . 5)) 
(LEFT_PAREN .  107))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  906) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  897) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (iterator_specification . 1)) (EQUAL_GREATER 
. (iterator_specification . 1)))
-      ((default . error) (LOOP . (subtype_indication . 3)) (DOT .  90) (IN . 
(primary . 3)) (NOT . (primary . 3)) (EQUAL . (primary . 3)) (GREATER . 
(primary . 3)) (GREATER_EQUAL . (primary . 3)) (LESS . (primary . 3)) 
(LESS_EQUAL . (primary . 3)) (SLASH_EQUAL . (primary . 3)) (RIGHT_PAREN . 
((primary . 3) (subtype_indication . 3))) (COMMA . ((primary . 3) 
(subtype_indication . 3))) (BAR . (primary . 3)) (EQUAL_GREATER . ((primary . 
3) (subtype_indication . 3))) (AND . (primary . 3)) (OR [...]
+      ((default . error) (LOOP . (subtype_indication . 3)) (DOT .  90) (IN . 
(primary . 3)) (NOT . (primary . 3)) (EQUAL . (primary . 3)) (GREATER . 
(primary . 3)) (GREATER_EQUAL . (primary . 3)) (LESS . (primary . 3)) 
(LESS_EQUAL . (primary . 3)) (SLASH_EQUAL . (primary . 3)) (RIGHT_PAREN . 
((primary . 3) (subtype_indication . 3))) (COMMA . ((primary . 3) 
(subtype_indication . 3))) (BAR . (primary . 3)) (EQUAL_GREATER . ((primary . 
3) (subtype_indication . 3))) (AND . (primary . 3)) (OR [...]
       ((default . error) (LOOP . (discrete_subtype_definition . 1)) 
(EQUAL_GREATER . (discrete_subtype_definition . 1)) (COMMA . 
(discrete_subtype_definition . 1)) (RIGHT_PAREN . (discrete_subtype_definition 
. 1)))
       ((default . error) (LOOP . (discrete_subtype_definition . 0)) 
(EQUAL_GREATER . (discrete_subtype_definition . 0)) (COMMA . 
(discrete_subtype_definition . 0)) (RIGHT_PAREN . (discrete_subtype_definition 
. 0)))
-      ((default . error) (COMMA . (quantified_expression . 0)) (RIGHT_PAREN . 
(quantified_expression . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA . (elsif_expression_list . 0)) (RIGHT_PAREN . 
(elsif_expression_list . 0)) (ELSE . (elsif_expression_list . 0)) (ELSIF . 
(elsif_expression_list . 0)))
-      ((default . error) (COMMA . (if_expression . 1)) (RIGHT_PAREN . 
(if_expression . 1)) (ELSE .  900) (ELSIF .  744))
+      ((default . error) (RIGHT_PAREN . (quantified_expression . 0)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (elsif_expression_list . 0)) (ELSE . 
(elsif_expression_list . 0)) (ELSIF . (elsif_expression_list . 0)))
+      ((default . error) (RIGHT_PAREN . (if_expression . 1)) (ELSE .  891) 
(ELSIF .  736))
       ((default . error) (USE . (aggregate . 1)) (COLON_EQUAL . (aggregate . 
1)) (CHARACTER_LITERAL . (aggregate . 1)) (STRING_LITERAL . (aggregate . 1)) 
(IDENTIFIER . (aggregate . 1)) (LESS_LESS . (aggregate . 1)) (WHILE . 
(aggregate . 1)) (SELECT . (aggregate . 1)) (REQUEUE . (aggregate . 1)) (RAISE 
. (aggregate . 1)) (PRAGMA . (aggregate . 1)) (NULL . (aggregate . 1)) (IF . 
(aggregate . 1)) (GOTO . (aggregate . 1)) (FOR . (aggregate . 1)) (EXIT . 
(aggregate . 1)) (DELAY . (aggregate . [...]
-      ((default . error) (RIGHT_PAREN .  899))
-      ((default . error) (COMMA . (pragma_argument_association . 3)) 
(RIGHT_PAREN . (pragma_argument_association . 3)))
-      ((default . error) (SEMICOLON .  898))
-      ((default . error) (END .  897))
-      ((default . error) (IDENTIFIER .  235) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN .  890))
+      ((default . error) (XOR . (choice_relation . 0)) (OR . (choice_relation 
. 0)) (BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) 
(AND . (choice_relation . 0)))
+      ((default . error) (RIGHT_PAREN .  889))
+      ((default . error) (DO . (membership_choice_list . 1)) (LOOP . 
(membership_choice_list . 1)) (ELSIF . (membership_choice_list . 1)) (ELSE . 
(membership_choice_list . 1)) (EQUAL_GREATER . (membership_choice_list . 1)) 
(DIGITS . (membership_choice_list . 1)) (RANGE . (membership_choice_list . 1)) 
(THEN . (membership_choice_list . 1)) (SEMICOLON . (membership_choice_list . 
1)) (IS . (membership_choice_list . 1)) (WITH . (membership_choice_list . 1)) 
(RIGHT_PAREN . (membership_choice_l [...]
+      ((default . error) (SEMICOLON .  888))
+      ((default . error) (END .  887))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) 
(RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  229) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  728) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (FOR .  146) 
(CASE .  145) (IF .  147) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  
144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (ARRAY . (constant_opt . 1)) (ACCESS . (constant_opt 
. 1)) (NOT . (constant_opt . 1)) (IDENTIFIER . (constant_opt . 1)) 
(STRING_LITERAL . (constant_opt . 1)) (CHARACTER_LITERAL . (constant_opt . 1)))
-      ((default . error) (ARRAY .  498) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885))
+      ((default . error) (ARRAY .  490) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875))
       ((default . error) (IDENTIFIER . (exception_declaration . 0)) (USE . 
(exception_declaration . 0)) (TYPE . (exception_declaration . 0)) (TASK . 
(exception_declaration . 0)) (SUBTYPE . (exception_declaration . 0)) (PROTECTED 
. (exception_declaration . 0)) (PROCEDURE . (exception_declaration . 0)) 
(PRAGMA . (exception_declaration . 0)) (PACKAGE . (exception_declaration . 0)) 
(OVERRIDING . (exception_declaration . 0)) (NOT . (exception_declaration . 0)) 
(GENERIC . (exception_declaratio [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  882) (LEFT_PAREN 
.  107))
+      ((default . error) (DOT .  90) (TICK .  91) (RENAMES .  872) (LEFT_PAREN 
.  107))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 0)) (NULL . 
(abstract_tagged_limited_opt . 0)) (RECORD . (abstract_tagged_limited_opt . 0)) 
(TAGGED .  869) (RANGE .  867) (MOD .  865) (DIGITS .  862) (DELTA .  861) 
(TASK .  509) (PROTECTED .  505) (SYNCHRONIZED .  507) (INTERFACE .  501) 
(ARRAY .  498) (LEFT_PAREN .  863) (ACCESS . (null_exclusion_opt . 0)) (NOT .  
232) (NEW . ((abstract_limited_opt . 0) (abstract_limited_synchronized_opt . 
0))) (LIMITED .  864) (ABSTR [...]
+      ((default . error) (PRIVATE . (abstract_tagged_limited_opt . 0)) (NULL . 
(abstract_tagged_limited_opt . 0)) (RECORD . (abstract_tagged_limited_opt . 0)) 
(TAGGED .  859) (RANGE .  857) (MOD .  855) (DIGITS .  852) (DELTA .  851) 
(TASK .  501) (PROTECTED .  497) (SYNCHRONIZED .  499) (INTERFACE .  493) 
(ARRAY .  490) (LEFT_PAREN .  853) (ACCESS . (null_exclusion_opt . 0)) (NOT .  
226) (NEW . ((abstract_limited_opt . 0) (abstract_limited_synchronized_opt . 
0))) (LIMITED .  854) (ABSTR [...]
       ((default . error) (BEGIN . (incomplete_type_declaration . 1)) (ENTRY . 
(incomplete_type_declaration . 1)) (FOR . (incomplete_type_declaration . 1)) 
(FUNCTION . (incomplete_type_declaration . 1)) (GENERIC . 
(incomplete_type_declaration . 1)) (NOT . (incomplete_type_declaration . 1)) 
(OVERRIDING . (incomplete_type_declaration . 1)) (PACKAGE . 
(incomplete_type_declaration . 1)) (PRAGMA . (incomplete_type_declaration . 1)) 
(PROCEDURE . (incomplete_type_declaration . 1)) (PROTECTED . ( [...]
-      ((default . error) (SEPARATE .  859))
+      ((default . error) (SEPARATE .  849))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (NEW .  855) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (NEW .  845) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (BEGIN . (single_task_declaration . 2)) (ENTRY . 
(single_task_declaration . 2)) (FOR . (single_task_declaration . 2)) (FUNCTION 
. (single_task_declaration . 2)) (GENERIC . (single_task_declaration . 2)) (NOT 
. (single_task_declaration . 2)) (OVERRIDING . (single_task_declaration . 2)) 
(PACKAGE . (single_task_declaration . 2)) (PRAGMA . (single_task_declaration . 
2)) (PROCEDURE . (single_task_declaration . 2)) (PROTECTED . 
(single_task_declaration . 2)) (SUBTYPE . [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEPARATE .  853))
+      ((default . error) (SEPARATE .  843))
       ((default . error) (IS . (aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (NEW .  849) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (SEPARATE .  848))
-      ((default . error) (SEMICOLON .  847))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER . (mod_clause_opt . 0)) (AT .  844))
-      ((default . error) (SEMICOLON .  843))
-      ((default . error) (SEMICOLON .  842))
-      ((default . error) (XOR . (choice_relation . 0)) (OR . (choice_relation 
. 0)) (BAR . (choice_relation . 0)) (EQUAL_GREATER . (choice_relation . 0)) 
(AND . (choice_relation . 0)))
-      ((default . error) (RIGHT_PAREN .  841))
-      ((default . error) (DO . (membership_choice_list . 1)) (LOOP . 
(membership_choice_list . 1)) (COMMA . (membership_choice_list . 1)) (ELSIF . 
(membership_choice_list . 1)) (ELSE . (membership_choice_list . 1)) 
(EQUAL_GREATER . (membership_choice_list . 1)) (RIGHT_PAREN . 
(membership_choice_list . 1)) (DIGITS . (membership_choice_list . 1)) (RANGE . 
(membership_choice_list . 1)) (THEN . (membership_choice_list . 1)) (SEMICOLON 
. (membership_choice_list . 1)) (WITH . (membership_choic [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
837) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (NEW .  839) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (SEPARATE .  838))
+      ((default . error) (SEMICOLON .  837))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER . (mod_clause_opt . 0)) (AT .  834))
+      ((default . error) (SEMICOLON .  833))
+      ((default . error) (SEMICOLON .  832))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
828) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (NULL . (abstract_tagged_limited_opt . 1)) (RECORD . 
(abstract_tagged_limited_opt . 1)) (PRIVATE . (abstract_tagged_limited_opt . 
1)))
       ((default . error) (RIGHT_PAREN . (discrete_subtype_definition_list . 
0)) (COMMA . (discrete_subtype_definition_list . 0)))
-      ((default . error) (COMMA .  836) (RIGHT_PAREN .  835))
+      ((default . error) (COMMA .  827) (RIGHT_PAREN .  826))
       ((default . error) (RIGHT_PAREN . (index_subtype_definition_list . 0)) 
(COMMA . (index_subtype_definition_list . 0)))
-      ((default . error) (COMMA .  834) (RIGHT_PAREN .  833))
-      ((default . error) (RIGHT_PAREN . (subtype_indication . 3)) (COMMA . 
(subtype_indication . 3)) (PLUS . (primary . 3)) (MINUS . (primary . 3)) 
(AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 3)) (MOD . (primary . 3)) 
(REM . (primary . 3)) (SLASH . (primary . 3)) (STAR . (primary . 3)) (STAR_STAR 
. (primary . 3)) (DOT .  90) (TICK .  285) (RANGE .  830) (LEFT_PAREN .  829))
-      ((default . error) (BOX .  828))
+      ((default . error) (COMMA .  825) (RIGHT_PAREN .  824))
+      ((default . error) (RIGHT_PAREN . (subtype_indication . 3)) (COMMA . 
(subtype_indication . 3)) (PLUS . (primary . 3)) (MINUS . (primary . 3)) 
(AMPERSAND . (primary . 3)) (DOT_DOT . (primary . 3)) (MOD . (primary . 3)) 
(REM . (primary . 3)) (SLASH . (primary . 3)) (STAR . (primary . 3)) (STAR_STAR 
. (primary . 3)) (DOT .  90) (TICK .  355) (RANGE .  821) (LEFT_PAREN .  820))
+      ((default . error) (BOX .  819))
       ((default . error) (WITH . (formal_type_definition . 2)) (SEMICOLON . 
(formal_type_definition . 2)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (PACKAGE . (formal_type_declaration . 1)) (PROCEDURE 
. (formal_type_declaration . 1)) (FUNCTION . (formal_type_declaration . 1)) 
(PRAGMA . (formal_type_declaration . 1)) (TYPE . (formal_type_declaration . 1)) 
(USE . (formal_type_declaration . 1)) (WITH . (formal_type_declaration . 1)) 
(IDENTIFIER . (formal_type_declaration . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(and_interface_list_opt . 0)) (SEMICOLON . (and_interface_list_opt . 0)) (AND . 
 821) (LEFT_PAREN .  107))
+      ((default . error) (DOT .  90) (TICK .  91) (WITH . 
(and_interface_list_opt . 0)) (SEMICOLON . (and_interface_list_opt . 0)) (AND . 
 812) (LEFT_PAREN .  107))
       ((default . error) (PACKAGE . (formal_type_declaration . 0)) (PROCEDURE 
. (formal_type_declaration . 0)) (FUNCTION . (formal_type_declaration . 0)) 
(PRAGMA . (formal_type_declaration . 0)) (TYPE . (formal_type_declaration . 0)) 
(USE . (formal_type_declaration . 0)) (WITH . (formal_type_declaration . 0)) 
(IDENTIFIER . (formal_type_declaration . 0)))
       ((default . error) (PACKAGE . (formal_subprogram_declaration . 2)) 
(PROCEDURE . (formal_subprogram_declaration . 2)) (FUNCTION . 
(formal_subprogram_declaration . 2)) (PRAGMA . (formal_subprogram_declaration . 
2)) (TYPE . (formal_subprogram_declaration . 2)) (USE . 
(formal_subprogram_declaration . 2)) (WITH . (formal_subprogram_declaration . 
2)) (IDENTIFIER . (formal_subprogram_declaration . 2)))
-      ((default . error) (BOX .  820) (FOR .  146) (CASE .  145) (IF .  147) 
(RIGHT_PAREN . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  
153) (OTHERS .  182) (ABS .  144) (NOT .  181) (RAISE .  152) (NUMERIC_LITERAL 
.  155) (NULL .  151) (NEW .  149) (LEFT_PAREN  [...]
+      ((default . error) (BOX .  811) (FOR .  146) (CASE .  145) (IF .  147) 
(RIGHT_PAREN . ((expression_opt . 0) (association_opt . 0))) (COMMA . 
((expression_opt . 0) (association_opt . 0))) (EQUAL_GREATER . 
(discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  
154) (OTHERS .  152) (ABS .  144) (NOT .  150) (RAISE .  153) (NUMERIC_LITERAL 
.  156) (NULL .  151) (NEW .  149) (LEFT_PAREN  [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (PACKAGE . (formal_object_declaration . 1)) 
(PROCEDURE . (formal_object_declaration . 1)) (FUNCTION . 
(formal_object_declaration . 1)) (PRAGMA . (formal_object_declaration . 1)) 
(TYPE . (formal_object_declaration . 1)) (USE . (formal_object_declaration . 
1)) (WITH . (formal_object_declaration . 1)) (IDENTIFIER . 
(formal_object_declaration . 1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEMICOLON .  817))
-      ((default . error) (IDENTIFIER .  77))
+      ((default . error) (SEMICOLON .  808))
+      ((default . error) (SEMICOLON . (parameter_specification . 0)) 
(RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  77))
       ((default . error) (DO . (access_definition . 1)) (COLON_EQUAL . 
(access_definition . 1)) (RIGHT_PAREN . (access_definition . 1)) (RENAMES . 
(access_definition . 1)) (WITH . (access_definition . 1)) (SEMICOLON . 
(access_definition . 1)) (IS . (access_definition . 1)))
       ((default . error) (DO . (access_definition . 2)) (COLON_EQUAL . 
(access_definition . 2)) (RIGHT_PAREN . (access_definition . 2)) (RENAMES . 
(access_definition . 2)) (WITH . (access_definition . 2)) (SEMICOLON . 
(access_definition . 2)) (IS . (access_definition . 2)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . (parameter_specification . 2)) 
(SEMICOLON . (parameter_specification . 2)))
-      ((default . error) (COLON_EQUAL .  1086) (DOT .  90) (TICK .  91) 
(RIGHT_PAREN . (parameter_specification . 1)) (SEMICOLON . 
(parameter_specification . 1)) (LEFT_PAREN .  107))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 3)) 
(SEMICOLON . (parameter_specification . 3)))
+      ((default . error) (COLON_EQUAL .  1077) (DOT .  90) (TICK .  91) 
(RIGHT_PAREN . (parameter_specification . 2)) (SEMICOLON . 
(parameter_specification . 2)) (LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER . (formal_object_declaration . 2)) (WITH 
. (formal_object_declaration . 2)) (USE . (formal_object_declaration . 2)) 
(TYPE . (formal_object_declaration . 2)) (PRAGMA . (formal_object_declaration . 
2)) (FUNCTION . (formal_object_declaration . 2)) (PROCEDURE . 
(formal_object_declaration . 2)) (PACKAGE . (formal_object_declaration . 2)))
-      ((default . error) (SEMICOLON .  1085))
-      ((default . error) (SEMICOLON .  1084))
-      ((default . error) (RIGHT_PAREN .  1083))
+      ((default . error) (SEMICOLON .  1076))
+      ((default . error) (SEMICOLON .  1075))
+      ((default . error) (RIGHT_PAREN .  1074))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (WITH . ( 1081 (formal_derived_type_definition . 1))) 
(SEMICOLON . (formal_derived_type_definition . 1)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
1)) (SEMICOLON . (interface_type_definition . 1)))
+      ((default . error) (WITH . ( 1072 (formal_derived_type_definition . 1))) 
(SEMICOLON . (formal_derived_type_definition . 1)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
1)) (SEMICOLON . (interface_type_definition . 1)))
       ((default . error) (DOT .  90) (SEMICOLON . (interface_list . 0)) (WITH 
. (interface_list . 0)) (AND . (interface_list . 0)) (TICK .  91) (LEFT_PAREN . 
 107))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
3)) (SEMICOLON . (interface_type_definition . 3)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
2)) (SEMICOLON . (interface_type_definition . 2)))
-      ((default . error) (AND .  1080) (WITH . (interface_type_definition . 
0)) (SEMICOLON . (interface_type_definition . 0)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
3)) (SEMICOLON . (interface_type_definition . 3)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
2)) (SEMICOLON . (interface_type_definition . 2)))
+      ((default . error) (AND .  1071) (WITH . (interface_type_definition . 
0)) (SEMICOLON . (interface_type_definition . 0)))
       ((default . error) (SEMICOLON . (formal_type_definition . 7)) (WITH . 
(formal_type_definition . 7)))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  183) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (OTHERS .  182) (ABS .  
144) (NOT .  1077) (RAISE .  152) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW . 
 149) (LEFT_PAREN .  148))
-      ((default . error) (BOX .  1076) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (IDENTIFIER .  48) (CHARACTER_LITERAL .  157) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (OTHERS .  152) (ABS .  
144) (NOT .  1068) (RAISE .  153) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW . 
 149) (LEFT_PAREN .  148))
+      ((default . error) (BOX .  1067) (IDENTIFIER .  48) (CHARACTER_LITERAL . 
 50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (subtype_indication . 2)) (DO . 
(subtype_indication . 2)) (RIGHT_PAREN . (subtype_indication . 2)) (COMMA . 
(subtype_indication . 2)) (EQUAL_GREATER . (subtype_indication . 2)) 
(COLON_EQUAL . (subtype_indication . 2)) (WITH . (subtype_indication . 2)) 
(SEMICOLON . (subtype_indication . 2)) (AND . (subtype_indication . 2)) (OF . 
(subtype_indication . 2)))
       ((default . error) (LOOP . (constraint . 1)) (DO . (constraint . 1)) 
(RIGHT_PAREN . (constraint . 1)) (COMMA . (constraint . 1)) (EQUAL_GREATER . 
(constraint . 1)) (COLON_EQUAL . (constraint . 1)) (WITH . (constraint . 1)) 
(SEMICOLON . (constraint . 1)) (AND . (constraint . 1)) (OF . (constraint . 1)))
-      ((default . error) (OF .  1075))
+      ((default . error) (OF .  1066))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (OF .  1072))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (OF .  1063))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (DOT . (name . 0)) (LEFT_PAREN . (name . 0)) (TICK . 
(name . 0)) (SEMICOLON . (null_exclusion_opt_name_type . 2)) (RIGHT_PAREN . 
(null_exclusion_opt_name_type . 2)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 2)))
       ((default . error) (DOT . (name . 3)) (LEFT_PAREN . (name . 3)) (TICK . 
(name . 3)) (SEMICOLON . (null_exclusion_opt_name_type . 3)) (RIGHT_PAREN . 
(null_exclusion_opt_name_type . 3)) (COLON_EQUAL . 
(null_exclusion_opt_name_type . 3)))
       ((default . error) (SEMICOLON . (discriminant_specification_opt . 3)) 
(RIGHT_PAREN . (discriminant_specification_opt . 3)))
       ((default . error) (SEMICOLON . (discriminant_specification_opt . 1)) 
(RIGHT_PAREN . (discriminant_specification_opt . 1)))
-      ((default . error) (DO . (range . 0)) (LOOP . (range . 0)) (XOR . (range 
. 0)) (OR . (range . 0)) (AND . (range . 0)) (IS . (range . 0)) (WITH . (range 
. 0)) (SEMICOLON . (range . 0)) (THEN . (range . 0)) (RANGE . (range . 0)) 
(DIGITS . (range . 0)) (ELSE . (range . 0)) (ELSIF . (range . 0)) (COLON_EQUAL 
. (range . 0)) (OF . (range . 0)) (BAR . (range . 0)) (EQUAL_GREATER . (range . 
0)) (RIGHT_PAREN . (range . 0)) (COMMA . (range . 0)))
       ((default . error) (WHEN . (record_representation_clause . 0)) (END . 
(record_representation_clause . 0)) (PRIVATE . (record_representation_clause . 
0)) (CASE . (record_representation_clause . 0)) (IDENTIFIER . 
(record_representation_clause . 0)) (USE . (record_representation_clause . 0)) 
(TYPE . (record_representation_clause . 0)) (TASK . 
(record_representation_clause . 0)) (SUBTYPE . (record_representation_clause . 
0)) (PROTECTED . (record_representation_clause . 0)) (PROCEDURE . [...]
       ((default . error) (WHEN . (enumeration_representation_clause . 0)) (END 
. (enumeration_representation_clause . 0)) (PRIVATE . 
(enumeration_representation_clause . 0)) (CASE . 
(enumeration_representation_clause . 0)) (IDENTIFIER . 
(enumeration_representation_clause . 0)) (USE . 
(enumeration_representation_clause . 0)) (TYPE . 
(enumeration_representation_clause . 0)) (TASK . 
(enumeration_representation_clause . 0)) (SUBTYPE . 
(enumeration_representation_clause . 0)) (PROTECTED . (en [...]
-      ((default . error) (MOD .  1070))
-      ((default . error) (IDENTIFIER .  1067))
-      ((default . error) (SEMICOLON .  1066))
+      ((default . error) (MOD .  1061))
+      ((default . error) (IDENTIFIER .  1058))
+      ((default . error) (SEMICOLON .  1057))
       ((default . error) (WHEN . (aspect_clause . 0)) (PRIVATE . 
(aspect_clause . 0)) (END . (aspect_clause . 0)) (CASE . (aspect_clause . 0)) 
(BEGIN . (aspect_clause . 0)) (ENTRY . (aspect_clause . 0)) (FOR . 
(aspect_clause . 0)) (FUNCTION . (aspect_clause . 0)) (GENERIC . (aspect_clause 
. 0)) (NOT . (aspect_clause . 0)) (OVERRIDING . (aspect_clause . 0)) (PACKAGE . 
(aspect_clause . 0)) (PRAGMA . (aspect_clause . 0)) (PROCEDURE . (aspect_clause 
. 0)) (PROTECTED . (aspect_clause . 0)) (S [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END .  1062) (PRIVATE .  1063))
-      ((default . error) (SEMICOLON .  1061))
-      ((default . error) (IS .  1060))
+      ((default . error) (END .  1053) (PRIVATE .  1054))
+      ((default . error) (SEMICOLON .  1052))
+      ((default . error) (IS .  1051))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SEMICOLON .  1058))
+      ((default . error) (SEMICOLON .  1049))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (END .  1055) (PRIVATE .  1056))
-      ((default . error) (SEMICOLON .  1054))
-      ((default . error) (SEMICOLON .  1053) (IS .  1052))
+      ((default . error) (END .  1046) (PRIVATE .  1047))
+      ((default . error) (SEMICOLON .  1045))
+      ((default . error) (SEMICOLON .  1044) (IS .  1043))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (SYNCHRONIZED .  563) (TAGGED .  564) (NEW . 
((abstract_limited_opt . 3) (abstract_limited_synchronized_opt . 3))) (LIMITED 
.  1050))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (IDENTIFIER .  1044) (CHARACTER_LITERAL .  1045))
-      ((default . error) (INTERFACE .  557) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NULL . (abstract_tagged_limited_opt . 5)) 
(RECORD . (abstract_tagged_limited_opt . 5)) (NEW . ((abstract_limited_opt . 2) 
(abstract_limited_synchronized_opt . 4))))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RECORD .  1042))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (END . (component_list_opt . 0)) (NULL .  1033) (CASE 
.  1032) (IDENTIFIER .  77) (FOR .  299))
-      ((default . error) (SEMICOLON .  1031) (PRIVATE . 
(abstract_tagged_limited_opt . 4)) (NULL . (abstract_tagged_limited_opt . 4)) 
(RECORD . (abstract_tagged_limited_opt . 4)) (LIMITED .  551))
-      ((default . error) (NEW .  1030))
-      ((default . error) (NEW .  1029))
-      ((default . error) (PRIVATE .  1027) (RECORD .  868) (NULL .  866))
+      ((default . error) (SYNCHRONIZED .  555) (TAGGED .  556) (NEW . 
((abstract_limited_opt . 3) (abstract_limited_synchronized_opt . 3))) (LIMITED 
.  1041))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (DIGITS . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) (PLUS . 
 155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL . 
 151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  1035) (CHARACTER_LITERAL .  1036))
+      ((default . error) (INTERFACE .  549) (PRIVATE . 
(abstract_tagged_limited_opt . 5)) (NULL . (abstract_tagged_limited_opt . 5)) 
(RECORD . (abstract_tagged_limited_opt . 5)) (NEW . ((abstract_limited_opt . 2) 
(abstract_limited_synchronized_opt . 4))))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RECORD .  1033))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (END . (component_list_opt . 0)) (NULL .  1024) (CASE 
.  1023) (IDENTIFIER .  77) (FOR .  269))
+      ((default . error) (SEMICOLON .  1022) (PRIVATE . 
(abstract_tagged_limited_opt . 4)) (NULL . (abstract_tagged_limited_opt . 4)) 
(RECORD . (abstract_tagged_limited_opt . 4)) (LIMITED .  543))
+      ((default . error) (NEW .  1021))
+      ((default . error) (NEW .  1020))
+      ((default . error) (PRIVATE .  1018) (RECORD .  858) (NULL .  856))
       ((default . error) (WITH . (type_definition . 8)) (SEMICOLON . 
(type_definition . 8)))
       ((default . error) (WITH . (type_definition . 6)) (SEMICOLON . 
(type_definition . 6)))
       ((default . error) (WITH . (type_definition . 9)) (SEMICOLON . 
(type_definition . 9)))
@@ -2701,130 +2691,131 @@
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (SEMICOLON . (package_specification . 0)))
-      ((default . error) (SEMICOLON .  1022))
-      ((default . error) (NULL .  1021))
-      ((default . error) (COLON_EQUAL .  1019) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (COLON_EQUAL .  1017) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (COLON_EQUAL .  1015) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (SEMICOLON .  1014))
       ((default . error) (SEMICOLON .  1013))
-      ((default . error) (SEMICOLON .  1012))
-      ((default . error) (SEMICOLON .  1011))
-      ((default . error) (RIGHT_PAREN .  1010))
-      ((default . error) (RIGHT_PAREN .  1009))
-      ((default . error) (SEMICOLON .  1008))
-      ((default . error) (RIGHT_PAREN .  1007))
+      ((default . error) (NULL .  1012))
+      ((default . error) (COLON_EQUAL .  1010) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1008) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1006) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (SEMICOLON .  1005))
+      ((default . error) (SEMICOLON .  1004))
+      ((default . error) (SEMICOLON .  1003))
+      ((default . error) (SEMICOLON .  1002))
+      ((default . error) (RIGHT_PAREN .  1001))
+      ((default . error) (RIGHT_PAREN .  1000))
+      ((default . error) (SEMICOLON .  999))
+      ((default . error) (RIGHT_PAREN .  998))
       ((default . error) (SEMICOLON . (name_opt . 0)) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (END . (package_body . 1)) (BEGIN . (package_body . 
1)) (ENTRY . (package_body . 1)) (FOR . (package_body . 1)) (PROTECTED . 
(package_body . 1)) (SUBTYPE . (package_body . 1)) (TASK . (package_body . 1)) 
(TYPE . (package_body . 1)) (IDENTIFIER . (package_body . 1)) (WITH . 
(package_body . 1)) (USE . (package_body . 1)) (SEPARATE . (package_body . 1)) 
(PROCEDURE . (package_body . 1)) (PRIVATE . (package_body . 1)) (PRAGMA . 
(package_body . 1)) (PACKAGE . (package_ [...]
+      ((default . error) (THEN . (range . 0)) (RANGE . (range . 0)) (DIGITS . 
(range . 0)) (ELSE . (range . 0)) (ELSIF . (range . 0)) (DO . (range . 0)) 
(LOOP . (range . 0)) (XOR . (range . 0)) (OR . (range . 0)) (AND . (range . 0)) 
(WITH . (range . 0)) (IS . (range . 0)) (SEMICOLON . (range . 0)) (COLON_EQUAL 
. (range . 0)) (OF . (range . 0)) (BAR . (range . 0)) (EQUAL_GREATER . (range . 
0)) (RIGHT_PAREN . (range . 0)) (COMMA . (range . 0)))
       ((default . error) (LOOP . (aggregate . 3)) (DO . (aggregate . 3)) (OF . 
(aggregate . 3)) (ACCEPT . (aggregate . 3)) (ABORT . (aggregate . 3)) (BEGIN . 
(aggregate . 3)) (CASE . (aggregate . 3)) (DECLARE . (aggregate . 3)) (DELAY . 
(aggregate . 3)) (EXIT . (aggregate . 3)) (FOR . (aggregate . 3)) (GOTO . 
(aggregate . 3)) (IF . (aggregate . 3)) (NULL . (aggregate . 3)) (PRAGMA . 
(aggregate . 3)) (RAISE . (aggregate . 3)) (REQUEUE . (aggregate . 3)) (SELECT 
. (aggregate . 3)) (WHILE . [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (ELSIF . (elsif_expression_list . 1)) (ELSE . 
(elsif_expression_list . 1)) (RIGHT_PAREN . (elsif_expression_list . 1)) (COMMA 
. (elsif_expression_list . 1)))
-      ((default . error) (THEN .  1004))
-      ((default . error) (RIGHT_PAREN . (if_expression . 2)) (COMMA . 
(if_expression . 2)))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ELSIF . (elsif_expression_list . 1)) (ELSE . 
(elsif_expression_list . 1)) (RIGHT_PAREN . (elsif_expression_list . 1)))
+      ((default . error) (THEN .  995))
+      ((default . error) (RIGHT_PAREN . (if_expression . 2)))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (LOOP . (iterator_specification . 0)) (EQUAL_GREATER 
. (iterator_specification . 0)))
       ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (MOD . (primary . 1)) 
(REM . (primary . 1)) (SLASH . (primary . 1)) (STAR . (primary . 1)) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 4)) (EQUAL_GREATER . (iterator_specification . 4)) 
(LEFT_PAREN .  107))
-      ((default . error) (REVERSE .  1001) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (REVERSE .  992) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (COMMA . (expression_opt . 0)) (RIGHT_PAREN . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (case_expression_alternative_list . 
1)) (COMMA . (case_expression_alternative_list . 1)))
-      ((default . error) (END . (protected_operation_item_list_opt . 0)) 
(ENTRY .  988) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  299))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  183) (STRING_LITERAL .  49) (RAISE .  152) (PLUS .  154) 
(MINUS .  153) (ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (END . (protected_operation_item_list_opt . 0)) 
(ENTRY .  979) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  269))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (FOR .  146) (CASE .  145) (IF .  147) (RIGHT_PAREN . 
((expression_opt . 0) (association_opt . 0))) (COMMA . ((expression_opt . 0) 
(association_opt . 0))) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  157) (STRING_LITERAL .  49) (RAISE .  153) (PLUS .  155) 
(MINUS .  154) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) 
(NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (SEMICOLON . (actual_parameter_part_opt . 1)) 
(LEFT_PAREN . (actual_parameter_part_opt . 1)) (DO . (actual_parameter_part_opt 
. 1)))
-      ((default . error) (DO . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  810))
+      ((default . error) (DO . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  801))
       ((default . error) (OR . (simple_statement . 8)) (THEN . 
(simple_statement . 8)) (WHEN . (simple_statement . 8)) (EXCEPTION . 
(simple_statement . 8)) (END . (simple_statement . 8)) (LESS_LESS . 
(simple_statement . 8)) (ACCEPT . (simple_statement . 8)) (ABORT . 
(simple_statement . 8)) (BEGIN . (simple_statement . 8)) (CASE . 
(simple_statement . 8)) (DECLARE . (simple_statement . 8)) (DELAY . 
(simple_statement . 8)) (EXIT . (simple_statement . 8)) (FOR . 
(simple_statement . 8)) (GOTO [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (WHEN .  982))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (WHEN .  973))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (WHEN . (delay_statement . 1)) (EXCEPTION . 
(delay_statement . 1)) (ELSIF . (delay_statement . 1)) (THEN . (delay_statement 
. 1)) (ELSE . (delay_statement . 1)) (OR . (delay_statement . 1)) (END . 
(delay_statement . 1)) (ACCEPT . (delay_statement . 1)) (ABORT . 
(delay_statement . 1)) (BEGIN . (delay_statement . 1)) (CASE . (delay_statement 
. 1)) (DECLARE . (delay_statement . 1)) (DELAY . (delay_statement . 1)) (EXIT . 
(delay_statement . 1)) (FOR . (delay_statemen [...]
-      ((default . error) (SEMICOLON .  980))
-      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  152) 
(PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  971))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (OR . (exit_statement . 1)) (THEN . (exit_statement . 
1)) (WHEN . (exit_statement . 1)) (EXCEPTION . (exit_statement . 1)) (END . 
(exit_statement . 1)) (LESS_LESS . (exit_statement . 1)) (ACCEPT . 
(exit_statement . 1)) (ABORT . (exit_statement . 1)) (BEGIN . (exit_statement . 
1)) (CASE . (exit_statement . 1)) (DECLARE . (exit_statement . 1)) (DELAY . 
(exit_statement . 1)) (EXIT . (exit_statement . 1)) (FOR . (exit_statement . 
1)) (GOTO . (exit_statement . 1)) (IF [...]
       ((default . error) (OR . (simple_statement . 3)) (THEN . 
(simple_statement . 3)) (WHEN . (simple_statement . 3)) (EXCEPTION . 
(simple_statement . 3)) (END . (simple_statement . 3)) (LESS_LESS . 
(simple_statement . 3)) (ACCEPT . (simple_statement . 3)) (ABORT . 
(simple_statement . 3)) (BEGIN . (simple_statement . 3)) (CASE . 
(simple_statement . 3)) (DECLARE . (simple_statement . 3)) (DELAY . 
(simple_statement . 3)) (EXIT . (simple_statement . 3)) (FOR . 
(simple_statement . 3)) (GOTO [...]
-      ((default . error) (ELSIF . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
-      ((default . error) (LOOP .  977))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (ELSIF . (sequence_of_statements_opt . 0)) (ELSE . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
+      ((default . error) (LOOP .  968))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (OR . (raise_statement . 2)) (THEN . (raise_statement 
. 2)) (WHEN . (raise_statement . 2)) (EXCEPTION . (raise_statement . 2)) (END . 
(raise_statement . 2)) (LESS_LESS . (raise_statement . 2)) (ACCEPT . 
(raise_statement . 2)) (ABORT . (raise_statement . 2)) (BEGIN . 
(raise_statement . 2)) (CASE . (raise_statement . 2)) (DECLARE . 
(raise_statement . 2)) (DELAY . (raise_statement . 2)) (EXIT . (raise_statement 
. 2)) (FOR . (raise_statement . 2)) (GOTO . (raise_stat [...]
-      ((default . error) (ABORT .  975))
+      ((default . error) (ABORT .  966))
       ((default . error) (OR . (requeue_statement . 1)) (THEN . 
(requeue_statement . 1)) (WHEN . (requeue_statement . 1)) (EXCEPTION . 
(requeue_statement . 1)) (END . (requeue_statement . 1)) (LESS_LESS . 
(requeue_statement . 1)) (ACCEPT . (requeue_statement . 1)) (ABORT . 
(requeue_statement . 1)) (BEGIN . (requeue_statement . 1)) (CASE . 
(requeue_statement . 1)) (DECLARE . (requeue_statement . 1)) (DELAY . 
(requeue_statement . 1)) (EXIT . (requeue_statement . 1)) (FOR . 
(requeue_stateme [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (OR . (extended_return_statement . 1)) (THEN . 
(extended_return_statement . 1)) (WHEN . (extended_return_statement . 1)) 
(EXCEPTION . (extended_return_statement . 1)) (END . (extended_return_statement 
. 1)) (LESS_LESS . (extended_return_statement . 1)) (ACCEPT . 
(extended_return_statement . 1)) (ABORT . (extended_return_statement . 1)) 
(BEGIN . (extended_return_statement . 1)) (CASE . (extended_return_statement . 
1)) (DECLARE . (extended_return_statement . 1)) (D [...]
       ((default . error) (OR . (simple_return_statement . 1)) (THEN . 
(simple_return_statement . 1)) (WHEN . (simple_return_statement . 1)) 
(EXCEPTION . (simple_return_statement . 1)) (END . (simple_return_statement . 
1)) (LESS_LESS . (simple_return_statement . 1)) (ACCEPT . 
(simple_return_statement . 1)) (ABORT . (simple_return_statement . 1)) (BEGIN . 
(simple_return_statement . 1)) (CASE . (simple_return_statement . 1)) (DECLARE 
. (simple_return_statement . 1)) (DELAY . (simple_return_ [...]
-      ((default . error) (CONSTANT . (aliased_opt . 0)) (ACCESS . (aliased_opt 
. 0)) (NOT . (aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) 
(STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) 
(ALIASED .  531))
-      ((default . error) (ABORT .  972))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (SELECT .  970))
-      ((default . error) (WHEN .  693) (TERMINATE .  692) (ACCEPT .  630) 
(DELAY .  635))
+      ((default . error) (CONSTANT . (aliased_opt . 0)) (ACCESS . (aliased_opt 
. 0)) (NOT . (aliased_opt . 0)) (IDENTIFIER . (aliased_opt . 0)) 
(STRING_LITERAL . (aliased_opt . 0)) (CHARACTER_LITERAL . (aliased_opt . 0)) 
(ALIASED .  523))
+      ((default . error) (ABORT .  963))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (SELECT .  961))
+      ((default . error) (WHEN .  685) (TERMINATE .  684) (ACCEPT .  622) 
(DELAY .  627))
       ((default . error) (OR . (entry_call_alternative . 0)) (ELSE . 
(entry_call_alternative . 0)) (THEN . (triggering_alternative . 0)))
       ((default . error) (OR . (entry_call_alternative . 1)) (ELSE . 
(entry_call_alternative . 1)) (THEN . (triggering_alternative . 1)))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (DELAY .  635))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (DELAY .  627))
       ((default . error) (OR . (delay_alternative . 0)) (END . 
(delay_alternative . 0)) (ELSE . (delay_alternative . 0)) (THEN . 
(triggering_alternative . 2)))
       ((default . error) (END . (select_alternative . 1)) (OR . 
(select_alternative . 1)) (ELSE . (select_alternative . 1)))
-      ((default . error) (EQUAL_GREATER .  965))
+      ((default . error) (EQUAL_GREATER .  956))
       ((default . error) (END . (select_alternative . 5)) (OR . 
(select_alternative . 5)) (ELSE . (select_alternative . 5)))
       ((default . error) (OR . (goto_label . 0)) (THEN . (goto_label . 0)) 
(WHEN . (goto_label . 0)) (LESS_LESS . (goto_label . 0)) (END . (goto_label . 
0)) (EXCEPTION . (goto_label . 0)) (ELSE . (goto_label . 0)) (ELSIF . 
(goto_label . 0)) (CHARACTER_LITERAL . (goto_label . 0)) (STRING_LITERAL . 
(goto_label . 0)) (IDENTIFIER . (goto_label . 0)) (REQUEUE . (goto_label . 0)) 
(RAISE . (goto_label . 0)) (PRAGMA . (goto_label . 0)) (NULL . (goto_label . 
0)) (GOTO . (goto_label . 0)) (EXIT .  [...]
-      ((default . error) (SEMICOLON .  964))
-      ((default . error) (END .  963))
-      ((default . error) (SEMICOLON .  962))
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  958) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (SEMICOLON .  955))
+      ((default . error) (END .  954))
+      ((default . error) (SEMICOLON .  953))
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  949) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (END . (exception_handler_list . 0)) (WHEN . 
(exception_handler_list . 0)))
-      ((default . error) (END . (exception_handler_list_opt . 1)) (WHEN .  
952))
+      ((default . error) (END . (exception_handler_list_opt . 1)) (WHEN .  
943))
       ((default . error) (END . (handled_sequence_of_statements . 0)))
       ((default . error) (WHEN . (exception_handler_list . 1)) (END . 
(exception_handler_list . 1)))
       ((default . error) (BAR . (exception_choice . 1)) (EQUAL_GREATER . 
(exception_choice . 1)))
-      ((default . error) (COLON .  1184) (EQUAL_GREATER . (name . 0)) (BAR . 
(name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
+      ((default . error) (COLON .  1175) (EQUAL_GREATER . (name . 0)) (BAR . 
(name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0)))
       ((default . error) (EQUAL_GREATER . (exception_choice_list . 0)) (BAR . 
(exception_choice_list . 0)))
-      ((default . error) (BAR .  1182) (EQUAL_GREATER .  1183))
+      ((default . error) (BAR .  1173) (EQUAL_GREATER .  1174))
       ((default . error) (DOT .  90) (BAR . (exception_choice . 0)) 
(EQUAL_GREATER . (exception_choice . 0)) (TICK .  91) (LEFT_PAREN .  107))
       ((default . error) (WHEN . (assignment_statement . 0)) (THEN . 
(assignment_statement . 0)) (OR . (assignment_statement . 0)) (ELSIF . 
(assignment_statement . 0)) (ELSE . (assignment_statement . 0)) 
(CHARACTER_LITERAL . (assignment_statement . 0)) (STRING_LITERAL . 
(assignment_statement . 0)) (IDENTIFIER . (assignment_statement . 0)) (WHILE . 
(assignment_statement . 0)) (SELECT . (assignment_statement . 0)) (RETURN . 
(assignment_statement . 0)) (REQUEUE . (assignment_statement . 0)) [...]
-      ((default . error) (LOOP .  1181))
+      ((default . error) (LOOP .  1172))
       ((default . error) (IDENTIFIER . (subprogram_body . 0)) (TYPE . 
(subprogram_body . 0)) (TASK . (subprogram_body . 0)) (SUBTYPE . 
(subprogram_body . 0)) (PROTECTED . (subprogram_body . 0)) (FOR . 
(subprogram_body . 0)) (ENTRY . (subprogram_body . 0)) (BEGIN . 
(subprogram_body . 0)) (END . (subprogram_body . 0)) ($EOI . (subprogram_body . 
0)) (FUNCTION . (subprogram_body . 0)) (GENERIC . (subprogram_body . 0)) 
(LIMITED . (subprogram_body . 0)) (NOT . (subprogram_body . 0)) (OVERRIDIN [...]
-      ((default . error) (TERMINATE .  1178) (ACCEPT .  630) (DELAY .  635))
-      ((default . error) (END .  1177))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
-      ((default . error) (END .  1175))
+      ((default . error) (TERMINATE .  1169) (ACCEPT .  622) (DELAY .  627))
+      ((default . error) (END .  1168))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (ELSE . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (END .  1166))
       ((default . error) (ELSE . (select_alternative_list . 1)) (END . 
(select_alternative_list . 1)) (OR . (select_alternative_list . 1)))
-      ((default . error) (SEMICOLON .  1174))
-      ((default . error) (END .  1173))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (ACCESS . (constant_opt . 0)) (NOT . (constant_opt . 
0)) (IDENTIFIER . (constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) 
(CHARACTER_LITERAL . (constant_opt . 0)) (CONSTANT .  759))
-      ((default . error) (END .  1170))
-      ((default . error) (SEMICOLON .  1169))
-      ((default . error) (SEMICOLON .  1168))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (ELSE .  1162) (END .  1164) (ELSIF .  1163))
-      ((default . error) (SEMICOLON .  1161))
+      ((default . error) (SEMICOLON .  1165))
+      ((default . error) (END .  1164))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (ACCESS . (constant_opt . 0)) (NOT . (constant_opt . 
0)) (IDENTIFIER . (constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) 
(CHARACTER_LITERAL . (constant_opt . 0)) (CONSTANT .  753))
+      ((default . error) (END .  1161))
+      ((default . error) (SEMICOLON .  1160))
+      ((default . error) (SEMICOLON .  1159))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (ELSE .  1153) (END .  1155) (ELSIF .  1154))
+      ((default . error) (SEMICOLON .  1152))
       ((default . error) (WHEN . (delay_statement . 0)) (ELSIF . 
(delay_statement . 0)) (EXCEPTION . (delay_statement . 0)) (CHARACTER_LITERAL . 
(delay_statement . 0)) (STRING_LITERAL . (delay_statement . 0)) (IDENTIFIER . 
(delay_statement . 0)) (LESS_LESS . (delay_statement . 0)) (WHILE . 
(delay_statement . 0)) (SELECT . (delay_statement . 0)) (RETURN . 
(delay_statement . 0)) (REQUEUE . (delay_statement . 0)) (RAISE . 
(delay_statement . 0)) (PRAGMA . (delay_statement . 0)) (NULL . (dela [...]
-      ((default . error) (END .  1160))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (END .  1151))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
       ((default . error) (END . (case_statement_alternative_list . 0)) (WHEN . 
(case_statement_alternative_list . 0)))
-      ((default . error) (END .  1157) (WHEN .  982))
-      ((default . error) (SEMICOLON .  1156))
-      ((default . error) (DO .  1154) (SEMICOLON .  1155))
-      ((default . error) (BEGIN .  1153))
-      ((default . error) (IDENTIFIER .  1152))
+      ((default . error) (END .  1148) (WHEN .  973))
+      ((default . error) (SEMICOLON .  1147))
+      ((default . error) (DO .  1145) (SEMICOLON .  1146))
+      ((default . error) (BEGIN .  1144))
+      ((default . error) (IDENTIFIER .  1143))
       ((default . error) (PROCEDURE . (protected_operation_item . 5)) 
(OVERRIDING . (protected_operation_item . 5)) (NOT . (protected_operation_item 
. 5)) (FUNCTION . (protected_operation_item . 5)) (FOR . 
(protected_operation_item . 5)) (ENTRY . (protected_operation_item . 5)) (END . 
(protected_operation_item . 5)))
       ((default . error) (PROCEDURE . (protected_operation_item . 2)) 
(OVERRIDING . (protected_operation_item . 2)) (NOT . (protected_operation_item 
. 2)) (FUNCTION . (protected_operation_item . 2)) (FOR . 
(protected_operation_item . 2)) (ENTRY . (protected_operation_item . 2)) (END . 
(protected_operation_item . 2)))
       ((default . error) (PROCEDURE . (protected_operation_item . 3)) 
(OVERRIDING . (protected_operation_item . 3)) (NOT . (protected_operation_item 
. 3)) (FUNCTION . (protected_operation_item . 3)) (FOR . 
(protected_operation_item . 3)) (ENTRY . (protected_operation_item . 3)) (END . 
(protected_operation_item . 3)))
       ((default . error) (PROCEDURE . (protected_operation_item . 4)) 
(OVERRIDING . (protected_operation_item . 4)) (NOT . (protected_operation_item 
. 4)) (FUNCTION . (protected_operation_item . 4)) (FOR . 
(protected_operation_item . 4)) (ENTRY . (protected_operation_item . 4)) (END . 
(protected_operation_item . 4)))
       ((default . error) (FUNCTION .  1) (PROCEDURE .  9))
       ((default . error) (END . (protected_operation_item_list . 0)) (ENTRY . 
(protected_operation_item_list . 0)) (FOR . (protected_operation_item_list . 
0)) (FUNCTION . (protected_operation_item_list . 0)) (NOT . 
(protected_operation_item_list . 0)) (OVERRIDING . 
(protected_operation_item_list . 0)) (PROCEDURE . 
(protected_operation_item_list . 0)))
-      ((default . error) (END . (protected_operation_item_list_opt . 1)) 
(ENTRY .  988) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  299))
-      ((default . error) (END .  1149))
+      ((default . error) (END . (protected_operation_item_list_opt . 1)) 
(ENTRY .  979) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(FOR .  269))
+      ((default . error) (END .  1140))
       ((default . error) (PROCEDURE . (protected_operation_item . 1)) 
(OVERRIDING . (protected_operation_item . 1)) (NOT . (protected_operation_item 
. 1)) (FUNCTION . (protected_operation_item . 1)) (FOR . 
(protected_operation_item . 1)) (ENTRY . (protected_operation_item . 1)) (END . 
(protected_operation_item . 1)))
       ((default . error) (PROCEDURE . (protected_operation_item . 0)) 
(OVERRIDING . (protected_operation_item . 0)) (NOT . (protected_operation_item 
. 0)) (FUNCTION . (protected_operation_item . 0)) (FOR . 
(protected_operation_item . 0)) (ENTRY . (protected_operation_item . 0)) (END . 
(protected_operation_item . 0)))
       ((default . error) (COMMA . (case_expression_alternative . 0)) 
(RIGHT_PAREN . (case_expression_alternative . 0)))
-      ((default . error) (DO . (subtype_indication . 1)) (LOOP . 
(subtype_indication . 1)) (COLON_EQUAL . (subtype_indication . 1)) (SEMICOLON . 
(subtype_indication . 1)) (OF . (subtype_indication . 1)) (AND . 
(subtype_indication . 1)) (WITH . (subtype_indication . 1)) (EQUAL_GREATER . 
(subtype_indication . 1)) (COMMA . (subtype_indication . 1)) (RIGHT_PAREN . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (RANGE .  904) (LEFT_PAREN . 
 829))
+      ((default . error) (DO . (subtype_indication . 1)) (LOOP . 
(subtype_indication . 1)) (COLON_EQUAL . (subtype_indication . 1)) (SEMICOLON . 
(subtype_indication . 1)) (OF . (subtype_indication . 1)) (AND . 
(subtype_indication . 1)) (WITH . (subtype_indication . 1)) (EQUAL_GREATER . 
(subtype_indication . 1)) (COMMA . (subtype_indication . 1)) (RIGHT_PAREN . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (RANGE .  895) (LEFT_PAREN . 
 820))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 3)) (EQUAL_GREATER . (iterator_specification . 3)) 
(LEFT_PAREN .  107))
       ((default . error) (DO . (constraint . 0)) (LOOP . (constraint . 0)) (OF 
. (constraint . 0)) (AND . (constraint . 0)) (SEMICOLON . (constraint . 0)) 
(WITH . (constraint . 0)) (COLON_EQUAL . (constraint . 0)) (EQUAL_GREATER . 
(constraint . 0)) (RIGHT_PAREN . (constraint . 0)) (COMMA . (constraint . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA . (if_expression . 0)) (RIGHT_PAREN . 
(if_expression . 0)))
-      ((default . error) (SEMICOLON .  1145))
-      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  810))
+      ((default . error) (ELSE . (expression_opt . 0)) (ELSIF . 
(expression_opt . 0)) (RIGHT_PAREN . (expression_opt . 0)) (RAISE .  153) (PLUS 
.  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL 
.  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (if_expression . 0)))
+      ((default . error) (SEMICOLON .  1136))
+      ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . 
(parameter_profile_opt . 0)) (LEFT_PAREN .  801))
       ((default . error) (IDENTIFIER . (entry_declaration . 1)) (USE . 
(entry_declaration . 1)) (TYPE . (entry_declaration . 1)) (TASK . 
(entry_declaration . 1)) (SUBTYPE . (entry_declaration . 1)) (PROTECTED . 
(entry_declaration . 1)) (PROCEDURE . (entry_declaration . 1)) (PRAGMA . 
(entry_declaration . 1)) (PACKAGE . (entry_declaration . 1)) (OVERRIDING . 
(entry_declaration . 1)) (NOT . (entry_declaration . 1)) (GENERIC . 
(entry_declaration . 1)) (FUNCTION . (entry_declaration . 1)) (FO [...]
       ((default . error) (WITH . (paren_expression . 0)) (SEMICOLON . 
(paren_expression . 0)))
       ((default . error) (WITH . (paren_expression . 1)) (SEMICOLON . 
(paren_expression . 1)))
@@ -2832,129 +2823,129 @@
       ((default . error) (IDENTIFIER . (null_procedure_declaration . 0)) (USE 
. (null_procedure_declaration . 0)) (TYPE . (null_procedure_declaration . 0)) 
(TASK . (null_procedure_declaration . 0)) (SUBTYPE . 
(null_procedure_declaration . 0)) (PROTECTED . (null_procedure_declaration . 
0)) (PROCEDURE . (null_procedure_declaration . 0)) (PRAGMA . 
(null_procedure_declaration . 0)) (PACKAGE . (null_procedure_declaration . 0)) 
(OVERRIDING . (null_procedure_declaration . 0)) (NOT . (null_proce [...]
       ((default . error) (IDENTIFIER . (abstract_subprogram_declaration . 0)) 
(USE . (abstract_subprogram_declaration . 0)) (TYPE . 
(abstract_subprogram_declaration . 0)) (TASK . (abstract_subprogram_declaration 
. 0)) (SUBTYPE . (abstract_subprogram_declaration . 0)) (PROTECTED . 
(abstract_subprogram_declaration . 0)) (PROCEDURE . 
(abstract_subprogram_declaration . 0)) (PRAGMA . 
(abstract_subprogram_declaration . 0)) (PACKAGE . 
(abstract_subprogram_declaration . 0)) (OVERRIDING . (abstra [...]
       ((default . error) (IDENTIFIER . (subprogram_body_stub . 0)) (USE . 
(subprogram_body_stub . 0)) (TYPE . (subprogram_body_stub . 0)) (TASK . 
(subprogram_body_stub . 0)) (SUBTYPE . (subprogram_body_stub . 0)) (PROTECTED . 
(subprogram_body_stub . 0)) (PROCEDURE . (subprogram_body_stub . 0)) (PRAGMA . 
(subprogram_body_stub . 0)) (PACKAGE . (subprogram_body_stub . 0)) (OVERRIDING 
. (subprogram_body_stub . 0)) (NOT . (subprogram_body_stub . 0)) (GENERIC . 
(subprogram_body_stub . 0)) (FUN [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1142))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1140))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1138))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1133))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1131))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1129))
       ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (BEGIN . (declaration . 9)) (ENTRY . (declaration . 
9)) (FOR . (declaration . 9)) (FUNCTION . (declaration . 9)) (GENERIC . 
(declaration . 9)) (NOT . (declaration . 9)) (OVERRIDING . (declaration . 9)) 
(PACKAGE . (declaration . 9)) (PRAGMA . (declaration . 9)) (PROCEDURE . 
(declaration . 9)) (PROTECTED . (declaration . 9)) (SUBTYPE . (declaration . 
9)) (TASK . (declaration . 9)) (TYPE . (declaration . 9)) (USE . (declaration . 
9)) (IDENTIFIER . (declaration . 9)) [...]
       ((default . error) (DOT .  90) (TICK .  91) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109) (LEFT_PAREN .  107))
-      ((default . error) (SEMICOLON .  1136))
-      ((default . error) (SEMICOLON .  1135))
-      ((default . error) (SEMICOLON .  1134))
+      ((default . error) (SEMICOLON .  1127))
+      ((default . error) (SEMICOLON .  1126))
+      ((default . error) (SEMICOLON .  1125))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (WITH . (record_type_definition . 0)) (SEMICOLON . 
(record_type_definition . 0)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (NOT .  731) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
+      ((default . error) (NOT .  723) (IDENTIFIER .  48) (CHARACTER_LITERAL .  
50) (STRING_LITERAL .  49))
       ((default . error) (BEGIN . (incomplete_type_declaration . 0)) (ENTRY . 
(incomplete_type_declaration . 0)) (FOR . (incomplete_type_declaration . 0)) 
(FUNCTION . (incomplete_type_declaration . 0)) (GENERIC . 
(incomplete_type_declaration . 0)) (NOT . (incomplete_type_declaration . 0)) 
(OVERRIDING . (incomplete_type_declaration . 0)) (PACKAGE . 
(incomplete_type_declaration . 0)) (PRAGMA . (incomplete_type_declaration . 0)) 
(PROCEDURE . (incomplete_type_declaration . 0)) (PROTECTED . ( [...]
-      ((default . error) (IS . (direct_name_opt . 0)) (IDENTIFIER .  1127) 
(STRING_LITERAL .  1128))
-      ((default . error) (SEMICOLON .  1126))
+      ((default . error) (IS . (direct_name_opt . 0)) (IDENTIFIER .  1118) 
(STRING_LITERAL .  1119))
+      ((default . error) (SEMICOLON .  1117))
       ((default . error) (WHEN . (component_item . 1)) (END . (component_item 
. 1)) (IDENTIFIER . (component_item . 1)) (FOR . (component_item . 1)) (CASE . 
(component_item . 1)))
       ((default . error) (WHEN . (component_item . 0)) (END . (component_item 
. 0)) (IDENTIFIER . (component_item . 0)) (FOR . (component_item . 0)) (CASE . 
(component_item . 0)))
       ((default . error) (WHEN . (component_list . 0)) (END . (component_list 
. 0)) (CASE . (component_list . 0)) (FOR . (component_list . 0)) (IDENTIFIER . 
(component_list . 0)))
-      ((default . error) (WHEN . (component_list_opt . 1)) (END . 
(component_list_opt . 1)) (CASE .  1032) (IDENTIFIER .  77) (FOR .  299))
-      ((default . error) (END .  1123))
-      ((default . error) (COMMA .  96) (COLON .  1122))
+      ((default . error) (WHEN . (component_list_opt . 1)) (END . 
(component_list_opt . 1)) (CASE .  1023) (IDENTIFIER .  77) (FOR .  269))
+      ((default . error) (END .  1114))
+      ((default . error) (COMMA .  96) (COLON .  1113))
       ((default . error) (WHEN . (component_list . 3)) (END . (component_list 
. 3)) (CASE . (component_list . 3)) (FOR . (component_list . 3)) (IDENTIFIER . 
(component_list . 3)))
-      ((default . error) (DOT_DOT .  1121))
+      ((default . error) (DOT_DOT .  1112))
       ((default . error) (SEMICOLON . (record_definition . 1)) (WITH . 
(record_definition . 1)))
       ((default . error) (SEMICOLON . (type_definition . 2)) (WITH . 
(type_definition . 2)))
       ((default . error) (COMMA . (enumeration_literal . 0)) (RIGHT_PAREN . 
(enumeration_literal . 0)))
       ((default . error) (COMMA . (enumeration_literal . 1)) (RIGHT_PAREN . 
(enumeration_literal . 1)))
       ((default . error) (RIGHT_PAREN . (enumeration_literal_list . 0)) (COMMA 
. (enumeration_literal_list . 0)))
-      ((default . error) (COMMA .  1120) (RIGHT_PAREN .  1119))
-      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1116))
-      ((default . error) (DIGITS .  1115) (WITH . 
(real_range_specification_opt . 0)) (SEMICOLON . (real_range_specification_opt 
. 0)) (RANGE .  1116))
+      ((default . error) (COMMA .  1111) (RIGHT_PAREN .  1110))
+      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1107))
+      ((default . error) (DIGITS .  1106) (WITH . 
(real_range_specification_opt . 0)) (SEMICOLON . (real_range_specification_opt 
. 0)) (RANGE .  1107))
       ((default . error) (NEW . ((abstract_limited_synchronized_opt . 1) 
(abstract_limited_opt . 1))))
-      ((default . error) (SEMICOLON .  1114))
-      ((default . error) (NEW .  1112) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (SEMICOLON .  1105))
+      ((default . error) (NEW .  1103) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (IDENTIFIER . (task_type_declaration . 2)) (USE . 
(task_type_declaration . 2)) (TYPE . (task_type_declaration . 2)) (TASK . 
(task_type_declaration . 2)) (SUBTYPE . (task_type_declaration . 2)) (PROTECTED 
. (task_type_declaration . 2)) (PROCEDURE . (task_type_declaration . 2)) 
(PRAGMA . (task_type_declaration . 2)) (PACKAGE . (task_type_declaration . 2)) 
(OVERRIDING . (task_type_declaration . 2)) (NOT . (task_type_declaration . 2)) 
(GENERIC . (task_type_declaratio [...]
       ((default . error) (BEGIN . (single_task_declaration . 1)) (ENTRY . 
(single_task_declaration . 1)) (FOR . (single_task_declaration . 1)) (FUNCTION 
. (single_task_declaration . 1)) (GENERIC . (single_task_declaration . 1)) (NOT 
. (single_task_declaration . 1)) (OVERRIDING . (single_task_declaration . 1)) 
(PACKAGE . (single_task_declaration . 1)) (PRAGMA . (single_task_declaration . 
1)) (PROCEDURE . (single_task_declaration . 1)) (PROTECTED . 
(single_task_declaration . 1)) (SUBTYPE . [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (AND .  1080) (WITH .  1109))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (AND .  1071) (WITH .  1100))
       ((default . error) (IDENTIFIER . (subtype_declaration . 0)) (USE . 
(subtype_declaration . 0)) (TYPE . (subtype_declaration . 0)) (TASK . 
(subtype_declaration . 0)) (SUBTYPE . (subtype_declaration . 0)) (PROTECTED . 
(subtype_declaration . 0)) (PROCEDURE . (subtype_declaration . 0)) (PRAGMA . 
(subtype_declaration . 0)) (PACKAGE . (subtype_declaration . 0)) (OVERRIDING . 
(subtype_declaration . 0)) (NOT . (subtype_declaration . 0)) (GENERIC . 
(subtype_declaration . 0)) (FUNCTION . (sub [...]
-      ((default . error) (SEMICOLON .  1108))
-      ((default . error) (NEW .  1106) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED 
.  301) (TASK .  303) (PACKAGE .  300))
+      ((default . error) (SEMICOLON .  1099))
+      ((default . error) (NEW .  1097) (END . (declarative_part_opt . 0)) 
(PRIVATE . (declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  
7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) 
(PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt 
. 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED 
.  271) (TASK .  273) (PACKAGE .  270))
       ((default . error) (BEGIN . (single_protected_declaration . 1)) (ENTRY . 
(single_protected_declaration . 1)) (FOR . (single_protected_declaration . 1)) 
(FUNCTION . (single_protected_declaration . 1)) (GENERIC . 
(single_protected_declaration . 1)) (NOT . (single_protected_declaration . 1)) 
(OVERRIDING . (single_protected_declaration . 1)) (PACKAGE . 
(single_protected_declaration . 1)) (PRAGMA . (single_protected_declaration . 
1)) (PROCEDURE . (single_protected_declaration . 1)) (PRO [...]
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (AND .  1080) (WITH .  1103))
-      ((default . error) (SEMICOLON .  1102))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (END . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (AND .  1071) (WITH .  1094))
+      ((default . error) (SEMICOLON .  1093))
       ((default . error) (WHEN . (at_clause . 0)) (BEGIN . (at_clause . 0)) 
(ENTRY . (at_clause . 0)) (FOR . (at_clause . 0)) (FUNCTION . (at_clause . 0)) 
(GENERIC . (at_clause . 0)) (NOT . (at_clause . 0)) (OVERRIDING . (at_clause . 
0)) (PACKAGE . (at_clause . 0)) (PRAGMA . (at_clause . 0)) (PROCEDURE . 
(at_clause . 0)) (PROTECTED . (at_clause . 0)) (SUBTYPE . (at_clause . 0)) 
(TASK . (at_clause . 0)) (TYPE . (at_clause . 0)) (USE . (at_clause . 0)) 
(IDENTIFIER . (at_clause . 0)) (CASE  [...]
-      ((default . error) (AT .  1101))
+      ((default . error) (AT .  1092))
       ((default . error) (END . (component_clause_list . 0)) (IDENTIFIER . 
(component_clause_list . 0)))
-      ((default . error) (END .  1099) (IDENTIFIER .  1067))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (END .  1090) (IDENTIFIER .  1058))
+      ((default . error) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) 
(PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) 
(NULL .  151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (RIGHT_PAREN . (discrete_subtype_definition_list . 
1)) (COMMA . (discrete_subtype_definition_list . 1)))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
       ((default . error) (RIGHT_PAREN . (index_subtype_definition_list . 1)) 
(COMMA . (index_subtype_definition_list . 1)))
-      ((default . error) (DOT .  90) (RANGE .  1096) (TICK .  91) (LEFT_PAREN 
.  107))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
+      ((default . error) (DOT .  90) (RANGE .  1087) (TICK .  91) (LEFT_PAREN 
.  107))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
       ((default . error) (COMMA . (index_subtype_definition . 0)) (RIGHT_PAREN 
. (index_subtype_definition . 0)))
-      ((default . error) (NUMERIC_LITERAL .  155) (NULL .  1091) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (COMMA .  836) (RIGHT_PAREN .  1090))
+      ((default . error) (NUMERIC_LITERAL .  156) (NULL .  1082) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
+      ((default . error) (COMMA .  827) (RIGHT_PAREN .  1081))
       ((default . error) (BAR . (discrete_choice . 2)) (EQUAL_GREATER . 
(discrete_choice . 2)) (RIGHT_PAREN . ((range_list . 0) 
(discrete_subtype_definition . 1))) (COMMA . ((range_list . 0) 
(discrete_subtype_definition . 1))))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (PRIVATE .  1088))
-      ((default . error) (AND .  1080) (WITH . (and_interface_list_opt . 1)) 
(SEMICOLON . (and_interface_list_opt . 1)))
+      ((default . error) (PRIVATE .  1079))
+      ((default . error) (AND .  1071) (WITH . (and_interface_list_opt . 1)) 
(SEMICOLON . (and_interface_list_opt . 1)))
       ((default . error) (WITH . (formal_package_actual_part . 0)) (SEMICOLON 
. (formal_package_actual_part . 0)))
       ((default . error) (PACKAGE . (formal_package_declaration . 0)) 
(PROCEDURE . (formal_package_declaration . 0)) (FUNCTION . 
(formal_package_declaration . 0)) (PRAGMA . (formal_package_declaration . 0)) 
(TYPE . (formal_package_declaration . 0)) (USE . (formal_package_declaration . 
0)) (WITH . (formal_package_declaration . 0)) (IDENTIFIER . 
(formal_package_declaration . 0)))
       ((default . error) (PACKAGE . (formal_object_declaration . 0)) 
(PROCEDURE . (formal_object_declaration . 0)) (FUNCTION . 
(formal_object_declaration . 0)) (PRAGMA . (formal_object_declaration . 0)) 
(TYPE . (formal_object_declaration . 0)) (USE . (formal_object_declaration . 
0)) (WITH . (formal_object_declaration . 0)) (IDENTIFIER . 
(formal_object_declaration . 0)))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (RIGHT_PAREN . (parameter_specification . 0)) 
(SEMICOLON . (parameter_specification . 0)))
+      ((default . error) (RIGHT_PAREN . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (parameter_specification . 1)) 
(SEMICOLON . (parameter_specification . 1)))
       ((default . error) (WITH . (formal_derived_type_definition . 0)) 
(SEMICOLON . (formal_derived_type_definition . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (WITH . (interface_list . 
1)) (SEMICOLON . (interface_list . 1)) (AND . (interface_list . 1)) (LEFT_PAREN 
.  107))
       ((default . error) (LOOP . (index_constraint . 0)) (DO . 
(index_constraint . 0)) (RIGHT_PAREN . (index_constraint . 0)) (COMMA . 
(index_constraint . 0)) (EQUAL_GREATER . (index_constraint . 0)) (COLON_EQUAL . 
(index_constraint . 0)) (WITH . (index_constraint . 0)) (SEMICOLON . 
(index_constraint . 0)) (AND . (index_constraint . 0)) (OF . (index_constraint 
. 0)))
       ((default . error) (PLUS . (primary . 1)) (MINUS . (primary . 1)) 
(AMPERSAND . (primary . 1)) (DOT_DOT . (primary . 1)) (MOD . (primary . 1)) 
(REM . (primary . 1)) (SLASH . (primary . 1)) (STAR . (primary . 1)) (XOR . 
(primary . 1)) (OR . (primary . 1)) (AND . (primary . 1)) (EQUAL_GREATER . 
(primary . 1)) (BAR . (primary . 1)) (IN . (primary . 1)) (NOT . (primary . 1)) 
(EQUAL . (primary . 1)) (GREATER . (primary . 1)) (GREATER_EQUAL . (primary . 
1)) (LESS . (primary . 1)) (LESS_EQ [...]
-      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
+      ((default . error) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49))
       ((default . error) (WITH . (component_definition . 3)) (SEMICOLON . 
(component_definition . 3)) (COLON_EQUAL . (component_definition . 3)))
       ((default . error) (WITH . (array_type_definition . 0)) (SEMICOLON . 
(array_type_definition . 0)) (COLON_EQUAL . (array_type_definition . 0)))
       ((default . error) (WITH . (component_definition . 1)) (SEMICOLON . 
(component_definition . 1)) (COLON_EQUAL . (component_definition . 1)))
-      ((default . error) (BOX .  1076))
+      ((default . error) (BOX .  1067))
       ((default . error) (WITH . (array_type_definition . 1)) (SEMICOLON . 
(array_type_definition . 1)) (COLON_EQUAL . (array_type_definition . 1)))
-      ((default . error) (SEMICOLON .  1242))
-      ((default . error) (RECORD .  1241))
+      ((default . error) (SEMICOLON .  1233))
+      ((default . error) (RECORD .  1232))
       ((default . error) (IDENTIFIER . (component_clause_list . 1)) (END . 
(component_clause_list . 1)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (package_body_stub . 0)) (END . 
(package_body_stub . 0)) (BEGIN . (package_body_stub . 0)) (ENTRY . 
(package_body_stub . 0)) (FOR . (package_body_stub . 0)) (FUNCTION . 
(package_body_stub . 0)) (GENERIC . (package_body_stub . 0)) (NOT . 
(package_body_stub . 0)) (OVERRIDING . (package_body_stub . 0)) (PACKAGE . 
(package_body_stub . 0)) (PRAGMA . (package_body_stub . 0)) (PROCEDURE . 
(package_body_stub . 0)) (PROTECTED . (package_body_stub . 0)) (SUBTYPE [...]
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (END .  1238))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (END .  1229))
       ((default . error) (SEMICOLON . (protected_definition . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  1236))
+      ((default . error) (SEMICOLON .  1227))
       ((default . error) (PRIVATE . (protected_body_stub . 0)) (END . 
(protected_body_stub . 0)) (BEGIN . (protected_body_stub . 0)) (ENTRY . 
(protected_body_stub . 0)) (FOR . (protected_body_stub . 0)) (FUNCTION . 
(protected_body_stub . 0)) (GENERIC . (protected_body_stub . 0)) (NOT . 
(protected_body_stub . 0)) (OVERRIDING . (protected_body_stub . 0)) (PACKAGE . 
(protected_body_stub . 0)) (PRAGMA . (protected_body_stub . 0)) (PROCEDURE . 
(protected_body_stub . 0)) (PROTECTED . (protecte [...]
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
-      ((default . error) (END .  1234))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
+      ((default . error) (END .  1225))
       ((default . error) (SEMICOLON . (task_definition . 1)))
       ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49))
-      ((default . error) (SEMICOLON .  1232))
+      ((default . error) (SEMICOLON .  1223))
       ((default . error) (PRIVATE . (task_body_stub . 0)) (END . 
(task_body_stub . 0)) (BEGIN . (task_body_stub . 0)) (ENTRY . (task_body_stub . 
0)) (FOR . (task_body_stub . 0)) (FUNCTION . (task_body_stub . 0)) (GENERIC . 
(task_body_stub . 0)) (NOT . (task_body_stub . 0)) (OVERRIDING . 
(task_body_stub . 0)) (PACKAGE . (task_body_stub . 0)) (PRAGMA . 
(task_body_stub . 0)) (PROCEDURE . (task_body_stub . 0)) (PROTECTED . 
(task_body_stub . 0)) (SUBTYPE . (task_body_stub . 0)) (TASK . (task_ [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RANGE . (expression_opt . 0)) (WITH . 
(expression_opt . 0)) (SEMICOLON . (expression_opt . 0)) (RAISE .  153) (PLUS . 
 155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL . 
 151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (WITH . (type_definition . 4)) (SEMICOLON . 
(type_definition . 4)))
       ((default . error) (WITH . (type_definition . 3)) (SEMICOLON . 
(type_definition . 3)))
       ((default . error) (SEMICOLON . (enumeration_type_definition . 0)) (WITH 
. (enumeration_type_definition . 0)))
-      ((default . error) (IDENTIFIER .  1044) (CHARACTER_LITERAL .  1045))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (ALIASED .  1092) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  885))
-      ((default . error) (RECORD .  1226))
+      ((default . error) (IDENTIFIER .  1035) (CHARACTER_LITERAL .  1036))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (ALIASED .  1083) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt 
. 0)) (NOT .  875))
+      ((default . error) (RECORD .  1217))
       ((default . error) (WHEN . (component_list . 1)) (IDENTIFIER . 
(component_list . 1)) (FOR . (component_list . 1)) (CASE . (component_list . 
1)) (END . (component_list . 1)))
       ((default . error) (WHEN . (component_list . 2)) (IDENTIFIER . 
(component_list . 2)) (FOR . (component_list . 2)) (CASE . (component_list . 
2)) (END . (component_list . 2)))
       ((default . error) (WHEN . (component_list . 4)) (IDENTIFIER . 
(component_list . 4)) (FOR . (component_list . 4)) (CASE . (component_list . 
4)) (END . (component_list . 4)))
       ((default . error) (IS . (direct_name . 0)))
       ((default . error) (IS . (direct_name . 1)))
       ((default . error) (IS . (direct_name_opt . 1)))
-      ((default . error) (IS .  1225))
-      ((default . error) (WITH . (and_interface_list_opt . 0)) (AND .  821))
-      ((default . error) (DOT .  90) (TICK .  91) (AND .  821) (WITH . 
((constraint_opt . 0) (and_interface_list_opt . 0))) (SEMICOLON . 
(constraint_opt . 0)) (RANGE .  904) (LEFT_PAREN .  829))
-      ((default . error) (SEMICOLON .  1220))
+      ((default . error) (IS .  1216))
+      ((default . error) (WITH . (and_interface_list_opt . 0)) (AND .  812))
+      ((default . error) (DOT .  90) (TICK .  91) (AND .  812) (WITH . 
((constraint_opt . 0) (and_interface_list_opt . 0))) (SEMICOLON . 
(constraint_opt . 0)) (RANGE .  895) (LEFT_PAREN .  820))
+      ((default . error) (SEMICOLON .  1211))
       ((default . error) (END . (full_type_declaration . 0)) (PRIVATE . 
(full_type_declaration . 0)) (IDENTIFIER . (full_type_declaration . 0)) (USE . 
(full_type_declaration . 0)) (TYPE . (full_type_declaration . 0)) (TASK . 
(full_type_declaration . 0)) (SUBTYPE . (full_type_declaration . 0)) (PROTECTED 
. (full_type_declaration . 0)) (PROCEDURE . (full_type_declaration . 0)) 
(PRAGMA . (full_type_declaration . 0)) (PACKAGE . (full_type_declaration . 0)) 
(OVERRIDING . (full_type_declaratio [...]
       ((default . error) (END . (object_renaming_declaration . 2)) (PRIVATE . 
(object_renaming_declaration . 2)) (IDENTIFIER . (object_renaming_declaration . 
2)) (USE . (object_renaming_declaration . 2)) (TYPE . 
(object_renaming_declaration . 2)) (TASK . (object_renaming_declaration . 2)) 
(SUBTYPE . (object_renaming_declaration . 2)) (PROTECTED . 
(object_renaming_declaration . 2)) (PROCEDURE . (object_renaming_declaration . 
2)) (PRAGMA . (object_renaming_declaration . 2)) (PACKAGE . (obj [...]
       ((default . error) (END . (object_renaming_declaration . 1)) (PRIVATE . 
(object_renaming_declaration . 1)) (IDENTIFIER . (object_renaming_declaration . 
1)) (USE . (object_renaming_declaration . 1)) (TYPE . 
(object_renaming_declaration . 1)) (TASK . (object_renaming_declaration . 1)) 
(SUBTYPE . (object_renaming_declaration . 1)) (PROTECTED . 
(object_renaming_declaration . 1)) (PROCEDURE . (object_renaming_declaration . 
1)) (PRAGMA . (object_renaming_declaration . 1)) (PACKAGE . (obj [...]
-      ((default . error) (SEMICOLON .  1219))
+      ((default . error) (SEMICOLON .  1210))
       ((default . error) (PRIVATE . (object_declaration . 3)) (END . 
(object_declaration . 3)) (BEGIN . (object_declaration . 3)) (ENTRY . 
(object_declaration . 3)) (FOR . (object_declaration . 3)) (FUNCTION . 
(object_declaration . 3)) (GENERIC . (object_declaration . 3)) (NOT . 
(object_declaration . 3)) (OVERRIDING . (object_declaration . 3)) (PACKAGE . 
(object_declaration . 3)) (PRAGMA . (object_declaration . 3)) (PROCEDURE . 
(object_declaration . 3)) (PROTECTED . (object_declaration . [...]
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (PRIVATE . (object_declaration . 5)) (END . 
(object_declaration . 5)) (BEGIN . (object_declaration . 5)) (ENTRY . 
(object_declaration . 5)) (FOR . (object_declaration . 5)) (FUNCTION . 
(object_declaration . 5)) (GENERIC . (object_declaration . 5)) (NOT . 
(object_declaration . 5)) (OVERRIDING . (object_declaration . 5)) (PACKAGE . 
(object_declaration . 5)) (PRAGMA . (object_declaration . 5)) (PROCEDURE . 
(object_declaration . 5)) (PROTECTED . (object_declaration . [...]
@@ -2963,197 +2954,197 @@
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (END . (package_body . 0)) (BEGIN . (package_body . 
0)) (ENTRY . (package_body . 0)) (FOR . (package_body . 0)) (PROTECTED . 
(package_body . 0)) (SUBTYPE . (package_body . 0)) (TASK . (package_body . 0)) 
(TYPE . (package_body . 0)) (IDENTIFIER . (package_body . 0)) (WITH . 
(package_body . 0)) (USE . (package_body . 0)) (SEPARATE . (package_body . 0)) 
(PROCEDURE . (package_body . 0)) (PRIVATE . (package_body . 0)) (PRAGMA . 
(package_body . 0)) (PACKAGE . (package_ [...]
-      ((default . error) (ELSE . (elsif_expression_item . 0)) (ELSIF . 
(elsif_expression_item . 0)) (RIGHT_PAREN . (elsif_expression_item . 0)) (COMMA 
. (elsif_expression_item . 0)))
+      ((default . error) (ELSE . (elsif_expression_item . 0)) (ELSIF . 
(elsif_expression_item . 0)) (RIGHT_PAREN . (elsif_expression_item . 0)))
       ((default . error) (DOT .  90) (TICK .  91) (LOOP . 
(iterator_specification . 2)) (EQUAL_GREATER . (iterator_specification . 2)) 
(LEFT_PAREN .  107))
       ((default . error) (DO . (subtype_indication . 0)) (COLON_EQUAL . 
(subtype_indication . 0)) (LOOP . (subtype_indication . 0)) (RIGHT_PAREN . 
(subtype_indication . 0)) (COMMA . (subtype_indication . 0)) (EQUAL_GREATER . 
(subtype_indication . 0)) (WITH . (subtype_indication . 0)) (AND . 
(subtype_indication . 0)) (OF . (subtype_indication . 0)) (SEMICOLON . 
(subtype_indication . 0)))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (PROCEDURE . (protected_operation_item_list . 1)) 
(OVERRIDING . (protected_operation_item_list . 1)) (NOT . 
(protected_operation_item_list . 1)) (FUNCTION . (protected_operation_item_list 
. 1)) (FOR . (protected_operation_item_list . 1)) (ENTRY . 
(protected_operation_item_list . 1)) (END . (protected_operation_item_list . 
1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (IS . 
(aspect_specification_opt . 0)) (WITH .  109))
-      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
1211))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
1202))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
       ((default . error) (THEN . (accept_statement . 1)) (WHEN . 
(accept_statement . 1)) (EXCEPTION . (accept_statement . 1)) (ELSIF . 
(accept_statement . 1)) (ELSE . (accept_statement . 1)) (OR . (accept_statement 
. 1)) (END . (accept_statement . 1)) (ACCEPT . (accept_statement . 1)) (ABORT . 
(accept_statement . 1)) (BEGIN . (accept_statement . 1)) (CASE . 
(accept_statement . 1)) (DECLARE . (accept_statement . 1)) (DELAY . 
(accept_statement . 1)) (EXIT . (accept_statement . 1)) (FOR . ( [...]
       ((default . error) (OR . (block_statement . 1)) (THEN . (block_statement 
. 1)) (WHEN . (block_statement . 1)) (EXCEPTION . (block_statement . 1)) (END . 
(block_statement . 1)) (LESS_LESS . (block_statement . 1)) (ACCEPT . 
(block_statement . 1)) (ABORT . (block_statement . 1)) (BEGIN . 
(block_statement . 1)) (CASE . (block_statement . 1)) (DECLARE . 
(block_statement . 1)) (DELAY . (block_statement . 1)) (EXIT . (block_statement 
. 1)) (FOR . (block_statement . 1)) (GOTO . (block_stat [...]
-      ((default . error) (CASE .  1208))
+      ((default . error) (CASE .  1199))
       ((default . error) (WHEN . (case_statement_alternative_list . 1)) (END . 
(case_statement_alternative_list . 1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  1207))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  1198))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (OR . (exit_statement . 0)) (THEN . (exit_statement . 
0)) (WHEN . (exit_statement . 0)) (EXCEPTION . (exit_statement . 0)) (END . 
(exit_statement . 0)) (LESS_LESS . (exit_statement . 0)) (ACCEPT . 
(exit_statement . 0)) (ABORT . (exit_statement . 0)) (BEGIN . (exit_statement . 
0)) (CASE . (exit_statement . 0)) (DECLARE . (exit_statement . 0)) (DELAY . 
(exit_statement . 0)) (EXIT . (exit_statement . 0)) (FOR . (exit_statement . 
0)) (GOTO . (exit_statement . 0)) (IF [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IF .  1203))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (THEN . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IF .  1194))
       ((default . error) (END . (elsif_statement_list . 0)) (ELSE . 
(elsif_statement_list . 0)) (ELSIF . (elsif_statement_list . 0)))
-      ((default . error) (END .  1201) (ELSE .  1200) (ELSIF .  1163))
-      ((default . error) (SEMICOLON .  1199))
+      ((default . error) (END .  1192) (ELSE .  1191) (ELSIF .  1154))
+      ((default . error) (SEMICOLON .  1190))
       ((default . error) (OR . (raise_statement . 1)) (THEN . (raise_statement 
. 1)) (WHEN . (raise_statement . 1)) (EXCEPTION . (raise_statement . 1)) (END . 
(raise_statement . 1)) (LESS_LESS . (raise_statement . 1)) (ACCEPT . 
(raise_statement . 1)) (ABORT . (raise_statement . 1)) (BEGIN . 
(raise_statement . 1)) (CASE . (raise_statement . 1)) (DECLARE . 
(raise_statement . 1)) (DELAY . (raise_statement . 1)) (EXIT . (raise_statement 
. 1)) (FOR . (raise_statement . 1)) (GOTO . (raise_stat [...]
       ((default . error) (OR . (requeue_statement . 0)) (THEN . 
(requeue_statement . 0)) (WHEN . (requeue_statement . 0)) (EXCEPTION . 
(requeue_statement . 0)) (END . (requeue_statement . 0)) (LESS_LESS . 
(requeue_statement . 0)) (ACCEPT . (requeue_statement . 0)) (ABORT . 
(requeue_statement . 0)) (BEGIN . (requeue_statement . 0)) (CASE . 
(requeue_statement . 0)) (DECLARE . (requeue_statement . 0)) (DELAY . 
(requeue_statement . 0)) (EXIT . (requeue_statement . 0)) (FOR . 
(requeue_stateme [...]
-      ((default . error) (RETURN .  1198))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  885))
-      ((default . error) (END .  1194))
-      ((default . error) (SELECT .  1193))
+      ((default . error) (RETURN .  1189))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (ACCESS . (null_exclusion_opt . 0)) (NOT .  875))
+      ((default . error) (END .  1185))
+      ((default . error) (SELECT .  1184))
       ((default . error) (OR . (selective_accept . 1)) (THEN . 
(selective_accept . 1)) (WHEN . (selective_accept . 1)) (EXCEPTION . 
(selective_accept . 1)) (END . (selective_accept . 1)) (LESS_LESS . 
(selective_accept . 1)) (ACCEPT . (selective_accept . 1)) (ABORT . 
(selective_accept . 1)) (BEGIN . (selective_accept . 1)) (CASE . 
(selective_accept . 1)) (DECLARE . (selective_accept . 1)) (DELAY . 
(selective_accept . 1)) (EXIT . (selective_accept . 1)) (FOR . 
(selective_accept . 1)) (GOTO [...]
-      ((default . error) (SELECT .  1192))
+      ((default . error) (SELECT .  1183))
       ((default . error) (END . (delay_alternative . 0)) (OR . 
(delay_alternative . 0)) (ELSE . (delay_alternative . 0)))
-      ((default . error) (SELECT .  1191))
-      ((default . error) (SEMICOLON .  1190))
-      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
+      ((default . error) (SELECT .  1182))
+      ((default . error) (SEMICOLON .  1181))
+      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (OR . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO . ( [...]
       ((default . error) (END . (select_alternative . 2)) (OR . 
(select_alternative . 2)) (ELSE . (select_alternative . 2)))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
-      ((default . error) (OTHERS .  957) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
-      ((default . error) (BAR .  1182) (EQUAL_GREATER .  1286))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
+      ((default . error) (OTHERS .  948) (IDENTIFIER .  48) (CHARACTER_LITERAL 
.  50) (STRING_LITERAL .  49))
+      ((default . error) (BAR .  1173) (EQUAL_GREATER .  1277))
       ((default . error) (WHEN . (exception_handler . 1)) (END . 
(exception_handler . 1)))
       ((default . error) (EQUAL_GREATER . (exception_choice_list . 1)) (BAR . 
(exception_choice_list . 1)))
-      ((default . error) (SEMICOLON .  1285))
+      ((default . error) (SEMICOLON .  1276))
       ((default . error) (ELSE . (select_alternative . 0)) (OR . 
(select_alternative . 0)) (END . (select_alternative . 0)))
       ((default . error) (ELSE . (select_alternative . 4)) (OR . 
(select_alternative . 4)) (END . (select_alternative . 4)))
-      ((default . error) (SEMICOLON .  1284))
-      ((default . error) (SEMICOLON .  1283))
-      ((default . error) (SEMICOLON .  1282))
-      ((default . error) (SELECT .  1281))
+      ((default . error) (SEMICOLON .  1275))
+      ((default . error) (SEMICOLON .  1274))
+      ((default . error) (SEMICOLON .  1273))
+      ((default . error) (SELECT .  1272))
       ((default . error) (DO . (return_subtype_indication . 1)) (SEMICOLON . 
(return_subtype_indication . 1)) (COLON_EQUAL . (return_subtype_indication . 
1)))
-      ((default . error) (DO . (extended_return_object_declaration . 1)) 
(SEMICOLON . (extended_return_object_declaration . 1)) (COLON_EQUAL .  1280))
+      ((default . error) (DO . (extended_return_object_declaration . 1)) 
(SEMICOLON . (extended_return_object_declaration . 1)) (COLON_EQUAL .  1271))
       ((default . error) (DO . (return_subtype_indication . 0)) (SEMICOLON . 
(return_subtype_indication . 0)) (COLON_EQUAL . (return_subtype_indication . 
0)))
-      ((default . error) (SEMICOLON .  1279))
+      ((default . error) (SEMICOLON .  1270))
       ((default . error) (WHEN . (loop_statement . 1)) (THEN . (loop_statement 
. 1)) (OR . (loop_statement . 1)) (ELSIF . (loop_statement . 1)) (ELSE . 
(loop_statement . 1)) (CHARACTER_LITERAL . (loop_statement . 1)) 
(STRING_LITERAL . (loop_statement . 1)) (IDENTIFIER . (loop_statement . 1)) 
(WHILE . (loop_statement . 1)) (SELECT . (loop_statement . 1)) (RETURN . 
(loop_statement . 1)) (REQUEUE . (loop_statement . 1)) (RAISE . (loop_statement 
. 1)) (PRAGMA . (loop_statement . 1)) (NULL .  [...]
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
-      ((default . error) (IF .  1277))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (ACCEPT . 
(label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . 
(label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) (LOOP . 
(label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . 
(label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . 
(label_opt . 0)) (GOTO . (label_opt . 0)) (NULL . (label_opt . 0)) (PRAGMA . 
(label_opt . 0)) (RAISE . (labe [...]
+      ((default . error) (IF .  1268))
       ((default . error) (ELSIF . (elsif_statement_list . 1)) (ELSE . 
(elsif_statement_list . 1)) (END . (elsif_statement_list . 1)))
-      ((default . error) (SEMICOLON .  1276))
-      ((default . error) (THEN .  1275))
-      ((default . error) (END .  1274))
-      ((default . error) (SEMICOLON .  1273))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (WHEN . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
-      ((default . error) (SEMICOLON .  1271))
-      ((default . error) (END .  1270))
-      ((default . error) (END .  1269))
-      ((default . error) (FOR .  1268) (IDENTIFIER .  77))
-      ((default . error) (WHEN .  1267))
-      ((default . error) (WHEN . (entry_body_formal_part . 1)))
-      ((default . error) (SEMICOLON .  1266))
-      ((default . error) (SEMICOLON .  1265))
+      ((default . error) (SEMICOLON .  1267))
+      ((default . error) (THEN .  1266))
+      ((default . error) (END .  1265))
       ((default . error) (SEMICOLON .  1264))
-      ((default . error) (SEMICOLON .  1263))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (WHEN . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
       ((default . error) (SEMICOLON .  1262))
+      ((default . error) (END .  1261))
+      ((default . error) (END .  1260))
+      ((default . error) (FOR .  1259) (SEMICOLON . (parameter_specification . 
0)) (RIGHT_PAREN . (parameter_specification . 0)) (IDENTIFIER .  77))
+      ((default . error) (WHEN .  1258))
+      ((default . error) (WHEN . (entry_body_formal_part . 1)))
+      ((default . error) (SEMICOLON .  1257))
+      ((default . error) (SEMICOLON .  1256))
+      ((default . error) (SEMICOLON .  1255))
+      ((default . error) (SEMICOLON .  1254))
+      ((default . error) (SEMICOLON .  1253))
       ((default . error) (BEGIN . (object_renaming_declaration . 0)) (ENTRY . 
(object_renaming_declaration . 0)) (FOR . (object_renaming_declaration . 0)) 
(FUNCTION . (object_renaming_declaration . 0)) (GENERIC . 
(object_renaming_declaration . 0)) (NOT . (object_renaming_declaration . 0)) 
(OVERRIDING . (object_renaming_declaration . 0)) (PACKAGE . 
(object_renaming_declaration . 0)) (PRAGMA . (object_renaming_declaration . 0)) 
(PROCEDURE . (object_renaming_declaration . 0)) (PROTECTED . ( [...]
       ((default . error) (BEGIN . (private_type_declaration . 0)) (ENTRY . 
(private_type_declaration . 0)) (FOR . (private_type_declaration . 0)) 
(FUNCTION . (private_type_declaration . 0)) (GENERIC . 
(private_type_declaration . 0)) (NOT . (private_type_declaration . 0)) 
(OVERRIDING . (private_type_declaration . 0)) (PACKAGE . 
(private_type_declaration . 0)) (PRAGMA . (private_type_declaration . 0)) 
(PROCEDURE . (private_type_declaration . 0)) (PROTECTED . 
(private_type_declaration . 0)) [...]
-      ((default . error) (WITH .  1261))
+      ((default . error) (WITH .  1252))
       ((default . error) (WITH . (constraint_opt . 1)) (SEMICOLON . 
(constraint_opt . 1)))
       ((default . error) (WITH . (derived_type_definition . 1)) (SEMICOLON . 
(derived_type_definition . 1)))
-      ((default . error) (WITH .  1260))
-      ((default . error) (WHEN .  1257))
+      ((default . error) (WITH .  1251))
+      ((default . error) (WHEN .  1248))
       ((default . error) (SEMICOLON . (record_definition . 0)) (WITH . 
(record_definition . 0)))
-      ((default . error) (COLON_EQUAL .  1255) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
+      ((default . error) (COLON_EQUAL .  1246) (SEMICOLON . 
(aspect_specification_opt . 0)) (WITH .  109))
       ((default . error) (SEMICOLON . (type_definition . 1)) (WITH . 
(type_definition . 1)))
       ((default . error) (RIGHT_PAREN . (enumeration_literal_list . 1)) (COMMA 
. (enumeration_literal_list . 1)))
-      ((default . error) (DOT_DOT .  1254))
-      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1116))
+      ((default . error) (DOT_DOT .  1245))
+      ((default . error) (WITH . (real_range_specification_opt . 0)) 
(SEMICOLON . (real_range_specification_opt . 0)) (RANGE .  1107))
       ((default . error) (IDENTIFIER . (task_type_declaration . 1)) (USE . 
(task_type_declaration . 1)) (TYPE . (task_type_declaration . 1)) (TASK . 
(task_type_declaration . 1)) (SUBTYPE . (task_type_declaration . 1)) (PROTECTED 
. (task_type_declaration . 1)) (PROCEDURE . (task_type_declaration . 1)) 
(PRAGMA . (task_type_declaration . 1)) (PACKAGE . (task_type_declaration . 1)) 
(OVERRIDING . (task_type_declaration . 1)) (NOT . (task_type_declaration . 1)) 
(GENERIC . (task_type_declaratio [...]
-      ((default . error) (AND .  1080) (WITH .  1252))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1250))
+      ((default . error) (AND .  1071) (WITH .  1243))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1241))
       ((default . error) (IDENTIFIER . (protected_type_declaration . 1)) (USE 
. (protected_type_declaration . 1)) (TYPE . (protected_type_declaration . 1)) 
(TASK . (protected_type_declaration . 1)) (SUBTYPE . 
(protected_type_declaration . 1)) (PROTECTED . (protected_type_declaration . 
1)) (PROCEDURE . (protected_type_declaration . 1)) (PRAGMA . 
(protected_type_declaration . 1)) (PACKAGE . (protected_type_declaration . 1)) 
(OVERRIDING . (protected_type_declaration . 1)) (NOT . (protected_ [...]
-      ((default . error) (AND .  1080) (WITH .  1249))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1247))
-      ((default . error) (RANGE .  1246))
+      ((default . error) (AND .  1071) (WITH .  1240))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1238))
+      ((default . error) (RANGE .  1237))
       ((default . error) (SEMICOLON . (record_rep . 0)))
       ((default . error) (IDENTIFIER . (mod_clause_opt . 1)))
       ((default . error) (COLON_EQUAL . (component_definition . 2)) (SEMICOLON 
. (component_definition . 2)) (WITH . (component_definition . 2)))
       ((default . error) (COLON_EQUAL . (component_definition . 0)) (SEMICOLON 
. (component_definition . 0)) (WITH . (component_definition . 0)))
-      ((default . error) (RIGHT_PAREN . (subtype_indication . 1)) (COMMA . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (RANGE .  904) (LEFT_PAREN .  829))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (RIGHT_PAREN . (subtype_indication . 1)) (COMMA . 
(subtype_indication . 1)) (DOT .  90) (TICK .  91) (BAR . (discrete_choice . 
1)) (EQUAL_GREATER . (discrete_choice . 1)) (RANGE .  895) (LEFT_PAREN .  820))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (END . (single_protected_declaration . 0)) (PRIVATE . 
(single_protected_declaration . 0)) (IDENTIFIER . (single_protected_declaration 
. 0)) (USE . (single_protected_declaration . 0)) (TYPE . 
(single_protected_declaration . 0)) (TASK . (single_protected_declaration . 0)) 
(SUBTYPE . (single_protected_declaration . 0)) (PROTECTED . 
(single_protected_declaration . 0)) (PROCEDURE . (single_protected_declaration 
. 0)) (PRAGMA . (single_protected_declaration . 0)) (PACK [...]
       ((default . error) (SEMICOLON . (protected_definition . 0)))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
       ((default . error) (END . (single_task_declaration . 0)) (PRIVATE . 
(single_task_declaration . 0)) (IDENTIFIER . (single_task_declaration . 0)) 
(USE . (single_task_declaration . 0)) (TYPE . (single_task_declaration . 0)) 
(TASK . (single_task_declaration . 0)) (SUBTYPE . (single_task_declaration . 
0)) (PROTECTED . (single_task_declaration . 0)) (PROCEDURE . 
(single_task_declaration . 0)) (PRAGMA . (single_task_declaration . 0)) 
(PACKAGE . (single_task_declaration . 0)) (OVERRIDING . [...]
       ((default . error) (SEMICOLON . (task_definition . 0)))
-      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  302) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 299) (IDENTIFIER .  305) (TYPE .  304) (GENERIC .  2) (PROTECTED .  301) (TASK 
.  303) (PACKAGE .  300))
+      ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . 
(declarative_part_opt . 0)) (USE .  11) (SUBTYPE .  272) (PRAGMA .  7) (NOT .  
4) (OVERRIDING .  5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . 
(overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 
 269) (IDENTIFIER .  275) (TYPE .  274) (GENERIC .  2) (PROTECTED .  271) (TASK 
.  273) (PACKAGE .  270))
       ((default . error) (WITH . (type_definition . 5)) (SEMICOLON . 
(type_definition . 5)))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1303))
-      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  182) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) 
(ABS .  144) (NOT .  181) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
-      ((default . error) (END .  1300) (WHEN .  1257))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (WITH . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1294))
+      ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . 
(discrete_choice_list . 0)) (OTHERS .  152) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) 
(ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) 
(LEFT_PAREN .  148))
+      ((default . error) (END .  1291) (WHEN .  1248))
       ((default . error) (END . (variant_list . 0)) (WHEN . (variant_list . 
0)))
-      ((default . error) (PRIVATE .  1299))
-      ((default . error) (RECORD .  868) (NULL .  866))
+      ((default . error) (PRIVATE .  1290))
+      ((default . error) (RECORD .  858) (NULL .  856))
       ((default . error) (PRIVATE . (object_declaration . 2)) (END . 
(object_declaration . 2)) (BEGIN . (object_declaration . 2)) (ENTRY . 
(object_declaration . 2)) (FOR . (object_declaration . 2)) (FUNCTION . 
(object_declaration . 2)) (GENERIC . (object_declaration . 2)) (NOT . 
(object_declaration . 2)) (OVERRIDING . (object_declaration . 2)) (PACKAGE . 
(object_declaration . 2)) (PRAGMA . (object_declaration . 2)) (PROCEDURE . 
(object_declaration . 2)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (object_declaration . 4)) (END . 
(object_declaration . 4)) (BEGIN . (object_declaration . 4)) (ENTRY . 
(object_declaration . 4)) (FOR . (object_declaration . 4)) (FUNCTION . 
(object_declaration . 4)) (GENERIC . (object_declaration . 4)) (NOT . 
(object_declaration . 4)) (OVERRIDING . (object_declaration . 4)) (PACKAGE . 
(object_declaration . 4)) (PRAGMA . (object_declaration . 4)) (PROCEDURE . 
(object_declaration . 4)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (object_declaration . 0)) (END . 
(object_declaration . 0)) (BEGIN . (object_declaration . 0)) (ENTRY . 
(object_declaration . 0)) (FOR . (object_declaration . 0)) (FUNCTION . 
(object_declaration . 0)) (GENERIC . (object_declaration . 0)) (NOT . 
(object_declaration . 0)) (OVERRIDING . (object_declaration . 0)) (PACKAGE . 
(object_declaration . 0)) (PRAGMA . (object_declaration . 0)) (PROCEDURE . 
(object_declaration . 0)) (PROTECTED . (object_declaration . [...]
       ((default . error) (PRIVATE . (entry_declaration . 0)) (END . 
(entry_declaration . 0)) (BEGIN . (entry_declaration . 0)) (ENTRY . 
(entry_declaration . 0)) (FOR . (entry_declaration . 0)) (FUNCTION . 
(entry_declaration . 0)) (GENERIC . (entry_declaration . 0)) (NOT . 
(entry_declaration . 0)) (OVERRIDING . (entry_declaration . 0)) (PACKAGE . 
(entry_declaration . 0)) (PRAGMA . (entry_declaration . 0)) (PROCEDURE . 
(entry_declaration . 0)) (PROTECTED . (entry_declaration . 0)) (SUBTYPE [...]
       ((default . error) (PRIVATE . (protected_body . 0)) (END . 
(protected_body . 0)) (BEGIN . (protected_body . 0)) (ENTRY . (protected_body . 
0)) (FOR . (protected_body . 0)) (FUNCTION . (protected_body . 0)) (GENERIC . 
(protected_body . 0)) (NOT . (protected_body . 0)) (OVERRIDING . 
(protected_body . 0)) (PACKAGE . (protected_body . 0)) (PRAGMA . 
(protected_body . 0)) (PROCEDURE . (protected_body . 0)) (PROTECTED . 
(protected_body . 0)) (SUBTYPE . (protected_body . 0)) (TASK . (prote [...]
-      ((default . error) (IS . (expression_opt . 0)) (RAISE .  152) (PLUS .  
154) (MINUS .  153) (ABS .  144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
-      ((default . error) (IDENTIFIER .  1296))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
+      ((default . error) (IS . (expression_opt . 0)) (RAISE .  153) (PLUS .  
155) (MINUS .  154) (ABS .  144) (NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  
151) (NEW .  149) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL 
.  49) (LEFT_PAREN .  148))
+      ((default . error) (IDENTIFIER .  1287))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
       ((default . error) (OR . (case_statement . 0)) (THEN . (case_statement . 
0)) (WHEN . (case_statement . 0)) (EXCEPTION . (case_statement . 0)) (END . 
(case_statement . 0)) (LESS_LESS . (case_statement . 0)) (ACCEPT . 
(case_statement . 0)) (ABORT . (case_statement . 0)) (BEGIN . (case_statement . 
0)) (CASE . (case_statement . 0)) (DECLARE . (case_statement . 0)) (DELAY . 
(case_statement . 0)) (EXIT . (case_statement . 0)) (FOR . (case_statement . 
0)) (GOTO . (case_statement . 0)) (IF [...]
       ((default . error) (END . (case_statement_alternative . 0)) (WHEN . 
(case_statement_alternative . 0)))
       ((default . error) (OR . (block_statement . 0)) (THEN . (block_statement 
. 0)) (WHEN . (block_statement . 0)) (EXCEPTION . (block_statement . 0)) (END . 
(block_statement . 0)) (LESS_LESS . (block_statement . 0)) (ACCEPT . 
(block_statement . 0)) (ABORT . (block_statement . 0)) (BEGIN . 
(block_statement . 0)) (CASE . (block_statement . 0)) (DECLARE . 
(block_statement . 0)) (DELAY . (block_statement . 0)) (EXIT . (block_statement 
. 0)) (FOR . (block_statement . 0)) (GOTO . (block_stat [...]
-      ((default . error) (IF .  1293))
-      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (ELSIF . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
+      ((default . error) (IF .  1284))
+      ((default . error) (ELSE . (sequence_of_statements_opt . 0)) (ELSIF . 
(sequence_of_statements_opt . 0)) (END . (sequence_of_statements_opt . 0)) 
(ACCEPT . (label_opt . 0)) (BEGIN . (label_opt . 0)) (CASE . (label_opt . 0)) 
(DECLARE . (label_opt . 0)) (FOR . (label_opt . 0)) (IF . (label_opt . 0)) 
(LOOP . (label_opt . 0)) (RETURN . (label_opt . 0)) (SELECT . (label_opt . 0)) 
(WHILE . (label_opt . 0)) (ABORT . (label_opt . 0)) (DELAY . (label_opt . 0)) 
(EXIT . (label_opt . 0)) (GOTO  [...]
       ((default . error) (OR . (if_statement . 3)) (THEN . (if_statement . 3)) 
(WHEN . (if_statement . 3)) (EXCEPTION . (if_statement . 3)) (END . 
(if_statement . 3)) (LESS_LESS . (if_statement . 3)) (ACCEPT . (if_statement . 
3)) (ABORT . (if_statement . 3)) (BEGIN . (if_statement . 3)) (CASE . 
(if_statement . 3)) (DECLARE . (if_statement . 3)) (DELAY . (if_statement . 3)) 
(EXIT . (if_statement . 3)) (FOR . (if_statement . 3)) (GOTO . (if_statement . 
3)) (IF . (if_statement . 3)) (LOOP . [...]
-      ((default . error) (SEMICOLON .  1291))
-      ((default . error) (END .  1290))
+      ((default . error) (SEMICOLON .  1282))
+      ((default . error) (END .  1281))
       ((default . error) (OR . (extended_return_statement . 0)) (THEN . 
(extended_return_statement . 0)) (WHEN . (extended_return_statement . 0)) 
(EXCEPTION . (extended_return_statement . 0)) (END . (extended_return_statement 
. 0)) (LESS_LESS . (extended_return_statement . 0)) (ACCEPT . 
(extended_return_statement . 0)) (ABORT . (extended_return_statement . 0)) 
(BEGIN . (extended_return_statement . 0)) (CASE . (extended_return_statement . 
0)) (DECLARE . (extended_return_statement . 0)) (D [...]
-      ((default . error) (RAISE .  152) (PLUS .  154) (MINUS .  153) (ABS .  
144) (NOT .  150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) 
(IDENTIFIER .  48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN 
.  148))
-      ((default . error) (SEMICOLON .  1288))
+      ((default . error) (DO . (expression_opt . 0)) (SEMICOLON . 
(expression_opt . 0)) (RAISE .  153) (PLUS .  155) (MINUS .  154) (ABS .  144) 
(NOT .  324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  
48) (CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1279))
       ((default . error) (OR . (selective_accept . 0)) (THEN . 
(selective_accept . 0)) (WHEN . (selective_accept . 0)) (EXCEPTION . 
(selective_accept . 0)) (END . (selective_accept . 0)) (LESS_LESS . 
(selective_accept . 0)) (ACCEPT . (selective_accept . 0)) (ABORT . 
(selective_accept . 0)) (BEGIN . (selective_accept . 0)) (CASE . 
(selective_accept . 0)) (DECLARE . (selective_accept . 0)) (DELAY . 
(selective_accept . 0)) (EXIT . (selective_accept . 0)) (FOR . 
(selective_accept . 0)) (GOTO [...]
       ((default . error) (OR . (conditional_entry_call . 0)) (THEN . 
(conditional_entry_call . 0)) (WHEN . (conditional_entry_call . 0)) (EXCEPTION 
. (conditional_entry_call . 0)) (END . (conditional_entry_call . 0)) (LESS_LESS 
. (conditional_entry_call . 0)) (ACCEPT . (conditional_entry_call . 0)) (ABORT 
. (conditional_entry_call . 0)) (BEGIN . (conditional_entry_call . 0)) (CASE . 
(conditional_entry_call . 0)) (DECLARE . (conditional_entry_call . 0)) (DELAY . 
(conditional_entry_call .  [...]
       ((default . error) (OR . (timed_entry_call . 0)) (THEN . 
(timed_entry_call . 0)) (WHEN . (timed_entry_call . 0)) (EXCEPTION . 
(timed_entry_call . 0)) (END . (timed_entry_call . 0)) (LESS_LESS . 
(timed_entry_call . 0)) (ACCEPT . (timed_entry_call . 0)) (ABORT . 
(timed_entry_call . 0)) (BEGIN . (timed_entry_call . 0)) (CASE . 
(timed_entry_call . 0)) (DECLARE . (timed_entry_call . 0)) (DELAY . 
(timed_entry_call . 0)) (EXIT . (timed_entry_call . 0)) (FOR . 
(timed_entry_call . 0)) (GOTO [...]
       ((default . error) (OR . (loop_statement . 0)) (THEN . (loop_statement . 
0)) (WHEN . (loop_statement . 0)) (EXCEPTION . (loop_statement . 0)) (END . 
(loop_statement . 0)) (LESS_LESS . (loop_statement . 0)) (ACCEPT . 
(loop_statement . 0)) (ABORT . (loop_statement . 0)) (BEGIN . (loop_statement . 
0)) (CASE . (loop_statement . 0)) (DECLARE . (loop_statement . 0)) (DELAY . 
(loop_statement . 0)) (EXIT . (loop_statement . 0)) (FOR . (loop_statement . 
0)) (GOTO . (loop_statement . 0)) (IF [...]
-      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
+      ((default . error) (WHEN . (sequence_of_statements_opt . 0)) (END . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt . 0)) [...]
       ((default . error) (WHEN . (exception_handler . 0)) (END . 
(exception_handler . 0)))
       ((default . error) (WHEN . (asynchronous_select . 0)) (THEN . 
(asynchronous_select . 0)) (OR . (asynchronous_select . 0)) (ELSIF . 
(asynchronous_select . 0)) (ELSE . (asynchronous_select . 0)) 
(CHARACTER_LITERAL . (asynchronous_select . 0)) (STRING_LITERAL . 
(asynchronous_select . 0)) (IDENTIFIER . (asynchronous_select . 0)) (WHILE . 
(asynchronous_select . 0)) (SELECT . (asynchronous_select . 0)) (RETURN . 
(asynchronous_select . 0)) (REQUEUE . (asynchronous_select . 0)) (RAISE . (a 
[...]
       ((default . error) (DO . (extended_return_object_declaration . 0)) 
(SEMICOLON . (extended_return_object_declaration . 0)))
-      ((default . error) (IF .  1321))
+      ((default . error) (IF .  1312))
       ((default . error) (WHEN . (if_statement . 1)) (THEN . (if_statement . 
1)) (OR . (if_statement . 1)) (ELSIF . (if_statement . 1)) (ELSE . 
(if_statement . 1)) (CHARACTER_LITERAL . (if_statement . 1)) (STRING_LITERAL . 
(if_statement . 1)) (IDENTIFIER . (if_statement . 1)) (WHILE . (if_statement . 
1)) (SELECT . (if_statement . 1)) (RETURN . (if_statement . 1)) (REQUEUE . 
(if_statement . 1)) (RAISE . (if_statement . 1)) (PRAGMA . (if_statement . 1)) 
(NULL . (if_statement . 1)) (LOOP .  [...]
       ((default . error) (ELSE . (elsif_statement_item . 0)) (ELSIF . 
(elsif_statement_item . 0)) (END . (elsif_statement_item . 0)))
-      ((default . error) (SEMICOLON .  1320))
-      ((default . error) (SEMICOLON .  1319))
-      ((default . error) (SEMICOLON .  1318))
-      ((default . error) (IN .  1317))
-      ((default . error) (IS .  1316))
+      ((default . error) (SEMICOLON .  1311))
+      ((default . error) (SEMICOLON .  1310))
+      ((default . error) (SEMICOLON .  1309))
+      ((default . error) (IN .  1308))
+      ((default . error) (IS .  1307))
       ((default . error) (WITH . (derived_type_definition . 0)) (SEMICOLON . 
(derived_type_definition . 0)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
-      ((default . error) (CASE .  1314))
+      ((default . error) (CASE .  1305))
       ((default . error) (WHEN . (variant_list . 1)) (END . (variant_list . 
1)))
-      ((default . error) (BAR .  286) (EQUAL_GREATER .  1313))
+      ((default . error) (BAR .  356) (EQUAL_GREATER .  1304))
       ((default . error) (WHEN . (component_declaration . 1)) (END . 
(component_declaration . 1)) (CASE . (component_declaration . 1)) (FOR . 
(component_declaration . 1)) (IDENTIFIER . (component_declaration . 1)))
       ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH .  
109))
       ((default . error) (SEMICOLON . (real_range_specification_opt . 1)) 
(WITH . (real_range_specification_opt . 1)))
-      ((default . error) (SEMICOLON .  1311))
-      ((default . error) (SEMICOLON .  1310))
-      ((default . error) (DOT_DOT .  1309))
-      ((default . error) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  
150) (NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1302))
+      ((default . error) (SEMICOLON .  1301))
+      ((default . error) (DOT_DOT .  1300))
+      ((default . error) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  
324) (NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (IDENTIFIER .  48) 
(CHARACTER_LITERAL .  50) (STRING_LITERAL .  49) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (protected_type_declaration . 0)) (END . 
(protected_type_declaration . 0)) (BEGIN . (protected_type_declaration . 0)) 
(ENTRY . (protected_type_declaration . 0)) (FOR . (protected_type_declaration . 
0)) (FUNCTION . (protected_type_declaration . 0)) (GENERIC . 
(protected_type_declaration . 0)) (NOT . (protected_type_declaration . 0)) 
(OVERRIDING . (protected_type_declaration . 0)) (PACKAGE . 
(protected_type_declaration . 0)) (PRAGMA . (protected_type_dec [...]
       ((default . error) (PRIVATE . (task_type_declaration . 0)) (END . 
(task_type_declaration . 0)) (BEGIN . (task_type_declaration . 0)) (ENTRY . 
(task_type_declaration . 0)) (FOR . (task_type_declaration . 0)) (FUNCTION . 
(task_type_declaration . 0)) (GENERIC . (task_type_declaration . 0)) (NOT . 
(task_type_declaration . 0)) (OVERRIDING . (task_type_declaration . 0)) 
(PACKAGE . (task_type_declaration . 0)) (PRAGMA . (task_type_declaration . 0)) 
(PROCEDURE . (task_type_declaration . 0) [...]
-      ((default . error) (SEMICOLON .  1328))
-      ((default . error) (END . (component_list_opt . 0)) (WHEN . 
(component_list_opt . 0)) (NULL .  1033) (CASE .  1032) (IDENTIFIER .  77) (FOR 
.  299))
-      ((default . error) (SEMICOLON .  1326))
-      ((default . error) (SEMICOLON .  1325))
-      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  302) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  299) (IDENTIFIER .  305) (TYPE 
.  304) (GENERIC .  2) (PROTECTED .  301) (TASK .  303) (PACKAGE .  300))
-      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  154) (MINUS .  153) (ABS .  144) (NOT .  736) 
(NUMERIC_LITERAL .  155) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
+      ((default . error) (SEMICOLON .  1319))
+      ((default . error) (END . (component_list_opt . 0)) (WHEN . 
(component_list_opt . 0)) (NULL .  1024) (CASE .  1023) (IDENTIFIER .  77) (FOR 
.  269))
+      ((default . error) (SEMICOLON .  1317))
+      ((default . error) (SEMICOLON .  1316))
+      ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE .  11) 
(SUBTYPE .  272) (PRAGMA .  7) (NOT .  4) (OVERRIDING .  5) (FUNCTION . 
(overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) 
(ENTRY . (overriding_indicator_opt . 2)) (FOR .  269) (IDENTIFIER .  275) (TYPE 
.  274) (GENERIC .  2) (PROTECTED .  271) (TASK .  273) (PACKAGE .  270))
+      ((default . error) (IDENTIFIER .  48) (CHARACTER_LITERAL .  50) 
(STRING_LITERAL .  49) (PLUS .  155) (MINUS .  154) (ABS .  144) (NOT .  728) 
(NUMERIC_LITERAL .  156) (NULL .  151) (NEW .  149) (LEFT_PAREN .  148))
       ((default . error) (PRIVATE . (task_body . 0)) (END . (task_body . 0)) 
(BEGIN . (task_body . 0)) (ENTRY . (task_body . 0)) (FOR . (task_body . 0)) 
(FUNCTION . (task_body . 0)) (GENERIC . (task_body . 0)) (NOT . (task_body . 
0)) (OVERRIDING . (task_body . 0)) (PACKAGE . (task_body . 0)) (PRAGMA . 
(task_body . 0)) (PROCEDURE . (task_body . 0)) (PROTECTED . (task_body . 0)) 
(SUBTYPE . (task_body . 0)) (TASK . (task_body . 0)) (TYPE . (task_body . 0)) 
(USE . (task_body . 0)) (IDENTIFIE [...]
       ((default . error) (THEN . (accept_statement . 0)) (WHEN . 
(accept_statement . 0)) (EXCEPTION . (accept_statement . 0)) (ELSIF . 
(accept_statement . 0)) (ELSE . (accept_statement . 0)) (OR . (accept_statement 
. 0)) (END . (accept_statement . 0)) (ACCEPT . (accept_statement . 0)) (ABORT . 
(accept_statement . 0)) (BEGIN . (accept_statement . 0)) (CASE . 
(accept_statement . 0)) (DECLARE . (accept_statement . 0)) (DELAY . 
(accept_statement . 0)) (EXIT . (accept_statement . 0)) (FOR . ( [...]
       ((default . error) (OR . (if_statement . 2)) (THEN . (if_statement . 2)) 
(WHEN . (if_statement . 2)) (EXCEPTION . (if_statement . 2)) (END . 
(if_statement . 2)) (LESS_LESS . (if_statement . 2)) (ACCEPT . (if_statement . 
2)) (ABORT . (if_statement . 2)) (BEGIN . (if_statement . 2)) (CASE . 
(if_statement . 2)) (DECLARE . (if_statement . 2)) (DELAY . (if_statement . 2)) 
(EXIT . (if_statement . 2)) (FOR . (if_statement . 2)) (GOTO . (if_statement . 
2)) (IF . (if_statement . 2)) (LOOP . [...]
-      ((default . error) (SEMICOLON .  1322))
+      ((default . error) (SEMICOLON .  1313))
       ((default . error) (WHEN . (if_statement . 0)) (THEN . (if_statement . 
0)) (OR . (if_statement . 0)) (ELSIF . (if_statement . 0)) (ELSE . 
(if_statement . 0)) (CHARACTER_LITERAL . (if_statement . 0)) (STRING_LITERAL . 
(if_statement . 0)) (IDENTIFIER . (if_statement . 0)) (WHILE . (if_statement . 
0)) (SELECT . (if_statement . 0)) (RETURN . (if_statement . 0)) (REQUEUE . 
(if_statement . 0)) (RAISE . (if_statement . 0)) (PRAGMA . (if_statement . 0)) 
(NULL . (if_statement . 0)) (LOOP .  [...]
-      ((default . error) (RIGHT_PAREN .  1332))
-      ((default . error) (BEGIN .  1331))
+      ((default . error) (RIGHT_PAREN .  1323))
+      ((default . error) (BEGIN .  1322))
       ((default . error) (BEGIN . (private_extension_declaration . 0)) (ENTRY 
. (private_extension_declaration . 0)) (FOR . (private_extension_declaration . 
0)) (FUNCTION . (private_extension_declaration . 0)) (GENERIC . 
(private_extension_declaration . 0)) (NOT . (private_extension_declaration . 
0)) (OVERRIDING . (private_extension_declaration . 0)) (PACKAGE . 
(private_extension_declaration . 0)) (PRAGMA . (private_extension_declaration . 
0)) (PROCEDURE . (private_extension_declaration  [...]
       ((default . error) (WHEN . (variant_part . 0)) (END . (variant_part . 
0)) (CASE . (variant_part . 0)) (FOR . (variant_part . 0)) (IDENTIFIER . 
(variant_part . 0)))
       ((default . error) (END . (variant . 0)) (WHEN . (variant . 0)))
       ((default . error) (WHEN . (component_declaration . 0)) (END . 
(component_declaration . 0)) (CASE . (component_declaration . 0)) (FOR . 
(component_declaration . 0)) (IDENTIFIER . (component_declaration . 0)))
-      ((default . error) (SEMICOLON .  1330))
+      ((default . error) (SEMICOLON .  1321))
       ((default . error) (END . (component_clause . 0)) (IDENTIFIER . 
(component_clause . 0)))
-      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
-      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
810))
+      ((default . error) (END . (sequence_of_statements_opt . 0)) (EXCEPTION . 
(sequence_of_statements_opt . 0)) (ACCEPT . (label_opt . 0)) (BEGIN . 
(label_opt . 0)) (CASE . (label_opt . 0)) (DECLARE . (label_opt . 0)) (FOR . 
(label_opt . 0)) (IF . (label_opt . 0)) (LOOP . (label_opt . 0)) (RETURN . 
(label_opt . 0)) (SELECT . (label_opt . 0)) (WHILE . (label_opt . 0)) (ABORT . 
(label_opt . 0)) (DELAY . (label_opt . 0)) (EXIT . (label_opt . 0)) (GOTO . 
(label_opt . 0)) (NULL . (label_opt  [...]
+      ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN .  
801))
       ((default . error) (WHEN . (entry_body_formal_part . 0)))
-      ((default . error) (END .  1335))
-      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
718))
-      ((default . error) (SEMICOLON .  1337))
+      ((default . error) (END .  1326))
+      ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER .  
710))
+      ((default . error) (SEMICOLON .  1328))
       ((default . error) (PROCEDURE . (entry_body . 0)) (OVERRIDING . 
(entry_body . 0)) (NOT . (entry_body . 0)) (FUNCTION . (entry_body . 0)) (FOR . 
(entry_body . 0)) (ENTRY . (entry_body . 0)) (END . (entry_body . 0)))]
      [((compilation_unit . 13)(compilation_unit_list . 14)(context_item . 
15)(function_specification . 16)(generic_declaration . 17)(generic_formal_part 
. 18)(generic_instantiation . 19)(generic_package_declaration . 
20)(generic_renaming_declaration . 21)(generic_subprogram_declaration . 
22)(library_item . 23)(library_unit_declaration . 
24)(library_unit_renaming_declaration . 25)(overriding_indicator_opt . 
26)(package_body . 27)(package_declaration . 28)(package_renaming_declaration . 
29 [...]
       ((attribute_reference . 51)(name . 87)(qualified_expression . 
54)(selected_component . 55))
@@ -3243,31 +3234,31 @@
       nil
       nil
       ((actual_parameter_part . 92)(formal_part . 
93)(parameter_and_result_profile . 94))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(identifie [...]
-      ((access_definition . 233)(null_exclusion_opt . 234))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(identifie [...]
+      ((access_definition . 227)(null_exclusion_opt . 228))
       nil
-      ((aggregate . 225)(attribute_reference . 51)(attribute_designator . 
226)(name . 227)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 219)(attribute_reference . 51)(attribute_designator . 
220)(name . 221)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
-      ((mode_opt . 219))
+      ((mode_opt . 213))
       nil
       nil
-      ((attribute_reference . 51)(name . 215)(qualified_expression . 
54)(selected_component . 55))
-      ((aspect_specification_opt . 214))
-      ((discriminant_part_opt . 212))
+      ((attribute_reference . 51)(name . 209)(qualified_expression . 
54)(selected_component . 55))
+      ((aspect_specification_opt . 208))
+      ((discriminant_part_opt . 206))
       ((actual_parameter_part . 92))
       ((actual_parameter_part . 92))
       ((actual_parameter_part . 92))
       nil
-      ((attribute_reference . 51)(name_list . 206)(name . 
53)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name_list . 200)(name . 
53)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((attribute_reference . 51)(name . 200)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
185)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 
196)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(raise_expression .  [...]
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
+      ((attribute_reference . 51)(name . 194)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
193)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 
173)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(raise_expression .  [...]
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 179))
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 159)(expression . 160)(factor . 
161)(if_expression . 162)(name . 163)(pragma_argument_association . 
164)(pragma_argument_association_list . 165)(primary . 
166)(qualified_expression . 54)(quantified_expression . 167)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation  [...]
+      ((actual_parameter_part . 92)(aspect_specification_opt . 191))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
160)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 169)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
       nil
       ((aspect_specification_opt . 143))
       nil
@@ -3289,26 +3280,26 @@
       ((actual_parameter_part . 92)(formal_part . 
93)(parameter_and_result_profile . 94))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 397)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 391)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 396))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 390))
       nil
       nil
       nil
       ((actual_parameter_part . 92))
-      ((function_specification . 16)(overriding_indicator_opt . 
393)(package_body . 328)(procedure_specification . 32)(proper_body . 
394)(protected_body . 336)(subprogram_body . 343)(task_body . 348))
+      ((function_specification . 16)(overriding_indicator_opt . 
387)(package_body . 298)(procedure_specification . 32)(proper_body . 
388)(protected_body . 306)(subprogram_body . 313)(task_body . 318))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
389)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 388)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((quantifier . 387))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 384)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
381)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 382)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 383)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((attribute_reference . 51)(name . 379)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
383)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 382)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((quantifier . 381))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 377)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
374)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 375)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 376)(factor 
. 174)(if_expres [...]
+      ((attribute_reference . 51)(name . 372)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 378)(qualified_expression . 
54)(selected_component . 55))
       nil
+      ((attribute_reference . 51)(name . 369)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -3318,9 +3309,6 @@
       nil
       nil
       nil
-      ((actual_parameter_part . 92))
-      nil
-      nil
       nil
       nil
       nil
@@ -3330,16 +3318,11 @@
       nil
       nil
       nil
-      ((relational_operator . 364))
-      ((multiplying_operator . 363))
-      ((binary_adding_operator . 358))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55)(term . 
176)(term_list . 354))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 313)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
@@ -3350,32 +3333,34 @@
       nil
       nil
       nil
+      ((relational_operator . 345))
+      ((multiplying_operator . 335))
+      ((binary_adding_operator . 330))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55)(term . 
188)(term_list . 326))
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 283)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((actual_parameter_part . 92))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 268))
       nil
-      ((relational_operator . 284))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 274))
       nil
       nil
       nil
+      ((attribute_reference . 51)(name . 262)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 268)(qualified_expression . 
54)(selected_component . 55))
       nil
-      nil
-      ((attribute_reference . 51)(name . 266)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 265)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 264)(qualified_expression . 
54)(selected_component . 55))
-      ((discriminant_specification_opt . 261)(discriminant_specification_list 
. 262)(identifier_list . 263))
-      ((aspect_specification_opt . 259))
-      ((attribute_reference . 51)(name . 256)(qualified_expression . 
54)(selected_component . 55)(subprogram_default . 257))
+      ((attribute_reference . 51)(name . 260)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 259)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 258)(qualified_expression . 
54)(selected_component . 55))
+      ((discriminant_specification_opt . 255)(discriminant_specification_list 
. 256)(identifier_list . 257))
+      ((aspect_specification_opt . 253))
+      ((attribute_reference . 51)(name . 250)(qualified_expression . 
54)(selected_component . 55)(subprogram_default . 251))
       nil
       ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((access_definition . 248)(null_exclusion_opt . 249))
-      ((access_definition . 246)(null_exclusion_opt . 247))
+      ((access_definition . 242)(null_exclusion_opt . 243))
+      ((access_definition . 240)(null_exclusion_opt . 241))
       nil
       nil
       nil
@@ -3389,75 +3374,61 @@
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
244)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
238)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
-      ((identifier_list . 236)(parameter_specification . 533))
-      ((aliased_opt . 532))
-      ((general_access_modifier_opt . 529)(protected_opt . 530))
+      ((identifier_list . 230)(parameter_specification . 525))
+      ((aliased_opt . 524))
+      ((general_access_modifier_opt . 521)(protected_opt . 522))
       ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
525)(qualified_expression . 54)(selected_component . 55))
-      ((aspect_specification_opt . 524))
-      ((attribute_reference . 51)(name . 522)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
517)(qualified_expression . 54)(selected_component . 55))
+      ((aspect_specification_opt . 516))
+      ((attribute_reference . 51)(name . 514)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
-      ((aspect_specification_opt . 519)(attribute_reference . 51)(name . 
256)(qualified_expression . 54)(selected_component . 55)(subprogram_default . 
520))
+      ((aspect_specification_opt . 511)(attribute_reference . 51)(name . 
250)(qualified_expression . 54)(selected_component . 55)(subprogram_default . 
512))
       nil
       nil
       ((actual_parameter_part . 92))
-      ((aspect_specification_opt . 518))
-      ((abstract_limited_synchronized_opt . 510)(abstract_tagged_limited_opt . 
511)(access_definition . 512)(array_type_definition . 
513)(formal_type_definition . 514)(formal_derived_type_definition . 
515)(interface_type_definition . 516)(null_exclusion_opt . 517))
-      nil
+      ((aspect_specification_opt . 510))
+      ((abstract_limited_synchronized_opt . 502)(abstract_tagged_limited_opt . 
503)(access_definition . 504)(array_type_definition . 
505)(formal_type_definition . 506)(formal_derived_type_definition . 
507)(interface_type_definition . 508)(null_exclusion_opt . 509))
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 491))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 490))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 489))
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 488))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 483))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 482))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 481))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 486)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 480))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 478)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(association_opt . 485)(attribute_reference . 
51)(choice_expression . 186)(choice_relation_and_list . 
187)(choice_relation_or_list . 188)(choice_relation_xor_list . 
189)(choice_relation_and_then_list . 190)(choice_relation_or_else_list . 
191)(choice_relation . 192)(discrete_choice . 193)(discrete_choice_list . 
194)(expression . 195)(expression_opt . 196)(factor . 161)(name . 197)(primary 
. 166)(qualified_expression . 54)(raise_expression . 168)(range . 198)(relati 
[...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice_list . 480)(membership_choice . 481)(name . 197)(primary 
. 166)(qualified_expression . 54)(range . 482)(selected_component . 
55)(simple_expression . 483)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((aggregate . 158)(association_opt . 477)(attribute_reference . 
51)(choice_expression . 162)(choice_relation_and_list . 
163)(choice_relation_or_list . 164)(choice_relation_xor_list . 
165)(choice_relation_and_then_list . 166)(choice_relation_or_else_list . 
167)(choice_relation . 168)(discrete_choice . 170)(discrete_choice_list . 
171)(expression . 172)(expression_opt . 173)(factor . 174)(name . 176)(primary 
. 177)(qualified_expression . 54)(raise_expression . 179)(range . 180)(relati 
[...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 478)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((attribute_reference . 473)(direct_name . 474)(name . 
475)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 68)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 477)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
-      ((aggregate . 225)(attribute_reference . 51)(attribute_designator . 
226)(name . 227)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 474)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(range . 198)(selected_component . 55)(simple_expression . 475)(term . 
176)(term_list . 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 473)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
471)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
469)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
467)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
464)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
463)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
461)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 460)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 458)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((attribute_reference . 455)(direct_name . 456)(name . 
457)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 68)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 460)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(generic_renaming_declaration . 
291)(generic_subprog [...]
       nil
       nil
       nil
@@ -3467,12 +3438,12 @@
       nil
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 442)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(generic_renaming_declaration . 
321)(generic_subprog [...]
       nil
       nil
       nil
       nil
       nil
+      ((function_specification . 454)(procedure_specification . 
455)(subprogram_specification . 456))
       nil
       nil
       nil
@@ -3482,7 +3453,6 @@
       nil
       nil
       nil
-      ((function_specification . 436)(procedure_specification . 
437)(subprogram_specification . 438))
       nil
       nil
       nil
@@ -3499,146 +3469,159 @@
       nil
       nil
       nil
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 452)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92))
+      ((binary_adding_operator . 330))
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55)(term . 
451))
       nil
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 450)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice_list . 446)(membership_choice . 447)(name . 176)(primary 
. 177)(qualified_expression . 54)(range . 448)(selected_component . 
55)(simple_expression . 449)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 444)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 434)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((binary_adding_operator . 358))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55)(term . 
433))
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 443)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 442)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 440)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 438)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 437)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 435)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 432)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 431)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 430)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 428)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 426)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 425)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 433)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
432)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 219)(attribute_reference . 51)(attribute_designator . 
220)(name . 221)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 429)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(range . 180)(selected_component . 55)(simple_expression . 430)(term . 
188)(term_list . 189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 428)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 423)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
425)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
423)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
421)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 421)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
420)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 159)(expression . 160)(factor . 
161)(if_expression . 162)(name . 163)(pragma_argument_association . 
418)(primary . 166)(qualified_expression . 54)(quantified_expression . 
167)(raise_expression . 168)(relation_and_list . 169)(relation_and_then_list . 
170)(relation_or_list . 171)(relation_or_else_list . 172)(relation_xor_list . 
173)(relation . 174)(selected_component . 55)(simple_e [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 417)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
418)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
417)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
415)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 413)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       ((actual_parameter_part . 92))
-      ((actual_parameter_part . 92))
-      nil
-      nil
+      ((attribute_reference . 51)(name . 410)(qualified_expression . 
54)(selected_component . 55))
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
       nil
-      ((iterator_specification . 409))
       nil
+      ((relational_operator . 404))
       nil
       nil
+      ((iterator_specification . 403))
       nil
       nil
-      ((function_specification . 16)(procedure_specification . 
32)(subprogram_specification . 404))
       nil
       nil
       nil
+      ((function_specification . 16)(procedure_specification . 
32)(subprogram_specification . 398))
       nil
-      ((attribute_reference . 51)(name . 401)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 400)(qualified_expression . 
54)(selected_component . 55))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 677))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 676))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 659)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
       nil
-      ((aspect_specification_opt . 629))
       nil
       nil
-      ((case_expression_alternative . 625)(case_expression_alternative_list . 
626))
+      ((attribute_reference . 51)(name . 395)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 394)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 669))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 668))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 651)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
+      ((aspect_specification_opt . 621))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 619)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(association_opt . 184)(association_list . 
618)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 
196)(factor . 161)(name . 197)(primary . 166)(qualified_expression . 
54)(raise_expression .  [...]
       nil
+      ((case_expression_alternative . 617)(case_expression_alternative_list . 
618))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 615)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 611)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 610)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
609)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 
173)(factor . 174)(name . 176)(primary . 177)(qualified_expression . 
54)(raise_expression .  [...]
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 606)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 613)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 612)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((relational_operator . 601))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 611)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
605)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
604)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 168)(relation 
. 610)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list 
. 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
603)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(choice_relation . 
602)(factor . 174)(name . 325)(primary . 177)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 416)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((multiplying_operator . 363))
       nil
       nil
       nil
+      ((relational_operator . 601))
       nil
-      ((aspect_specification_opt . 129))
-      ((aliased_opt . 603))
-      ((attribute_reference . 51)(name . 243)(name_opt . 
600)(qualified_expression . 54)(selected_component . 55))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 599)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
       nil
-      ((access_definition . 597)(null_exclusion_opt . 598))
-      ((discriminant_part_opt . 595))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 599)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aspect_specification_opt . 592))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 598)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 597)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
-      ((aspect_specification_opt . 588))
-      ((attribute_reference . 51)(name . 587)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 179)(relation 
. 596)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list 
. 189)(unary_adding_operator . 190))
       nil
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice_list . 595)(membership_choice . 447)(name . 176)(primary 
. 177)(qualified_expression . 54)(range . 448)(selected_component . 
55)(simple_expression . 449)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((actual_parameter_part . 92))
-      ((actual_parameter_part . 92))
       nil
       nil
       nil
-      ((relational_operator . 579))
       nil
+      ((multiplying_operator . 335))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
583)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
582)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
581)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_relation . 
580)(factor . 161)(name . 163)(primary . 166)(qualified_expression . 
54)(selected_component . 55)(simple_expression . 462)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
+      ((aspect_specification_opt . 129))
+      ((aliased_opt . 587))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
584)(qualified_expression . 54)(selected_component . 55))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 583)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
+      ((access_definition . 581)(null_exclusion_opt . 582))
+      ((discriminant_part_opt . 579))
       nil
       nil
-      ((relational_operator . 579))
+      ((aspect_specification_opt . 576))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice_list . 577)(membership_choice . 481)(name . 197)(primary 
. 166)(qualified_expression . 54)(range . 482)(selected_component . 
55)(simple_expression . 483)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((aspect_specification_opt . 572))
+      ((attribute_reference . 51)(name . 571)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
+      ((actual_parameter_part . 92))
       nil
       nil
       nil
@@ -3647,9 +3630,9 @@
       nil
       nil
       nil
-      ((access_definition . 568)(attribute_reference . 51)(name . 
569)(null_exclusion_opt . 517)(null_exclusion_opt_name_type . 
570)(qualified_expression . 54)(selected_component . 571))
+      ((access_definition . 560)(attribute_reference . 51)(name . 
561)(null_exclusion_opt . 509)(null_exclusion_opt_name_type . 
562)(qualified_expression . 54)(selected_component . 563))
       nil
-      ((discriminant_specification_opt . 565)(identifier_list . 263))
+      ((discriminant_specification_opt . 557)(identifier_list . 257))
       nil
       nil
       nil
@@ -3663,48 +3646,48 @@
       nil
       nil
       nil
-      ((aspect_specification_opt . 552))
+      ((aspect_specification_opt . 544))
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 547))
+      ((aspect_specification_opt . 539))
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 544))
-      ((attribute_reference . 51)(name . 543)(qualified_expression . 
54)(selected_component . 55))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 542))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 540)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aspect_specification_opt . 536))
+      ((attribute_reference . 51)(name . 535)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 534))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 532)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 538)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 530)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
-      ((access_definition . 534)(mode_opt . 535)(null_exclusion_opt . 517))
+      ((access_definition . 526)(mode_opt . 527)(null_exclusion_opt . 509))
       nil
       nil
-      ((null_exclusion_opt . 813))
-      ((formal_part . 93)(parameter_and_result_profile . 812))
-      ((formal_part . 117)(parameter_profile_opt . 811))
+      ((null_exclusion_opt . 804))
+      ((formal_part . 93)(parameter_and_result_profile . 803))
+      ((formal_part . 117)(parameter_profile_opt . 802))
       ((actual_parameter_part . 92))
       nil
-      ((aspect_specification_opt . 809))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 808)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aspect_specification_opt . 800))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 799)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((actual_parameter_part . 92)(formal_package_actual_part . 806))
+      ((actual_parameter_part . 92)(formal_package_actual_part . 797))
       nil
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(name . 802)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 793)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -3716,7 +3699,7 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 790)(discrete_subtype_definition_list . 791)(factor . 
161)(index_subtype_definition . 792)(index_subtype_definition_list . 793)(name 
. 794)(primary . 166)(qualified_expression . 54)(range . 
740)(selected_component . 55)(simple_expression . 487)(subtype_indication . 
741)(term . 176)(term_list . 177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 781)(discrete_subtype_definition_list . 782)(factor . 
174)(index_subtype_definition . 783)(index_subtype_definition_list . 784)(name 
. 785)(primary . 177)(qualified_expression . 54)(range . 
732)(selected_component . 55)(simple_expression . 479)(subtype_indication . 
733)(term . 188)(term_list . 189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3731,77 +3714,77 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 
161)(membership_choice . 785)(name . 197)(primary . 166)(qualified_expression . 
54)(range . 482)(selected_component . 55)(simple_expression . 483)(term . 
176)(term_list . 177)(unary_adding_operator . 178))
+      ((aggregate . 775)(record_rep . 776))
+      nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 772)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 191))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 784)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 783)(term . 176)(term_list . 177)(unary_adding_operator 
. 178))
+      ((discriminant_part_opt . 769))
+      ((aspect_specification_opt . 720))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 767))
       nil
+      ((discriminant_part_opt . 764))
+      ((aspect_specification_opt . 719))
       nil
       nil
       nil
-      ((aggregate . 781)(record_rep . 782))
+      ((attribute_reference . 51)(name . 758)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 778)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 179))
       nil
-      ((discriminant_part_opt . 775))
-      ((aspect_specification_opt . 728))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 773))
       nil
-      ((discriminant_part_opt . 770))
-      ((aspect_specification_opt . 727))
       nil
+      ((constant_opt . 754))
       nil
       nil
-      ((attribute_reference . 51)(name . 764)(qualified_expression . 
54)(selected_component . 55))
+      ((paren_expression . 749))
+      ((formal_part . 117)(parameter_profile_opt . 747))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 745)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
+      ((attribute_reference . 51)(name . 237)(name_opt . 
744)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 
174)(membership_choice . 743)(name . 176)(primary . 177)(qualified_expression . 
54)(range . 448)(selected_component . 55)(simple_expression . 449)(term . 
188)(term_list . 189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
-      ((constant_opt . 760))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 742)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 741)(term . 188)(term_list . 189)(unary_adding_operator 
. 190))
       nil
-      ((paren_expression . 755))
-      ((formal_part . 117)(parameter_profile_opt . 753))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 751)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
-      ((attribute_reference . 51)(name . 243)(name_opt . 
750)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 749)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
       nil
       nil
       nil
+      ((elsif_expression_item . 737)(elsif_expression_list . 738))
       nil
-      ((elsif_expression_item . 745)(elsif_expression_list . 746))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 742)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 738)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 735)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 733))
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 730)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_o [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 734)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 730)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 727)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 725))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 722)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_o [...]
       nil
       nil
-      ((aspect_specification_opt . 728))
-      ((aspect_specification_opt . 727))
+      ((aspect_specification_opt . 720))
+      ((aspect_specification_opt . 719))
       nil
       nil
-      ((attribute_reference . 51)(name . 725)(qualified_expression . 
54)(selected_component . 55))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 724)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 723)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 722)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 721)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((identifier_opt . 719))
-      ((iterator_specification . 716)(iterator_specification_opt . 717))
+      ((attribute_reference . 51)(name . 717)(qualified_expression . 
54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 716)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 715)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 714)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 713)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((identifier_opt . 711))
+      ((iterator_specification . 708)(iterator_specification_opt . 709))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 714)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 706)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((attribute_reference . 51)(name . 711)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 709)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
706)(extended_return_object_declaration . 
707)(extended_return_object_declaration_opt . 708)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_op [...]
-      ((accept_statement . 694)(attribute_reference . 51)(delay_alternative . 
695)(delay_statement . 696)(entry_call_alternative . 697)(name . 
698)(procedure_call_statement . 699)(qualified_expression . 
54)(selected_component . 55)(select_alternative . 700)(select_alternative_list 
. 701)(select_alternative_list_opt . 702)(triggering_alternative . 703))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 691)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 703)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 701)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 698)(extended_return_object_declaration . 
699)(extended_return_object_declaration_opt . 700)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(raise_expression . 
179)(relation_and_list . 181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list  
[...]
+      ((accept_statement . 686)(attribute_reference . 51)(delay_alternative . 
687)(delay_statement . 688)(entry_call_alternative . 689)(name . 
690)(procedure_call_statement . 691)(qualified_expression . 
54)(selected_component . 55)(select_alternative . 692)(select_alternative_list 
. 693)(select_alternative_list_opt . 694)(triggering_alternative . 695))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 683)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3817,7 +3800,7 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(compound_statement . 685)(conditional_entry_call . 
654)(delay_statement . 655)(exit_statement . 656)(extended_return_statement . 
657)(if_statement . 660)(iteration_scheme . 661)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 
54)(raise_statement . 667)(requeue_statement . 668)(s [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(compound_statement . 677)(conditional_entry_call . 
646)(delay_statement . 647)(exit_statement . 648)(extended_return_statement . 
649)(if_statement . 652)(iteration_scheme . 653)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 
54)(raise_statement . 659)(requeue_statement . 660)(s [...]
       nil
       ((actual_parameter_part . 92))
       nil
@@ -3826,7 +3809,7 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
681)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
673)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -3835,26 +3818,26 @@
       nil
       nil
       nil
-      ((exception_handler . 953)(exception_handler_list . 
954)(exception_handler_list_opt . 955))
+      ((exception_handler . 944)(exception_handler_list . 
945)(exception_handler_list_opt . 946))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 951)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 942)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((attribute_reference . 51)(name . 243)(name_opt . 
949)(qualified_expression . 54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((attribute_reference . 51)(name . 237)(name_opt . 
940)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 946)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 937)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 649)(actual_parameter_part . 
92)(assignment_statement . 650)(asynchronous_select . 651)(attribute_reference 
. 51)(block_statement . 652)(case_statement . 653)(conditional_entry_call . 
654)(delay_statement . 655)(exit_statement . 656)(extended_return_statement . 
657)(goto_label . 658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statem [...]
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(actual_parameter_part . 
92)(assignment_statement . 642)(asynchronous_select . 643)(attribute_reference 
. 51)(block_statement . 644)(case_statement . 645)(conditional_entry_call . 
646)(delay_statement . 647)(exit_statement . 648)(extended_return_statement . 
649)(goto_label . 650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statem [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -3875,108 +3858,107 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 922)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 913)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       ((actual_parameter_part . 92))
-      ((actual_parameter_part . 915)(actual_parameter_part_opt . 916))
+      ((actual_parameter_part . 906)(actual_parameter_part_opt . 907))
       nil
       nil
-      ((case_expression_alternative . 911))
+      ((case_expression_alternative . 902))
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
-      ((attribute_reference . 51)(name . 907)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 898)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 905)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 896)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 903)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 902)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 894)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 893)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((elsif_expression_item . 901))
+      ((elsif_expression_item . 892))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 896)(factor . 161)(identifier_list . 236)(name . 739)(parameter_specification 
. 237)(parameter_specification_list . 238)(primary . 166)(qualified_expression 
. 54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aspect_specification_opt . 895))
-      ((aggregate . 157)(attribute_reference . 51)(case_expression . 
158)(conditional_quantified_expression . 893)(expression . 894)(factor . 
161)(if_expression . 162)(name . 163)(primary . 166)(qualified_expression . 
54)(quantified_expression . 167)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_l [...]
-      ((aspect_specification_opt . 892))
-      ((aspect_specification_opt . 891))
-      ((aspect_specification_opt . 890))
-      ((aspect_specification_opt . 889))
       nil
-      ((access_definition . 886)(array_type_definition . 
887)(attribute_reference . 51)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
888))
-      nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 884)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 243)(name_opt . 
883)(qualified_expression . 54)(selected_component . 55))
-      ((actual_parameter_part . 92))
-      ((attribute_reference . 51)(name . 881)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 880)(qualified_expression . 
54)(selected_component . 55))
-      ((abstract_limited_synchronized_opt . 870)(abstract_limited_opt . 
871)(abstract_tagged_limited_opt . 872)(access_definition . 
873)(array_type_definition . 874)(derived_type_definition . 
875)(enumeration_type_definition . 876)(interface_type_definition . 
877)(null_exclusion_opt . 517)(record_type_definition . 878)(type_definition . 
879))
       nil
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 886)(factor . 174)(identifier_list . 230)(name . 731)(parameter_specification 
. 231)(parameter_specification_list . 232)(primary . 177)(qualified_expression 
. 54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aspect_specification_opt . 885))
+      ((aggregate . 158)(attribute_reference . 51)(case_expression . 
161)(conditional_quantified_expression . 883)(expression . 172)(expression_opt 
. 884)(factor . 174)(if_expression . 175)(name . 325)(primary . 
177)(qualified_expression . 54)(quantified_expression . 178)(raise_expression . 
179)(relation_and_list . 181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 3 [...]
+      ((aspect_specification_opt . 882))
+      ((aspect_specification_opt . 881))
+      ((aspect_specification_opt . 880))
+      ((aspect_specification_opt . 879))
       nil
-      ((aspect_specification_opt . 858))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((access_definition . 876)(array_type_definition . 
877)(attribute_reference . 51)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
878))
       nil
-      ((aspect_specification_opt . 854))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 874)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 237)(name_opt . 
873)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92))
+      ((attribute_reference . 51)(name . 871)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 870)(qualified_expression . 
54)(selected_component . 55))
+      ((abstract_limited_synchronized_opt . 860)(abstract_limited_opt . 
861)(abstract_tagged_limited_opt . 862)(access_definition . 
863)(array_type_definition . 864)(derived_type_definition . 
865)(enumeration_type_definition . 866)(interface_type_definition . 
867)(null_exclusion_opt . 509)(record_type_definition . 868)(type_definition . 
869))
       nil
-      ((aspect_specification_opt . 852))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
       nil
+      ((aspect_specification_opt . 848))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 846)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((mod_clause_opt . 845))
+      ((aspect_specification_opt . 844))
       nil
+      ((aspect_specification_opt . 842))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 836)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((mod_clause_opt . 835))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 840)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 839)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((attribute_reference . 51)(name . 569)(qualified_expression . 
54)(selected_component . 838))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 831)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 830)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((attribute_reference . 51)(name . 561)(qualified_expression . 
54)(selected_component . 829))
       nil
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 831)(index_constraint . 832))
+      ((actual_parameter_part . 92)(constraint . 822)(index_constraint . 823))
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 827)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(interface_list . 826)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((attribute_reference . 51)(interface_list . 825)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 818)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 817)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 816)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(interface_list . 823)(name . 
824)(qualified_expression . 54)(selected_component . 55))
-      ((actual_parameter_part . 92)(and_interface_list_opt . 822))
+      ((attribute_reference . 51)(interface_list . 814)(name . 
815)(qualified_expression . 54)(selected_component . 55))
+      ((actual_parameter_part . 92)(and_interface_list_opt . 813))
       nil
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
-      ((aspect_specification_opt . 819))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
+      ((aspect_specification_opt . 810))
       nil
-      ((aspect_specification_opt . 818))
+      ((aspect_specification_opt . 809))
       nil
-      ((identifier_list . 236)(parameter_specification . 
237)(parameter_specification_list . 238))
+      ((identifier_list . 230)(parameter_specification . 
231)(parameter_specification_list . 232))
       nil
       nil
-      ((attribute_reference . 51)(name . 816)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 815)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 807)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 806)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       ((actual_parameter_part . 92))
       nil
       nil
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1082)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1073)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
       ((actual_parameter_part . 92))
@@ -3984,14 +3966,14 @@
       nil
       nil
       nil
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(discrete_subtype_definition . 
790)(discrete_subtype_definition_ [...]
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 1003)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(discrete_subtype_definition . 
781)(discrete_subtype_definition_ [...]
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 994)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((attribute_reference . 51)(index_subtype_definition . 1073)(name . 
1074)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(index_subtype_definition . 1064)(name . 
1065)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 1071)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 1062)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -3999,51 +3981,51 @@
       nil
       nil
       nil
+      ((component_clause . 1059)(component_clause_list . 1060))
       nil
-      ((component_clause . 1068)(component_clause_list . 1069))
       nil
+      ((aspect_specification_opt . 1056))
+      ((attribute_reference . 51)(interface_list . 1055)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((aspect_specification_opt . 1065))
-      ((attribute_reference . 51)(interface_list . 1064)(name . 
824)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1050))
       nil
-      ((aspect_specification_opt . 1059))
+      ((attribute_reference . 51)(interface_list . 1048)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(interface_list . 1057)(name . 
824)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1042))
       nil
-      ((aspect_specification_opt . 1051))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1040)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1039)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((enumeration_literal . 1037)(enumeration_literal_list . 1038))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1049)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1048)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((enumeration_literal . 1046)(enumeration_literal_list . 1047))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1034)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1043)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1032)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1027)(component_list . 1028)(component_list_opt . 
1029)(enumeration_representation_clause . 285)(identifier_list . 
1030)(record_representation_clause . 309)(variant_part . 1031))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1041)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1036)(component_list . 1037)(component_list_opt . 
1038)(enumeration_representation_clause . 315)(identifier_list . 
1039)(record_representation_clause . 339)(variant_part . 1040))
       nil
       nil
+      ((record_definition . 1019))
       nil
-      ((record_definition . 1028))
       nil
       nil
       nil
       nil
       nil
+      ((aspect_specification_opt . 1017))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1016))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1015))
+      ((attribute_reference . 51)(name . 1014)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((aspect_specification_opt . 1026))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1025))
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1024))
-      ((attribute_reference . 51)(name . 1023)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
+      ((aspect_specification_opt . 1011))
+      ((aspect_specification_opt . 1009))
+      ((aspect_specification_opt . 1007))
       nil
-      ((aspect_specification_opt . 1020))
-      ((aspect_specification_opt . 1018))
-      ((aspect_specification_opt . 1016))
       nil
       nil
       nil
@@ -4051,54 +4033,54 @@
       nil
       nil
       nil
+      ((attribute_reference . 51)(name . 237)(name_opt . 
997)(qualified_expression . 54)(selected_component . 55))
       nil
-      ((attribute_reference . 51)(name . 243)(name_opt . 
1006)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1005)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 996)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
197)(primary . 166)(qualified_expression . 54)(range . 1003)(selected_component 
. 55)(simple_expression . 487)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
176)(primary . 177)(qualified_expression . 54)(range . 994)(selected_component 
. 55)(simple_expression . 479)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
-      ((attribute_reference . 51)(name . 1002)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 999)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((attribute_reference . 51)(name . 993)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 990)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aspect_clause . 989)(at_clause . 308)(entry_body . 
990)(enumeration_representation_clause . 315)(expression_function_declaration . 
991)(function_specification . 16)(null_procedure_declaration . 
992)(overriding_indicator_opt . 993)(procedure_specification . 
32)(protected_operation_item . 994)(protected_operation_item_list . 
995)(protected_operation_item_list_opt . 996)(record_representation_clause . 
339)(subprogram_body . 997)(subprogram_declaration . 998))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 987)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
-      ((aggregate . 157)(association_opt . 184)(association_list . 
201)(attribute_reference . 51)(case_expression . 158)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 
192)(conditional_quantified_expression . 202)(discrete_choice . 
193)(discrete_choice_list . 194)(expression . 195)(expression_opt . 196)(factor 
. 161)(if_expres [...]
+      ((aspect_clause . 980)(at_clause . 278)(entry_body . 
981)(enumeration_representation_clause . 285)(expression_function_declaration . 
982)(function_specification . 16)(null_procedure_declaration . 
983)(overriding_indicator_opt . 984)(procedure_specification . 
32)(protected_operation_item . 985)(protected_operation_item_list . 
986)(protected_operation_item_list_opt . 987)(record_representation_clause . 
309)(subprogram_body . 988)(subprogram_declaration . 989))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 978)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
+      ((aggregate . 158)(association_opt . 159)(association_list . 
195)(attribute_reference . 51)(case_expression . 161)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 
168)(conditional_quantified_expression . 196)(discrete_choice . 
170)(discrete_choice_list . 171)(expression . 172)(expression_opt . 173)(factor 
. 174)(if_expres [...]
       nil
-      ((formal_part . 117)(parameter_profile_opt . 986))
+      ((formal_part . 117)(parameter_profile_opt . 977))
       nil
-      ((identifier_opt . 985))
-      ((case_statement_alternative . 983)(case_statement_alternative_list . 
984))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 981)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
+      ((identifier_opt . 976))
+      ((case_statement_alternative . 974)(case_statement_alternative_list . 
975))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 972)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 979)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 970)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 976)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 967)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 974)(if_statement . 660)(iteration_scheme 
. 661)(label_opt . 662)(loop_statement . 663)(name . 664)(pragma . 
665)(procedure_call_statement . 666)(qualified_expression . 54)(ra [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 965)(if_statement . 652)(iteration_scheme 
. 653)(label_opt . 654)(loop_statement . 655)(name . 656)(pragma . 
657)(procedure_call_statement . 658)(qualified_expression . 54)(ra [...]
       nil
       nil
-      ((aliased_opt . 973))
+      ((aliased_opt . 964))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((accept_statement . 694)(delay_alternative . 695)(delay_statement . 
967)(select_alternative . 969))
+      ((accept_statement . 686)(delay_alternative . 687)(delay_statement . 
958)(select_alternative . 960))
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((delay_alternative . 966)(delay_statement . 967))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((delay_alternative . 957)(delay_statement . 958))
       nil
       nil
       nil
@@ -4107,9 +4089,9 @@
       nil
       nil
       nil
-      ((attribute_reference . 51)(exception_choice . 
959)(exception_choice_list . 960)(name . 961)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(exception_choice . 
950)(exception_choice_list . 951)(name . 952)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((exception_handler . 956))
+      ((exception_handler . 947))
       nil
       nil
       nil
@@ -4120,26 +4102,26 @@
       nil
       nil
       nil
-      ((accept_statement . 1179)(delay_alternative . 1180)(delay_statement . 
967))
+      ((accept_statement . 1170)(delay_alternative . 1171)(delay_statement . 
958))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((constant_opt . 1171))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((constant_opt . 1162))
       nil
       nil
       nil
-      ((identifier_opt . 1167))
-      ((elsif_statement_item . 1165)(elsif_statement_list . 1166))
+      ((identifier_opt . 1158))
+      ((elsif_statement_item . 1156)(elsif_statement_list . 1157))
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 1159)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_ [...]
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 1150)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_ [...]
       nil
-      ((case_statement_alternative . 1158))
+      ((case_statement_alternative . 1149))
       nil
       nil
       nil
@@ -4148,21 +4130,21 @@
       nil
       nil
       nil
-      ((function_specification . 436)(procedure_specification . 
437)(subprogram_specification . 1151))
+      ((function_specification . 454)(procedure_specification . 
455)(subprogram_specification . 1142))
       nil
-      ((aspect_clause . 989)(at_clause . 308)(entry_body . 
990)(enumeration_representation_clause . 315)(expression_function_declaration . 
991)(function_specification . 16)(null_procedure_declaration . 
992)(overriding_indicator_opt . 993)(procedure_specification . 
32)(protected_operation_item . 1150)(record_representation_clause . 
339)(subprogram_body . 997)(subprogram_declaration . 998))
+      ((aspect_clause . 980)(at_clause . 278)(entry_body . 
981)(enumeration_representation_clause . 285)(expression_function_declaration . 
982)(function_specification . 16)(null_procedure_declaration . 
983)(overriding_indicator_opt . 984)(procedure_specification . 
32)(protected_operation_item . 1141)(record_representation_clause . 
309)(subprogram_body . 988)(subprogram_declaration . 989))
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 1148)(index_constraint . 832))
-      ((attribute_reference . 51)(name . 1147)(qualified_expression . 
54)(selected_component . 55))
+      ((actual_parameter_part . 92)(constraint . 1139)(index_constraint . 823))
+      ((attribute_reference . 51)(name . 1138)(qualified_expression . 
54)(selected_component . 55))
       ((actual_parameter_part . 92))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1146)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1137)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((formal_part . 117)(parameter_profile_opt . 1144))
+      ((formal_part . 117)(parameter_profile_opt . 1135))
       nil
       nil
       nil
@@ -4170,29 +4152,29 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1143)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1134)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1141)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1132)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1139)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1130)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((attribute_reference . 51)(name . 1000)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 991)(qualified_expression . 
54)(selected_component . 55))
       nil
-      ((actual_parameter_part . 92)(aspect_specification_opt . 1137))
+      ((actual_parameter_part . 92)(aspect_specification_opt . 1128))
       nil
       nil
       nil
-      ((aspect_specification_opt . 1133))
+      ((aspect_specification_opt . 1124))
       nil
-      ((attribute_reference . 51)(name . 1132)(qualified_expression . 
54)(selected_component . 55))
-      ((attribute_reference . 51)(name . 732)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 1131))
+      ((attribute_reference . 51)(name . 1123)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 724)(qualified_expression . 
54)(selected_component . 55)(subtype_indication . 1122))
       nil
-      ((direct_name . 1129)(direct_name_opt . 1130))
+      ((direct_name . 1120)(direct_name_opt . 1121))
       nil
       nil
       nil
       nil
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1124)(enumeration_representation_clause . 
315)(identifier_list . 1039)(record_representation_clause . 339)(variant_part . 
1125))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1115)(enumeration_representation_clause . 
285)(identifier_list . 1030)(record_representation_clause . 309)(variant_part . 
1116))
       nil
       nil
       nil
@@ -4203,51 +4185,51 @@
       nil
       nil
       nil
-      ((real_range_specification_opt . 1118))
-      ((real_range_specification_opt . 1117))
+      ((real_range_specification_opt . 1109))
+      ((real_range_specification_opt . 1108))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((identifier_opt . 1111))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1110)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
+      ((identifier_opt . 1102))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1101)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
       nil
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((identifier_opt . 1105))
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1104)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
+      ((identifier_opt . 1096))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1095)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
       nil
       nil
       nil
       nil
       nil
-      ((component_clause . 1100))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1098)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((component_clause . 1091))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1089)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1097)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1088)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
       ((actual_parameter_part . 92))
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1094)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1085)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(name . 163)(primary . 
298)(qualified_expression . 54)(selected_component . 55))
+      ((aggregate . 158)(attribute_reference . 51)(name . 325)(primary . 
371)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((attribute_reference . 51)(name . 1089)(qualified_expression . 
54)(selected_component . 55))
+      ((attribute_reference . 51)(name . 1080)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1087)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1078)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       ((actual_parameter_part . 92))
       nil
-      ((attribute_reference . 51)(name . 1245)(qualified_expression . 
54)(selected_component . 55))
-      ((access_definition . 1243)(attribute_reference . 51)(name . 
732)(null_exclusion_opt . 517)(qualified_expression . 54)(selected_component . 
55)(subtype_indication . 1244))
+      ((attribute_reference . 51)(name . 1236)(qualified_expression . 
54)(selected_component . 55))
+      ((access_definition . 1234)(attribute_reference . 51)(name . 
724)(null_exclusion_opt . 509)(qualified_expression . 54)(selected_component . 
55)(subtype_indication . 1235))
       nil
       nil
       nil
@@ -4256,28 +4238,28 @@
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1240)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1231)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1237)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1228)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((attribute_reference . 51)(interface_list . 1233)(name . 
824)(qualified_expression . 54)(selected_component . 55))
+      ((attribute_reference . 51)(interface_list . 1224)(name . 
815)(qualified_expression . 54)(selected_component . 55))
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1231)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1230)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1222)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1221)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((enumeration_literal . 1229))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1228)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((access_definition . 1093)(attribute_reference . 
51)(component_definition . 1227)(name . 732)(null_exclusion_opt . 
517)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1095))
+      ((enumeration_literal . 1220))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1219)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((access_definition . 1084)(attribute_reference . 
51)(component_definition . 1218)(name . 724)(null_exclusion_opt . 
509)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 
1086))
       nil
       nil
       nil
@@ -4286,47 +4268,47 @@
       nil
       nil
       nil
-      ((and_interface_list_opt . 1224))
-      ((actual_parameter_part . 92)(and_interface_list_opt . 1221)(constraint 
. 1222)(constraint_opt . 1223)(index_constraint . 832))
+      ((and_interface_list_opt . 1215))
+      ((actual_parameter_part . 92)(and_interface_list_opt . 1212)(constraint 
. 1213)(constraint_opt . 1214)(index_constraint . 823))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 1218))
+      ((aspect_specification_opt . 1209))
       nil
-      ((aspect_specification_opt . 1217))
+      ((aspect_specification_opt . 1208))
       nil
-      ((aspect_specification_opt . 1216))
-      ((aspect_specification_opt . 1215))
+      ((aspect_specification_opt . 1207))
+      ((aspect_specification_opt . 1206))
       nil
       nil
       ((actual_parameter_part . 92))
       nil
-      ((identifier_opt . 1214))
+      ((identifier_opt . 1205))
       nil
       ((aspect_specification_opt . 129))
-      ((entry_body_formal_part . 1212)(formal_part . 
117)(parameter_profile_opt . 1213))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1210)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1209)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
+      ((entry_body_formal_part . 1203)(formal_part . 
117)(parameter_profile_opt . 1204))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1201)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1200)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
       nil
       nil
       nil
       nil
       nil
-      ((identifier_opt . 1206))
+      ((identifier_opt . 1197))
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 1204)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1195)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((elsif_statement_item . 1202))
+      ((elsif_statement_item . 1193))
       nil
       nil
       nil
       nil
-      ((access_definition . 1195)(attribute_reference . 51)(name . 
732)(null_exclusion_opt . 517)(qualified_expression . 
54)(return_subtype_indication . 1196)(selected_component . 
55)(subtype_indication . 1197))
+      ((access_definition . 1186)(attribute_reference . 51)(name . 
724)(null_exclusion_opt . 509)(qualified_expression . 
54)(return_subtype_indication . 1187)(selected_component . 
55)(subtype_indication . 1188))
       nil
       nil
       nil
@@ -4334,12 +4316,12 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
-      ((identifier_opt . 1188))
-      ((attribute_reference . 51)(exception_choice . 1187)(name . 
961)(qualified_expression . 54)(selected_component . 55))
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
-      ((attribute_reference . 51)(exception_choice . 
959)(exception_choice_list . 1185)(name . 961)(qualified_expression . 
54)(selected_component . 55))
+      ((identifier_opt . 1179))
+      ((attribute_reference . 51)(exception_choice . 1178)(name . 
952)(qualified_expression . 54)(selected_component . 55))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
+      ((attribute_reference . 51)(exception_choice . 
950)(exception_choice_list . 1176)(name . 952)(qualified_expression . 
54)(selected_component . 55))
       nil
       nil
       nil
@@ -4355,18 +4337,18 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
-      ((identifier_list . 236)(parameter_specification . 
237)(parameter_specification_list . 238))
+      ((identifier_list . 230)(parameter_specification . 
231)(parameter_specification_list . 232))
       nil
       nil
       nil
@@ -4380,68 +4362,68 @@
       nil
       nil
       nil
-      ((variant_list . 1258)(variant . 1259))
+      ((variant_list . 1249)(variant . 1250))
       nil
-      ((aspect_specification_opt . 1256))
+      ((aspect_specification_opt . 1247))
       nil
       nil
       nil
-      ((real_range_specification_opt . 1253))
+      ((real_range_specification_opt . 1244))
       nil
       nil
-      ((identifier_opt . 1251))
+      ((identifier_opt . 1242))
       nil
       nil
       nil
-      ((identifier_opt . 1248))
+      ((identifier_opt . 1239))
       nil
       nil
       nil
       nil
       nil
       nil
-      ((actual_parameter_part . 92)(constraint . 1148)(index_constraint . 832))
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1308)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((actual_parameter_part . 92)(constraint . 1139)(index_constraint . 823))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1299)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 850)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 840)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 856)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(gen [...]
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 846)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(gen [...]
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1305)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1304)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1296)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1295)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((aggregate . 157)(attribute_reference . 51)(choice_expression . 
186)(choice_relation_and_list . 187)(choice_relation_or_list . 
188)(choice_relation_xor_list . 189)(choice_relation_and_then_list . 
190)(choice_relation_or_else_list . 191)(choice_relation . 192)(discrete_choice 
. 193)(discrete_choice_list . 1302)(factor . 161)(name . 197)(primary . 
166)(qualified_expression . 54)(range . 198)(selected_component . 
55)(simple_expression . 475)(term . 176)(term_list . 177)(unary_adding_ [...]
-      ((variant . 1301))
+      ((aggregate . 158)(attribute_reference . 51)(choice_expression . 
162)(choice_relation_and_list . 163)(choice_relation_or_list . 
164)(choice_relation_xor_list . 165)(choice_relation_and_then_list . 
166)(choice_relation_or_else_list . 167)(choice_relation . 168)(discrete_choice 
. 170)(discrete_choice_list . 1293)(factor . 174)(name . 176)(primary . 
177)(qualified_expression . 54)(range . 180)(selected_component . 
55)(simple_expression . 430)(term . 188)(term_list . 189)(unary_adding_ [...]
+      ((variant . 1292))
       nil
       nil
-      ((record_definition . 1298))
+      ((record_definition . 1289))
       nil
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 
195)(expression_opt . 1297)(factor . 161)(name . 163)(primary . 
166)(qualified_expression . 54)(raise_expression . 168)(relation_and_list . 
169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1288)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
-      ((identifier_opt . 1295))
-      ((identifier_opt . 1294))
+      ((identifier_opt . 1286))
+      ((identifier_opt . 1285))
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(expression . 1289)(factor . 
161)(name . 163)(primary . 166)(qualified_expression . 54)(raise_expression . 
168)(relation_and_list . 169)(relation_and_then_list . 170)(relation_or_list . 
171)(relation_or_else_list . 172)(relation_xor_list . 173)(relation . 
174)(selected_component . 55)(simple_expression . 175)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(expression . 
172)(expression_opt . 1280)(factor . 174)(name . 325)(primary . 
177)(qualified_expression . 54)(raise_expression . 179)(relation_and_list . 
181)(relation_and_then_list . 182)(relation_or_list . 
183)(relation_or_else_list . 184)(relation_xor_list . 185)(relation . 
186)(selected_component . 55)(simple_expression . 378)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(if_statement . 660)(iteration_scheme . 661)(label_opt . 
662)(loop_statement . 663)(name . 664)(pragma . 665)(procedure_call_statement . 
666)(qualified_expression . 54)(raise_statement . 667)(requeue_statement [...]
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(if_statement . 652)(iteration_scheme . 653)(label_opt . 
654)(loop_statement . 655)(name . 656)(pragma . 657)(procedure_call_statement . 
658)(qualified_expression . 54)(raise_statement . 659)(requeue_statement [...]
       nil
       nil
       nil
@@ -4454,25 +4436,25 @@
       nil
       nil
       nil
-      ((aspect_specification_opt . 1315))
+      ((aspect_specification_opt . 1306))
       nil
       nil
       nil
       nil
-      ((aspect_specification_opt . 1312))
+      ((aspect_specification_opt . 1303))
       nil
       nil
       nil
       nil
-      ((aggregate . 157)(attribute_reference . 51)(factor . 161)(name . 
163)(primary . 166)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1329)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((aggregate . 158)(attribute_reference . 51)(factor . 174)(name . 
325)(primary . 177)(qualified_expression . 54)(selected_component . 
55)(simple_expression . 1320)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
-      ((aspect_clause . 1034)(at_clause . 308)(component_declaration . 
1035)(component_item . 1036)(component_list . 1037)(component_list_opt . 
1327)(enumeration_representation_clause . 315)(identifier_list . 
1039)(record_representation_clause . 339)(variant_part . 1040))
+      ((aspect_clause . 1025)(at_clause . 278)(component_declaration . 
1026)(component_item . 1027)(component_list . 1028)(component_list_opt . 
1318)(enumeration_representation_clause . 285)(identifier_list . 
1030)(record_representation_clause . 309)(variant_part . 1031))
       nil
       nil
-      ((abstract_subprogram_declaration . 306)(aspect_clause . 307)(at_clause 
. 308)(body . 309)(body_stub . 310)(declaration . 311)(declarations . 
312)(declarative_part_opt . 1324)(entry_declaration . 
314)(enumeration_representation_clause . 315)(exception_declaration . 
316)(expression_function_declaration . 317)(full_type_declaration . 
318)(function_specification . 16)(generic_declaration . 
319)(generic_formal_part . 18)(generic_instantiation . 
320)(generic_package_declaration . 20)(ge [...]
-      ((aggregate . 157)(attribute_reference . 51)(discrete_subtype_definition 
. 1323)(factor . 161)(name . 739)(primary . 166)(qualified_expression . 
54)(range . 740)(selected_component . 55)(simple_expression . 
487)(subtype_indication . 741)(term . 176)(term_list . 
177)(unary_adding_operator . 178))
+      ((abstract_subprogram_declaration . 276)(aspect_clause . 277)(at_clause 
. 278)(body . 279)(body_stub . 280)(declaration . 281)(declarations . 
282)(declarative_part_opt . 1315)(entry_declaration . 
284)(enumeration_representation_clause . 285)(exception_declaration . 
286)(expression_function_declaration . 287)(full_type_declaration . 
288)(function_specification . 16)(generic_declaration . 
289)(generic_formal_part . 18)(generic_instantiation . 
290)(generic_package_declaration . 20)(ge [...]
+      ((aggregate . 158)(attribute_reference . 51)(discrete_subtype_definition 
. 1314)(factor . 174)(name . 731)(primary . 177)(qualified_expression . 
54)(range . 732)(selected_component . 55)(simple_expression . 
479)(subtype_indication . 733)(term . 188)(term_list . 
189)(unary_adding_operator . 190))
       nil
       nil
       nil
@@ -4486,11 +4468,11 @@
       nil
       nil
       nil
-      ((accept_statement . 649)(assignment_statement . 
650)(asynchronous_select . 651)(attribute_reference . 51)(block_statement . 
652)(case_statement . 653)(conditional_entry_call . 654)(delay_statement . 
655)(exit_statement . 656)(extended_return_statement . 657)(goto_label . 
658)(handled_sequence_of_statements . 1334)(if_statement . 
660)(iteration_scheme . 661)(label_opt . 662)(loop_statement . 663)(name . 
664)(pragma . 665)(procedure_call_statement . 666)(qualified_expression . 54)(r 
[...]
-      ((formal_part . 117)(parameter_profile_opt . 1333))
+      ((accept_statement . 641)(assignment_statement . 
642)(asynchronous_select . 643)(attribute_reference . 51)(block_statement . 
644)(case_statement . 645)(conditional_entry_call . 646)(delay_statement . 
647)(exit_statement . 648)(extended_return_statement . 649)(goto_label . 
650)(handled_sequence_of_statements . 1325)(if_statement . 
652)(iteration_scheme . 653)(label_opt . 654)(loop_statement . 655)(name . 
656)(pragma . 657)(procedure_call_statement . 658)(qualified_expression . 54)(r 
[...]
+      ((formal_part . 117)(parameter_profile_opt . 1324))
       nil
       nil
-      ((identifier_opt . 1336))
+      ((identifier_opt . 1327))
       nil
       nil]))
   "Parser table.")
diff --git a/packages/ada-mode/ada-mode.el b/packages/ada-mode/ada-mode.el
index 4399b77..c3373a8 100755
--- a/packages/ada-mode/ada-mode.el
+++ b/packages/ada-mode/ada-mode.el
@@ -6,9 +6,9 @@
 ;; Maintainer: Stephen Leake <address@hidden>
 ;; Keywords: languages
 ;;  ada
-;; Version: 5.2.0
-;; package-requires: ((wisi "1.1.3") (cl-lib "0.4") (emacs "24.2"))
-;; url: http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html
+;; Version: 5.2.1
+;; package-requires: ((wisi "1.1.4") (cl-lib "0.4") (emacs "24.2"))
+;; url: http://www.nongnu.org/ada-mode/
 ;;
 ;; (Gnu ELPA requires single digits between dots in versions)
 ;;
@@ -168,7 +168,7 @@
 (defun ada-mode-version ()
   "Return Ada mode version."
   (interactive)
-  (let ((version-string "5.2.0"))
+  (let ((version-string "5.2.1"))
     ;; must match:
     ;; ada-mode.texi
     ;; README-ada-mode
@@ -300,6 +300,12 @@ Useful for setting `ada-xref-tool' and similar vars."
   :type 'function
   :group 'ada)
 
+(defcustom ada-xref-full-path nil
+  "If t, cross-references show the full path to source files; if
+nil, only the file name."
+  :type 'boolean
+  :safe #'booleanp)
+
 ;;;;; end of user variables
 
 (defconst ada-symbol-end
@@ -352,6 +358,7 @@ Values defined by cross reference packages.")
     (define-key map "\C-c\C-e"          'ada-expand)
     (define-key map "\C-c\C-f"          'ada-show-parse-error)
     (define-key map "\C-c\C-i"          'ada-indent-statement)
+    (define-key map "\C-c\C-l"          'ada-show-local-references)
     (define-key map "\C-c\C-m"   'ada-build-set-make)
     (define-key map "\C-c\C-n"          'ada-next-statement-keyword)
     (define-key map "\C-c\M-n"          'ada-next-placeholder)
@@ -1344,7 +1351,7 @@ Optional PLIST defaults to `ada-prj-current-project'."
                             ada-case-exception-file
                           (list ada-case-exception-file)))
        (path_sep        path-separator)
-       (proc_env        process-environment)
+       (proc_env        (cl-copy-list process-environment))
        (src_dir         (list (directory-file-name default-directory)))
        (xref_tool       ada-xref-tool)
        ))))
@@ -1400,7 +1407,7 @@ Include properties set via 
`ada-prj-default-compiler-alist',
                           ada-case-exception-file
                         (list ada-case-exception-file))
       'path_sep        path-separator;; prj variable so users can override it 
for their compiler
-      'proc_env        process-environment
+      'proc_env        (cl-copy-list process-environment)
       'src_dir         (if src-dir (list src-dir) nil)
       'xref_tool       ada-xref-tool
       ))
@@ -1574,11 +1581,11 @@ Return new value of PROJECT."
                  ;; process env var. We don't do expand-file-name
                  ;; here because the application may be expecting a
                  ;; simple string.
-                 (let ((process-environment (plist-get project 'proc_env)))
+                 (let ((process-environment (cl-copy-list (plist-get project 
'proc_env))))
                    (setenv (substring (match-string 1) 1)
                            (substitute-in-file-name (match-string 2)))
                    (setq project
-                         (plist-put project 'proc_env process-environment)))
+                         (plist-put project 'proc_env (cl-copy-list 
process-environment))))
 
                ;; not recognized; assume it is a user-defined variable like 
"comp_opt"
                (setq project (plist-put project (intern (match-string 1)) 
(match-string 2)))
@@ -2305,6 +2312,7 @@ Called with four arguments:
 - filename containing the identifier
 - line number containing the identifier
 - column of the start of the identifier
+- local-only; if t, show references in current file only
 Displays a buffer in compilation-mode giving locations where the
 identifier is declared or referenced.")
 
@@ -2320,7 +2328,24 @@ identifier is declared or referenced.")
           (ada-identifier-at-point)
           (file-name-nondirectory (buffer-file-name))
           (line-number-at-pos)
-          (1+ (current-column)))
+          (1+ (current-column))
+          nil)
+  )
+
+(defun ada-show-local-references ()
+  "Show all references of identifier at point."
+  (interactive)
+  (ada-check-current-project (buffer-file-name))
+
+  (when (null ada-xref-all-function)
+    (error "no cross reference information available"))
+
+  (funcall ada-xref-all-function
+          (ada-identifier-at-point)
+          (file-name-nondirectory (buffer-file-name))
+          (line-number-at-pos)
+          (1+ (current-column))
+          t)
   )
 
 (defvar ada-xref-overriding-function nil
diff --git a/packages/ada-mode/ada-mode.info b/packages/ada-mode/ada-mode.info
index 48e429a..0c703b5 100644
--- a/packages/ada-mode/ada-mode.info
+++ b/packages/ada-mode/ada-mode.info
@@ -22,7 +22,7 @@ END-INFO-DIR-ENTRY
 
 File: ada-mode.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
 
-Ada Mode Version 5.2.0
+Ada Mode Version 5.2.1
 
    Copyright (C) 1999 - 2016 Free Software Foundation, Inc.
 
@@ -1705,6 +1705,8 @@ here's an overview.
 * Package organization::
 * OpenToken::
 * ELPA::
+* Savannah::
+* ada-france::
 
 
 File: ada-mode.info,  Node: Directory structure,  Next: Package organization,  
Prev: Developer overview,  Up: Developer overview
@@ -1992,6 +1994,26 @@ Gnu ELPA via git:
 elpa workspace, and for building the elpa archive there.
 
 
+File: ada-mode.info,  Node: Savannah,  Prev: OpenToken,  Up: Developer overview
+
+14.5 Savannah
+=============
+
+The ada-mode web page, mailing list, and tarball download are hosted on
+savannah.non-gnu.org, project Emacs Ada mode
+(<https://savannah.nongnu.org/projects/ada-mode/>).  See the project
+admin page there for more information.
+
+
+File: ada-mode.info,  Node: ada-france,  Prev: OpenToken,  Up: Developer 
overview
+
+14.6 ada-france
+===============
+
+The source code for ada-mode is maintained in a monotone repository in
+the ada-france server <mtn://www.ada-france.org>.
+
+
 File: ada-mode.info,  Node: GNU Free Documentation License,  Next: Index,  
Prev: Developer overview,  Up: Top
 
 Appendix A GNU Free Documentation License
@@ -2538,15 +2560,17 @@ Node: Automatic casing53921
 Node: Comment Handling56625
 Node: Key summary57144
 Node: Developer overview59771
-Node: Directory structure60111
-Node: Package organization64082
-Node: Ada mode64317
-Node: gpr mode66513
-Node: GNAT core66796
-Node: Wisi67630
-Node: OpenToken68530
-Node: ELPA69132
-Node: GNU Free Documentation License69742
-Node: Index94903
+Node: Directory structure60139
+Node: Package organization64110
+Node: Ada mode64345
+Node: gpr mode66541
+Node: GNAT core66824
+Node: Wisi67658
+Node: OpenToken68558
+Node: ELPA69160
+Node: Savannah69770
+Node: ada-france70108
+Node: GNU Free Documentation License70348
+Node: Index95509
 
 End Tag Table
diff --git a/packages/ada-mode/ada-mode.texi b/packages/ada-mode/ada-mode.texi
index 51c7825..755347a 100755
--- a/packages/ada-mode/ada-mode.texi
+++ b/packages/ada-mode/ada-mode.texi
@@ -26,7 +26,7 @@ developing GNU and promoting software freedom.''
 
 @titlepage
 @sp 10
address@hidden Ada Mode Version 5.2.0
address@hidden Ada Mode Version 5.2.1
 @page
 @vskip 0pt plus 1filll
 @insertcopying
@@ -36,7 +36,7 @@ developing GNU and promoting software freedom.''
 
 @node Top, Overview, (dir), (dir)
 
-Ada Mode Version 5.2.0
+Ada Mode Version 5.2.1
 
 @ifnottex
 @insertcopying
@@ -1821,6 +1821,8 @@ sources, here's an overview.
 * Package organization::
 * OpenToken::
 * ELPA::
+* Savannah::
+* ada-france::
 @end menu
 
 @node Directory structure, Package organization, Developer overview, Developer 
overview
@@ -2095,6 +2097,20 @@ git clone <login>@@git.savannah.gnu.org/emacs/elpa.git
 @file{build/Makefile} contains targets for copying Ada mode source to
 the elpa workspace, and for building the elpa archive there.
 
address@hidden Savannah,  , OpenToken, Developer overview
address@hidden Savannah
+
+The ada-mode web page, mailing list, and tarball download are hosted
+on savannah.non-gnu.org, project Emacs Ada mode
+(@url{https://savannah.nongnu.org/projects/ada-mode/}). See the
+project admin page there for more information.
+
address@hidden ada-france,  , OpenToken, Developer overview
address@hidden ada-france
+
+The source code for ada-mode is maintained in a monotone repository in
+the ada-france server @url{mtn://www.ada-france.org}.
+
 @node GNU Free Documentation License, Index, Developer overview, Top
 @appendix GNU Free Documentation License
 @include doclicense.texi
diff --git a/packages/ada-mode/ada-wisi-opentoken.el 
b/packages/ada-mode/ada-wisi-opentoken.el
old mode 100644
new mode 100755
index fbc4daf..374c599
--- a/packages/ada-mode/ada-wisi-opentoken.el
+++ b/packages/ada-mode/ada-wisi-opentoken.el
@@ -1,7 +1,7 @@
 ;; ada-wisi-opentoken.el --- An indentation function for ada-wisi that indents 
 -*- lexical-binding:t -*-
 ;; OpenTokengrammar statements nicely.
 
-;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2016  Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -46,13 +46,22 @@
     (let ((token-text (wisi-token-text (wisi-backward-token))))
       (cond
        ((equal token-text "<=")
-       (back-to-indentation)
-       (+ (current-column) ada-indent-broken))
+       (+ (current-indentation) ada-indent-broken))
 
        ((member token-text '("+" "&"))
        (while (not (equal "<=" (wisi-token-text (wisi-backward-token)))))
-       (back-to-indentation)
-       (+ (current-column) ada-indent-broken))
+       (+ (current-indentation) ada-indent-broken))
+
+       ((equal token-text "and")
+       (wisi-goto-containing (wisi-backward-cache))
+       ;; test/ada_mode-opentoken.ads
+       ;; Tokens.Statement <= Add_Statement and
+       ;; Add_Statement <=
+       ;;   ... and
+       ;; Add_Statement <=
+       ;;
+       ;; point is on :=
+       (+ (current-indentation) ada-indent-broken))
        ))))
 
 (defconst ada-wisi-opentoken-align
diff --git a/packages/ada-mode/ada-wisi.el b/packages/ada-mode/ada-wisi.el
old mode 100644
new mode 100755
index 57fd495..d4ae61f
--- a/packages/ada-mode/ada-wisi.el
+++ b/packages/ada-mode/ada-wisi.el
@@ -39,6 +39,8 @@
     block-middle ;; not start of statement
     block-start ;; start of block is start of statement
     close-paren
+    expression-start
+    label
     list-break
     name
     name-paren ;; anything that looks like a procedure call, since the grammar 
can't distinguish most of them
@@ -54,137 +56,193 @@
 ;;;; indentation
 
 (defun ada-wisi-current-indentation ()
-  "Return indentation appropriate for point on current line:
-if not in paren, beginning of line
-if in paren, pos following paren."
-  (if (not (ada-in-paren-p))
-      (current-indentation)
-
-    (or
-     (save-excursion
-       (let ((line (line-number-at-pos)))
-        (ada-goto-open-paren 1)
-        (when (= line (line-number-at-pos))
-          (current-column))))
-     (save-excursion
-       (back-to-indentation)
-       (current-column)))
-    ))
-
-(defun ada-wisi-indent-cache (offset cache)
-  "Return indentation of OFFSET plus indentation of line containing point. 
Point must be at CACHE."
-  (let ((indent (current-indentation)))
-    (cond
-     ;; special cases
-     ;;
-     ((eq 'LEFT_PAREN (wisi-cache-token cache))
-      ;; test/ada_mode-long_paren.adb
-      ;; (RT                            => RT,
-      ;;  Monitor                       => True,
-      ;;  RX_Enable                     =>
-      ;;    (RX_Torque_Subaddress |
-      ;;   indenting '(RX_'
-      ;;
-      ;; test/ada_mode-parens.adb
-      ;; return Float (
-      ;;               Integer'Value
-      ;;                 (Local_6));
-      ;;   indenting '(local_6)'; 'offset' = ada-indent - 1
-      (+ (current-column) 1 offset))
-
-     ((save-excursion
-       (let ((containing (wisi-goto-containing-paren cache)))
-         (and containing
-              ;; test/ada_mode-conditional_expressions.adb
-              ;; K2 : Integer := (if J > 42
-              ;;                  then -1
-              ;;   indenting 'then'; offset = 0
-              ;;
-              ;; L1 : Integer := (case J is
-              ;;                     when 42 => -1,
-              ;;
-              ;; test/indent.ads
-              ;; C_S_Controls : constant
-              ;;   CSCL_Type :=
-              ;;     CSCL_Type'
-              ;;       (
-              ;;        1 =>  --  Used to be aligned on "CSCL_Type'"
-              ;;              --  aligned with previous comment.
-              ;;          IO_CPU_Control_State_S_Pkg.CPU2_Fault_Status_Type'
-              ;;            (Unused2  => 10,  -- Used to be aligned on "1 =>"
-              ;;  indenting '(Unused2'
-              (+ (current-column) offset)))))
-
-     ;; all other structures
-     (t
-      ;; current cache may be preceded by something on same
-      ;; line. Handle common cases nicely.
-      (while (and cache
-                 (or
-                  (not (= (current-column) indent))
-                  (eq 'EQUAL_GREATER (wisi-cache-token cache))))
-       (when (and
-              (eq 'WHEN (wisi-cache-token cache))
-              (not (eq 'exit_statement (wisi-cache-nonterm cache))))
-         (setq offset (+ offset ada-indent-when)))
-       (setq cache (wisi-goto-containing cache))
-       (setq indent (current-indentation)))
-
+  "Return indentation of current line, taking into account leading parens and 
labels."
+  (let ((in-paren (ada-in-paren-p))
+       cache)
+    (save-excursion
+      (back-to-indentation)
       (cond
-       ((null cache)
-       ;; test/ada_mode-opentoken.ads
-       ;; private package GDS.Commands.Add_Statement is
-       ;;    type Instance is new Nonterminal.Instance with null record;
-       ;;
-       ;; test/ada_mode-nominal.adb
-       ;;     return B : Integer :=
-       ;;       (Local_Function);
-       (+ indent offset))
+       ((and (eq ?\( (char-after (point)))
+            in-paren)
+       (forward-same-syntax) ;; skip all leading parens
+       (current-column))
 
-       ((eq 'label_opt (wisi-cache-token cache))
-       (+ indent (- ada-indent-label) offset))
+       ((and (setq cache (wisi-get-cache (point)))
+            (eq 'label (wisi-cache-class cache)))
+       (- (current-column) ada-indent-label))
 
        (t
-       ;; test/ada_mode-generic_instantiation.ads
-       ;; function Function_1 is new Instance.Generic_Function
-       ;;   (Param_Type  => Integer,
-       ;;
-       ;; test/ada_mode-nested_packages.adb
-       ;; function Create (Model   : in Integer;
-       ;;                  Context : in String) return String is
-       ;;    ...
-       ;;    Cache : array (1 .. 10) of Boolean := (True, False, others => 
False);
-       (+ indent offset))
-       ))
-     )))
+       (current-column))
 
-(defun ada-wisi-indent-containing (offset cache &optional before)
+       ))))
+
+(defun ada-wisi-indent-containing (offset cache &optional before indenting)
   "Return indentation of OFFSET plus indentation of token containing CACHE.
-BEFORE should be t when called from ada-wisi-before-cache, nil otherwise."
-  (save-excursion
-    (cond
-     ((markerp (wisi-cache-containing cache))
-      (ada-wisi-indent-cache offset (wisi-goto-containing cache)))
+point should be at CACHE.
+BEFORE should be t when called from ada-wisi-before-cache, nil otherwise.
+If may be in parens, INDENTING must be point at indenting token."
+  ;; First move to the right containing token
+  (while
+      (and (progn
+            (when (and (eq (wisi-cache-token cache) 'WHEN)
+                       (memq (wisi-cache-nonterm cache)
+                             '(case_statement_alternative
+                               ;; test/ada_mode-nominal.adb
+                               ;; case Local_4 is
+                               ;;    when A =>
+                               case_expression_alternative
+                               ;; test/ada_mode-conditional_expressions.adb
+                               ;; elsif K = 0 then
+                               ;;   (case J is
+                               ;;       when 42                  => -1,
+                               exception_handler
+                               ;; test/ada_mode-nominal.adb
+                               ;; exception
+                               ;;    when others =>
+                               ;;       return 0.0;
+                               select_alternative
+                               ;; test/ada_mode-nominal.adb
+                               ;; or
+                               ;;    when Started => -- Ada mode 4.01 
ada-when-indent, GPS ada-indent
+                               variant
+                               ;; test/generic_param.adb
+                               ;; type Rte_Item_T (Item_Type : Item_Type_T := 
Fix) is record
+                               ;;    case Item_Type is
+                               ;;       when Fix | Airport =>
+                               )))
+              (setq offset (+ offset ada-indent-when)))
+            (setq cache (wisi-goto-containing cache nil)))
+          (or (memq
+               (wisi-cache-token cache)
+               '(EQUAL_GREATER
+                 ;; test/ada_mode-nominal.adb
+                 ;; case Local_4 is
+                 ;;    when
+                 ;;    ...
+                 ;;      => -- Ada mode 4.01 indentation
+                 ;;      ...
+                 ;;    Loop_1 :
+                 IS
+                 ;; test/ada_mode-nominal.adb
+                 ;; package body Ada_Mode.Nominal
+                 ;; ...
+                 ;; is
+                 ;;    use Ada.Strings;
+                 ))
+              (memq
+               (wisi-cache-nonterm cache)
+               '(name
+                 ;; test/ada_mode-nominal.adb
+                 ;; raise Constraint_Error with Count'Image (Line (File)) &
+                 ;;    "foo";
+                 ;;
+                 ;; test/ada_mode-slices.adb
+                 ;; Put_Line(Day'Image(D1) & " - " & Day'Image(D2) & " = " &
+                 ;;            Integer'Image(N));
+                 ))
+              (memq
+               (wisi-cache-class cache)
+               '(list-break
+                 ;; test/ada_mode-nominal.adb
+                 ;; 3
+                 ;;   => (others => 3.0));
+                 ))
+              (and (not (eq (current-column) (current-indentation)))
+                   (memq (wisi-cache-class cache)
+                         '(block-start
+                           ;; test/ada_mode-nominal.adb
+                           ;; or when Started
+                           ;;   =>
+                           block-middle
+                           ;; test/ada_mode-quantified_expressions.adb
+                           ;; for Element : Float of reverse
+                           ;;   Board loop
+                           ;;    Element := Element * 2.0;
+                           ))
+                   (not (eq (wisi-cache-token cache) 'RECORD))
+                   ;; test/ada_mode-nominal.ads
+                   ;; is tagged record
+                   ;;    Component_1 : Integer; -- end 2
+                   )
+              )))
 
-     (t
+  (let ((cur-line (line-number-at-pos (point)))
+       (paren-line (line-number-at-pos (nth 1 (syntax-ppss)))))
+    (cond
+     (cache
       (cond
-       ((ada-in-paren-p)
-       (ada-goto-open-paren 1)
-       (+ (current-column) offset))
+       ((and (ada-in-paren-p)
+            (eq cur-line paren-line)
+            (memq (wisi-cache-class cache)
+                  '(block-middle
+                    ;; ada_mode-conditional_expressions.adb
+                    ;; K := (if K < 0 then 42
+                    ;;       elsif K = 0 then
+
+                    expression-start
+                    ;; test/ada_mode-parens.adb
+                    ;; := Local_11_Type'(A => Integer
+                    ;;                     (1.0),
+
+                    statement-start
+                    ;; ada_mode-conditional_expressions.adb
+                    ;; K1 : Integer := (if J > 42 then -1
+                    ;;                  else +1);
+                    )))
+
+       (wisi-indent-paren (1+ offset)))
+
+       ((eq 'LEFT_PAREN (wisi-cache-token cache))
+       ;; test/ada_mode-parens.adb
+       ;; or else ((B.all
+       ;;             and then C)
+       ;;            or else
+       ;;
+       ;; test/ada_mode-nominal.adb
+       ;; => (others
+       ;;       => 2.0),
+       (goto-char indenting)
+       (wisi-indent-paren (1+ offset)))
+
+       ((memq (wisi-cache-class cache)
+             '(expression-start))
+       ;; test/indent.ads
+       ;; in higher-level parens, but that's not significant
+       ;; IO_CPU_Control_State_S_Pkg.CPU2_Fault_Status_Type'
+       ;;   (Unused2  => 10,  -- Used to be aligned on "1 =>"
+       ;;
+       ;; test/ada_mode-conditional_expressions.adb
+       ;; when B =>
+       ;;   Fun (J) = 0
+       ;;     or else M,
+       (+ (ada-wisi-current-indentation) offset))
 
        (t
-       ;; at outermost containing statement. If called from
-       ;; ada-wisi-before-cache, we want to ignore OFFSET (indenting
-       ;; 'package' in a package spec). If called from
-       ;; ada-wisi-after-cache, we want to include offset (indenting
-       ;; first declaration in the package).
-       (if before 0 offset))
+       ;; not in paren
+       ;; test/ada_mode-nominal.adb
+       ;; function Local_Function return Integer
+       ;; is -- target 3
+       (+ (ada-wisi-current-indentation) offset))
        ))
-      )))
+
+     (t
+      ;; at outermost containing statement. If called from
+      ;; ada-wisi-before-cache, we want to ignore OFFSET (indenting
+      ;; 'package' in a package spec). If called from
+      ;; ada-wisi-after-cache, we want to include offset (indenting
+      ;; first declaration in the package).
+      (if before
+         ;; test/ada_mode-nominal.adb
+         ;; package body Ada_Mode.Nominal
+         0
+       ;; test/ada_mode-nominal.adb
+       ;;      use Ada.Strings;
+       offset)
+      ))))
 
 (defun ada-wisi-indent-list-break (cache prev-token)
-  "Return indentation for a token contained by CACHE, which must be a 
list-break.
-point must be on CACHE. PREV-TOKEN is the token before the one being indented."
+  "Return indentation for a token contained or preceeded by CACHE, which must 
be a list-break.
+Point must be on CACHE. PREV-TOKEN is the token before the one being indented."
   (let ((break-point (point))
        (containing (wisi-goto-containing cache)))
     (cl-ecase (wisi-cache-token containing)
@@ -195,15 +253,18 @@ point must be on CACHE. PREV-TOKEN is the token before 
the one being indented."
           ;; test/parent.adb
           ;; Append_To (Formals,
           ;;            Make_Parameter_Specification (Loc,
-          ;; indenting 'Make_...'
           ;;
           ;; test/ada_mode-generic_instantiation.ads
           ;; function Function_1 is new Instance.Generic_Function
           ;;   (Param_Type  => Integer,
           ;;    Result_Type => Boolean,
-          ;;    Threshold   => 2);
-          ;; indenting 'Result_Type'
+          ;;
+          ;; test/ada_mode-parens.adb
+          ;; Local_14 : Local_14_Type :=
+          ;;   ("123",
+          ;;    "456" &
           (+ (current-column) 1)
+
         ;; else hanging
         ;;
         ;; test/ada_mode-parens.adb
@@ -212,7 +273,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
         ;;      2 => (1, 1, 1),
         ;;    3 |
         ;;      4 => (2, 2, 2));
-        ;; indenting '4 =>'
         (+ (current-column) 1 ada-indent-broken)))
 
       (IS
@@ -220,7 +280,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
        ;; L1 : Integer := (case J is
        ;;                     when 42 => -1,
        ;;                     -- comment aligned with 'when'
-       ;; indenting '-- comment'
        (wisi-indent-paren (+ 1 ada-indent-when)))
 
       (WITH
@@ -230,7 +289,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
          ;; (Default_Parent with
          ;;  Child_Element_1 => 10,
          ;;  Child_Element_2 => 12.0,
-         ;; indenting 'Child_Element_2'
          (wisi-indent-paren 1))
 
         (aspect_specification_opt
@@ -239,7 +297,6 @@ point must be on CACHE. PREV-TOKEN is the token before the 
one being indented."
          ;; with
          ;;   Constant_Indexing => Constant_Reference,
          ;;   Variable_Indexing => Reference,
-         ;; indenting 'Variable_Indexing'
          (+ (current-indentation) ada-indent-broken))
         ))
       )
@@ -247,595 +304,283 @@ point must be on CACHE. PREV-TOKEN is the token before 
the one being indented."
 
 (defun ada-wisi-before-cache ()
   "Point is at indentation, before a cached token. Return new indentation for 
point."
-  (let ((pos-0 (point))
-       (cache (wisi-get-cache (point)))
-       (prev-token (save-excursion (wisi-backward-token)))
-       )
-    (when cache
-      (cl-ecase (wisi-cache-class cache)
-       (block-start
-        (cl-case (wisi-cache-token cache)
-          (IS ;; subprogram body
-           (ada-wisi-indent-containing 0 cache t))
-
-          (RECORD
-           ;; test/ada_mode-nominal.ads; ada-indent-record-rel-type = 3
-           ;; type Private_Type_2 is abstract tagged limited
-           ;;    record
-           ;; indenting 'record'
-           ;;
-           ;; type Limited_Derived_Type_1d is
-           ;;    abstract limited new Private_Type_1 with
-           ;;    record
-           ;; indenting 'record'
-           ;;
-           ;; for Record_Type_1 use
-           ;;   record
-           ;;   indenting 'record'
-           (let ((containing (wisi-goto-containing cache)))
-             (while (not (memq (wisi-cache-token containing) '(FOR TYPE)))
-               (setq containing (wisi-goto-containing containing)))
-             (+ (current-column) ada-indent-record-rel-type)))
-
-          (t ;; other
-           (ada-wisi-indent-containing ada-indent cache t))))
-
-       (block-end
-        (cl-case (wisi-cache-nonterm cache)
-          (record_definition
-           (save-excursion
-             (wisi-goto-containing cache);; now on 'record'
-             (current-indentation)))
-
-          (t
-           (ada-wisi-indent-containing 0 cache t))
-          ))
-
-       (block-middle
-        (cl-case (wisi-cache-token cache)
-          (WHEN
-           (ada-wisi-indent-containing ada-indent-when cache t))
-
-          (t
-           (ada-wisi-indent-containing 0 cache t))
-          ))
-
-       (close-paren (wisi-indent-paren 0))
-
-       (keyword
-        ;; defer to after-cache)
-        nil)
-
-       (list-break
-       ;; test/ada_mode-parens.adb
-        ;; Foo (X
-        ;;        ,    --  used to get an error here; don't care about the 
actual indentation
-        ;; indenting ','
-        ;;
-        ;; We don't actually care what the indentation is, since this
-        ;; should only occur while editing; defer to after-cache
-        ;; avoids an error and does something reasonable.
-        nil)
-
-       (name
-        (cond
-         ((let ((temp (save-excursion (wisi-goto-containing cache))))
-            (and temp
-                 (memq (wisi-cache-nonterm temp) '(subprogram_body 
subprogram_declaration))))
-          ;; test/ada_mode-nominal.ads
-          ;; not
-          ;; overriding
-          ;; procedure
-          ;;   Procedure_1c (Item  : in out Parent_Type_1);
-          ;; indenting 'Procedure_1c'
-          ;;
-          ;; not overriding function
-          ;;   Function_2e (Param : in Parent_Type_1) return Float;
-          ;; indenting 'Function_2e'
-          (ada-wisi-indent-containing ada-indent-broken cache t))
-
-         (t
-          ;; defer to ada-wisi-after-cache, for consistency
-          nil)
-         ))
-
-       (name-paren
-        ;; defer to ada-wisi-after-cache, for consistency
-        nil)
+  (save-excursion
+    (let ((start (point))
+         (cache (wisi-get-cache (point))))
+      (when cache
+       (cl-ecase (wisi-cache-class cache)
+         (block-start
+          (cl-case (wisi-cache-token cache)
+            (IS ;; subprogram body
+             (ada-wisi-indent-containing 0 cache t))
 
-       (open-paren
-        (let* ((containing (wisi-goto-containing cache))
-               (containing-pos (point)))
-          (cl-case (wisi-cache-token containing)
-            (COMMA
-             ;; test/ada_mode-parens.adb
-             ;; A : Matrix_Type :=
-             ;;   ((1, 2, 3),
-             ;;    (4, 5, 6),
-             ;; indenting (4; containing is '),' ; 0
+            (RECORD
+             ;; test/ada_mode-nominal.ads; ada-indent-record-rel-type = 3
+             ;; type Private_Type_2 is abstract tagged limited
+             ;;    record
              ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_14 : Local_14_Type :=
-             ;;   ("123",
-             ;;    "456" &
-             ;;    ("789"));
-             ;; indenting ("4"; contaning is '3",' ; ada-indent-broken
-
-             (ada-wisi-indent-containing
-              (if (= (nth 1 prev-token) containing-pos) 0 ada-indent-broken)
-              containing))
-
-            (EQUAL_GREATER
-             (setq containing (wisi-goto-containing containing))
-             (cl-ecase (wisi-cache-token containing)
-               (COMMA
-                ;; test/ada_mode-long_paren.adb
-                ;; (RT                            => RT,
-                ;;  Monitor                       => True,
-                ;;  RX_Enable                     =>
-                ;;    (RX_Torque_Subaddress |
-                ;; indenting (RX_Torque
-                (ada-wisi-indent-containing ada-indent-broken containing t))
-               (LEFT_PAREN
-                ;; test/ada_mode-parens.adb
-                ;; (1 =>
-                ;;    (1 => 12,
-                ;; indenting '(1 => 12'; containing is '=>'
-                (ada-wisi-indent-cache (1- ada-indent) containing))
-               (WHEN
-                ;; test/ada_mode-conditional_expressions.adb
-                ;;  when 1 =>
-                ;;    (if J > 42
-                ;; indenting '(if'; containing is '=>'
-                (+ (current-column) -1 ada-indent))
-               (WITH
-                ;; test/aspects.ads
-                ;;    function Wuff return Boolean with Pre =>
-                ;;      (for all x in U =>
-                ;; indenting '(for';  containing is '=>', 'with', 'function'
-                (ada-wisi-indent-cache (1- ada-indent) containing))
-               ))
-
-            ((FUNCTION PROCEDURE)
-             ;; test/ada_mode-nominal.adb
-             ;; function Function_Access_11
-             ;;   (A_Param : in Float)
-             ;;   --  EMACSCMD:(test-face "function" font-lock-keyword-face)
-             ;;   return access function
-             ;;     (A_Param : in Float)
-             ;;     return
-             ;;     Standard.Float -- Ada mode 4.01, GPS do this differently
-             ;; indenting second '(A_Param)
-             (+ (current-indentation) -1 ada-indent))
-
-            (LEFT_PAREN
-             ;; test/ada_mode-parens.adb
-             ;; or else ((B.all
-             ;;             and then C)
-             ;;            or else
-             ;;            (D
-             ;; indenting (D
-             (+ (current-column) 1 ada-indent-broken))
+             ;; type Limited_Derived_Type_1d is
+             ;;   abstract limited new Private_Type_1 with
+             ;;    record
+             ;;
+             ;; for Record_Type_1 use
+             ;;   record
+             (let ((containing (wisi-goto-containing cache)))
+               (while (not (memq (wisi-cache-token containing) '(FOR TYPE)))
+                 (setq containing (wisi-goto-containing containing)))
+               (+ (current-column) ada-indent-record-rel-type)))
 
             (WHEN
              ;; test/ada_mode-nominal.adb
-             ;;
-             ;; when Local_1 = 0 and not
-             ;;   (Local_2 = 1)
-             ;; indenting (Local_2
-             ;;
-             ;; entry E3
-             ;;   (X : Integer) when Local_1 = 0 and not
-             ;;     (Local_2 = 1)
-             (+ (ada-wisi-current-indentation) ada-indent-broken))
+             ;; or
+             ;;    when Started => -- Ada mode 4.01 ada-when-indent, GPS 
ada-indent
+             (ada-wisi-indent-containing 0 cache t))
 
-            ((IDENTIFIER selected_component name)
-             ;; test/indent.ads
-             ;; CSCL_Type'
-             ;;   (
-             ;; identing (
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Check
-             ;;   ("foo bar",
-             ;;    A
-             ;;      (1),
-             ;;    A(2));
-             ;; indenting (1)
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_11 : Local_11_Type := Local_11_Type'
-             ;;   (A => Integer
-             ;;      (1.0),
-             ;;    B => Integer
-             ;;      (2.0));
-             ;;
-             ;; test/ada_mode-parens.adb
-             ;; Local_12 : Local_11_Type
-             ;;   := Local_11_Type'(A => Integer
-             ;;     (1.0),
-             ;; indenting (1.0)
-             (+ (ada-wisi-current-indentation) ada-indent-broken))
-
-            (t
-             (cond
-               ((memq (wisi-cache-class containing) '(block-start 
statement-start))
-                ;; test/ada_mode-nominal.adb
-                ;; entry E2
-                ;;   (X : Integer)
-                ;; indenting (X
-                (ada-wisi-indent-cache ada-indent-broken containing))
+            (t ;; other
+             (ada-wisi-indent-containing ada-indent cache t))))
 
-               (t
-                ;; Open paren in an expression.
-                ;;
-                ;; test/ada_mode-conditional_expressions.adb
-                ;; L0 : Integer :=
-                ;;   (case J is when 42 => -1, when Integer'First .. 41 => 0, 
when others => 1);
-                ;; indenting (case
-                (ada-wisi-indent-containing ada-indent-broken containing t))
-               ))
-            )))
+         (block-end
+          (cl-case (wisi-cache-nonterm cache)
+            (record_definition
+             (save-excursion
+               (wisi-goto-containing cache);; now on 'record'
+               (current-indentation)))
 
-       (return-with-params;; parameter list
-        (let ((return-pos (point)))
-          (wisi-goto-containing cache nil) ;; matching 'function'
-          (cond
-           ((<= ada-indent-return 0)
-            ;; indent relative to "("
-            (wisi-forward-find-class 'open-paren return-pos)
-            (+ (current-column) (- ada-indent-return)))
+            (t
+             (ada-wisi-indent-containing 0 cache t))
+            ))
 
-           (t
-            (+ (current-column) ada-indent-return))
-           )))
+         (block-middle
+          (ada-wisi-indent-containing 0 cache t start))
 
-       (return-without-params;; no parameter list
-        (wisi-goto-containing cache nil) ;; matching 'function'
-        (+ (current-column) ada-indent-broken))
+         (close-paren
+          (wisi-indent-paren 0))
 
-       (statement-end
-        (ada-wisi-indent-containing ada-indent-broken cache t))
+         (expression-start
+          ;; defer to after-cache)
+          nil)
 
-       (statement-other
-        (save-excursion
-          (let ((containing (wisi-goto-containing cache nil)))
-            (while (not (wisi-cache-nonterm containing))
-              (setq containing (wisi-goto-containing containing)))
+         (label
+          ;; test/ada_mode-nominal.adb
+          ;;    <<Label_1>>
+          ;;
+          ;; Block_1:
+          ;;    declare -- label, no statements between begin, label
+          ;; indenting Block_1
+          (ada-wisi-indent-containing (+ ada-indent-label ada-indent) cache t))
 
-            (cond
-             ;; cases to defer to after-cache
-             ((and
-               (eq (wisi-cache-nonterm cache) 'qualified_expression)
-               ;; test/ada_mode-parens.adb Local_13 Integer'
-               (not (eq (wisi-cache-token containing) 'COLON_EQUAL)))
-              ;; _not_ test/indent.ads CSCL_Type'
-              nil)
-
-             ;; handled here
-             (t
-              (cl-case (wisi-cache-token cache)
-                (EQUAL_GREATER
-                 (+ (current-column) ada-indent-broken))
-
-                (ELSIF
-                 ;; test/g-comlin.adb
-                 ;;   elsif Current_Argument < CL.Argument_Count then
-                 (ada-wisi-indent-cache 0 containing))
-
-                (RENAMES
-                 (cl-ecase (wisi-cache-nonterm containing)
-                   ((generic_renaming_declaration 
subprogram_renaming_declaration)
-                    (wisi-forward-find-token '(FUNCTION PROCEDURE) pos-0)
-                    (let ((pos-subprogram (point))
-                          (has-params
-                           ;; this is wrong for one return access
-                           ;; function case: overriding function Foo
-                           ;; return access Bar (...) renames ...;
-                           (wisi-forward-find-token 'LEFT_PAREN pos-0 t)))
-                      (if has-params
-                          (if (<= ada-indent-renames 0)
-                              ;; indent relative to paren
-                              (+ (current-column) (- ada-indent-renames))
-                            ;; else relative to line containing keyword
-                            (goto-char pos-subprogram)
-                            (+ (current-indentation) ada-indent-renames))
-
-                        ;; no params
-                        (goto-char pos-subprogram)
-                        (+ (current-indentation) ada-indent-broken))
-                      ))
+         (list-break
+          ;; test/ada_mode-parens.adb
+          ;; Slice_1 (1
+          ;;        ,    --  used to get an error here; don't care about the 
actual indentation
+          ;;
+          ;; We don't actually care what the indentation is, since this
+          ;; should only occur while editing; defer to after-cache
+          ;; avoids an error and does something reasonable.
+          nil)
 
-                   (object_renaming_declaration
-                    (+ (current-indentation) ada-indent-broken))
-                   ))
+         (name
+          (cond
+           ((let ((temp (wisi-get-containing-cache cache)))
+              (and temp
+                   (memq (wisi-cache-nonterm temp) '(subprogram_body 
subprogram_declaration))))
+            ;; test/ada_mode-nominal.ads
+            ;; not
+            ;; overriding
+            ;; procedure
+            ;;   Procedure_1c (Item  : in out Parent_Type_1);
+            ;;
+            ;; not overriding function
+            ;;   Function_2e (Param : in Parent_Type_1) return Float;
+            (ada-wisi-indent-containing ada-indent-broken cache t))
 
-                (t
-                 (cl-ecase (wisi-cache-nonterm containing)
+           (t
+            ;; defer to ada-wisi-after-cache, for consistency
+            nil)
+           ))
 
-                   ;; abstract_subprogram_declaration with subprogram_body
+         (name-paren
+          ;; defer to ada-wisi-after-cache, for consistency
+          nil)
 
-                   (aggregate
-                    ;; test/ada_mode-nominal-child.adb
-                    ;; return (Parent_Type_1
-                    ;;         with 1, 0.0, False);
-                    ;; indenting 'with'; containing is '('
-                    (+ (current-column) 1))
+         (open-paren
+          ;; In some cases, we indent the leading paren one less than
+          ;; normal, so the following lines look normal. However, when
+          ;; ada-indent-broken = 1- ada-indent, the distinction is
+          ;; moot.
+          (let ((content (save-excursion (wisi-forward-cache))))
+            (cond
+             ((or
+               (memq (wisi-cache-nonterm cache)
+                     '(formal_part)
+                     ;; test/ada_mode-nominal.adb
+                     ;; entry E2
+                     ;;   (X : Integer)
+                     )
+               (memq (wisi-cache-nonterm content)
+                     '(case_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K :=
+                       ;;   (case Bounded (K) is
+
+                       if_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; when 1  =>
+                       ;;   (if J > 42
+                       )))
+
+              (ada-wisi-indent-containing (1- ada-indent) cache t start))
 
-                   (component_declaration
-                    ;; test/ada_mode-nominal.ads Record_Type_3 ':'
-                    (+ (current-column) ada-indent-broken))
+             (t
+              (ada-wisi-indent-containing ada-indent-broken cache t start))
+             )))
+
+         (return-with-params
+          ;; test/ada_mode-options-intent_return_1.ads, _2, _3
+          ;; indenting 'return' after ()
+          (let ((return-pos (point)))
+            (wisi-goto-containing cache nil) ;; matching 'function'
+            (cond
+             ((<= ada-indent-return 0)
+              ;; indent relative to "("
+              (wisi-forward-find-class 'open-paren return-pos)
+              (+ (current-column) (- ada-indent-return)))
 
-                   (entry_body
-                    ;; test/ada_mode-nominal.adb
-                    ;; entry E2
-                    ;;   (X : Integer)
-                    ;;   when Local_1 = 0 and not
-                    ;; indenting 'when'; containing is 'entry'
-                    (+ (current-column) ada-indent-broken))
+             (t
+              (+ (current-column) ada-indent-return))
+             )))
 
-                   ;; expression_function_declaration with subprogram_body
+         (return-without-params;; no parameter list
+          ;; test/ada_mode-options-intent_return_1.ads, _2, _3
+          ;; indenting 'return' with no ()
+          (wisi-goto-containing cache nil) ;; matching 'function'
+          (+ (current-column) ada-indent-broken))
 
-                   (formal_package_declaration
-                    ;; test/ada_mode-generic_package.ads
-                    ;; with package A_Package_7 is
-                    ;;   new Ada.Text_IO.Integer_IO (Num => 
Formal_Signed_Integer_Type);
-                    ;; indenting 'new'; containing is 'with'
-                    (+ (current-column) ada-indent-broken))
+         (statement-end
+          (ada-wisi-indent-containing ada-indent-broken cache t))
 
-                   ((full_type_declaration
-
-                     ;; shared code, but out of alphabetical order:
-                      protected_type_declaration
-                     single_protected_declaration
-                     single_task_declaration
-                     subtype_declaration
-                     task_type_declaration)
-
-                    (while (not (memq (wisi-cache-token containing) 
'(PROTECTED SUBTYPE TASK TYPE)))
-                      (setq containing (wisi-goto-containing containing)))
-
-                    (cond
-                     ((eq (wisi-cache-token cache) 'WITH)
-                      (let ((type-col (current-column))
-                            (null_private (save-excursion (wisi-goto-end-1 
cache)
-                                                          (eq 'WITH 
(wisi-cache-token (wisi-backward-cache))))))
-                        (cond
-                         ((eq 'aspect_specification_opt (wisi-cache-nonterm 
cache))
-                          ;; test/aspects.ads
-                          ;; subtype Integer_String is String
-                          ;;   with Dynamic_Predicate => Integer'Value 
(Integer_String) in Integer
-                          ;; indenting 'with'
-                          ;;
-                          ;; test/ada_mode.ads
-                          ;; protected Separate_Protected_Body
-                          ;; with
-                          ;;   Priority => 5
-                          ;; indenting 'with'
-                          ;;
-                          ;; test/ada_nominal.ads
-                          ;; task type Task_Type_1 (Name : access String)
-                          ;; with
-                          ;;    Storage_Size => 512 + 256
-                          ;; indenting 'with'
-                          type-col)
-
-                         (null_private
-                          ;; 'with null record;' or 'with private;'
-                          ;; test/ada_mode-nominal.ads
-                          ;; type Limited_Derived_Type_3 is abstract limited 
new Private_Type_1
-                          ;;   with null record;
-                          ;; indenting 'with'; containing is 'is'
-                          (+ type-col ada-indent-broken))
-
-                         (t
-                          ;; test/ada_mode-nominal.ads
-                          ;; type Unconstrained_Array_Type_3 is array (Integer 
range <>, Standard.Character range <>)
-                          ;;   of Object_Access_Type_1;
-                          ;; indenting 'of'; containing is 'is'
-                          ;;
-                          ;; type Object_Access_Type_7
-                          ;;   is access all Integer;
-                          ;; indenting 'is'; containing is 'type'
-                          (+ type-col ada-indent-record-rel-type)))))
-
-                     (t
-                      ;; test/ada_mode-nominal.ads
-                      ;; type Limited_Derived_Type_2a is abstract limited new 
Private_Type_1
-                      ;;   with record
-                      ;; indenting 'with record'
-                      ;;
-                      ;; test/access_in_record.ads
-                      ;; type A
-                      ;;    is new Ada.Streams.Root_Stream_Type with record
-                      ;;
-                      ;; test/adacore_9717_001.ads A_Long_Name
-                      ;; subtype A_Long_Name
-                      ;;   is Ada.Text_Io.Count;
-                      ;; indenting 'is'
-                      (+ (current-column) ada-indent-broken))
-                     ))
-
-                   (generic_instantiation
-                    ;; test/ada_mode-generic_instantiation.ads
-                    ;; procedure Procedure_7 is
-                    ;;   new Instance.Generic_Procedure (Integer, Function_1);
-                    ;; indenting 'new'
-                    (+ (current-column) ada-indent-broken))
+         (statement-other
+          (cond
+           ((and (eq (wisi-cache-token cache) 'IS)
+                 (memq (wisi-cache-nonterm cache)
+                       '(expression_function_declaration
+                         ;; test/ada_mode-expression-functions.ads
+                         ;; function Square (A : in Float) return Float
+                         ;;   is (A * A);
+
+                         null_procedure_declaration
+                         ;; test/ada_mode-nominal.ads
+                         ;; procedure Procedure_3c
+                         ;; is null;
+                         )))
+            (ada-wisi-indent-containing ada-indent-broken cache t start))
+
+           ((and (eq (wisi-cache-token cache) 'WITH)
+                 (eq (wisi-cache-nonterm cache) 'derived_type_definition))
+            ;; test/ada_mode-nominal.ads
+            ;; type Limited_Derived_Type_2a is abstract limited new 
Private_Type_1
+            ;;   with record
+            (ada-wisi-indent-containing ada-indent-record-rel-type cache t 
start))
 
-                   (generic_renaming_declaration
-                    ;; indenting keyword following 'generic'
-                    (current-column))
-
-                   ;; null_procedure_declaration with subprogram_body
-
-                   (object_declaration
-                    (cl-ecase (wisi-cache-token containing)
-                      (COLON
-                       ;; test/ada_mode-nominal.ads
-                       ;; Anon_Array_3 : array (1 .. 10)
-                       ;;   of Integer;
-                       ;; indenting 'of'
-                       (+ (current-indentation) ada-indent-broken))
-
-                      (COLON_EQUAL
-                       ;; test/indent.ads
-                       ;; C_S_Controls : constant
-                       ;;   CSCL_Type :=
-                       ;;     CSCL_Type'
-                       ;; indenting 'CSCL_Type'
-                       (+ (current-indentation) ada-indent-broken))
-
-                      (identifier_list
-                       ;; test/ada_mode-nominal.adb
-                       ;; Local_2 : constant Float
-                       ;;   := Local_1;
-                       (+ (current-indentation) ada-indent-broken))
-                      ))
-
-                    ((package_declaration
-                     package_body)
-                    ;; test/ada_mode-nominal.ads
-                    ;; package Ada_Mode.Nominal
-                    ;; with
-                    ;;   SPARK_Mode => On
-                    ;; is
-                    ;; indenting 'with'
-                    ;;
-                    ;; test/ada_mode-nominal.adb
-                    ;; package body Ada_Mode.Nominal
-                    ;; with
-                    ;;   SPARK_Mode => On
-                    ;; is
-                    (save-excursion
-                       (current-column)))
-
-                   (private_extension_declaration
-                    (cl-ecase (wisi-cache-token cache)
-                      (WITH
-                       ;; test/aspects.ads
-                       ;; type Date_Set is tagged private
-                       ;; with
-                       ;; indenting 'with'
-                       (current-indentation))
-
-                      (t
-                       ;; test/ada_mode-nominal.ads
-                       ;; type Limited_Derived_Type_3 is abstract limited
-                       ;;   new Private_Type_1 with private;
-                       ;; indenting 'new'
-                       (+ (current-indentation) ada-indent-broken))
-                      ))
-
-                   (private_type_declaration
-                    ;; test/aspects.ads
-                    ;; type Vector is tagged private
-                    ;; with
-                    ;; indenting 'with'
-                    (current-indentation))
-
-                   ;; protected_type_declaration with full_type_declaration
-
-                   (qualified_expression
-                    ;; test/ada_mode-nominal-child.ads
-                    ;; Child_Obj_5 : constant Child_Type_1 :=
-                    ;;   (Parent_Type_1'
-                    ;;     (Parent_Element_1 => 1,
-                    (ada-wisi-indent-cache ada-indent-broken containing))
-
-                   ;; single_protected_declaration with full_type_declaration
-                   ;; single_task_declaration with full_type_declaration
-
-                   (statement
-                    (cl-case (wisi-cache-token containing)
-                      (label_opt
-                       (- (current-column) ada-indent-label))
-
-                      (t
-                       ;; test/ada_mode-nominal.adb
-                       ;; select
-                       ;;    delay 1.0;
-                       ;; then
-                       ;;    -- ...
-                       ;;   abort
-                       (ada-wisi-indent-cache ada-indent-broken cache))
-                      ))
-
-                   ((subprogram_body
-                     subprogram_declaration
-                     subprogram_specification
+           (t
+            (cl-case (wisi-cache-nonterm cache)
+              ((generic_renaming_declaration subprogram_renaming_declaration)
+               ;; special case for ada-indent-renames
+
+               (cl-ecase (wisi-cache-token cache)
+                 ((FUNCTION PROCEDURE)
+                  ;; test/ada_mode-generic_instantiation.ads
+                  ;; generic
+                  ;; function Gen_Function_4 renames Instance.Generic_Function;
+                  ;;
+                  ;; generic
+                  ;; procedure
+                  (ada-wisi-indent-containing 0 cache t start))
+
+                 (RENAMES
+                  ;; test/ada_mode-generic_instantiation.ads
+                  ;; generic function Gen_Function_2
+                  ;;   renames Instance.Generic_Function;
+                  (wisi-goto-containing cache)
+                  (wisi-forward-find-token '(FUNCTION PROCEDURE) start)
+                  (let ((pos-subprogram (point))
+                        (has-params
+                         ;; this is wrong for one return access
+                         ;; function case: overriding function Foo
+                         ;; return access Bar (...) renames ...;
+                         (wisi-forward-find-token 'LEFT_PAREN start t)))
+                    (if has-params
+                        (if (<= ada-indent-renames 0)
+                            ;; indent relative to paren
+                            (+ (current-column) (- ada-indent-renames))
+                          ;; else relative to line containing keyword
+                          (goto-char pos-subprogram)
+                          (+ (current-indentation) ada-indent-renames))
+
+                      ;; no params
+                      (goto-char pos-subprogram)
+                      (+ (current-indentation) ada-indent-broken))
+                    ))
+                 ))
 
-                     ;; shared code, but out of alphabetical order:
-                     abstract_subprogram_declaration
-                     expression_function_declaration
-                     null_procedure_declaration)
-                    (cl-ecase (wisi-cache-token cache)
-                      (IS
-                       ;; test/ada_mode-nominal.ads
-                       ;; procedure Procedure_1d
-                       ;;   (Item   : in out Parent_Type_1;
-                       ;;    Item_1 : in     Character;
-                       ;;    Item_2 : out    Character)
-                       ;;   is null;
-                       ;; indenting 'is'
-                       (+ (current-column) ada-indent-broken))
-
-                      (OVERRIDING
-                       ;; indenting 'overriding' following 'not'
-                       (current-column))
-
-                      ((PROCEDURE FUNCTION)
-                       ;; indenting 'procedure' or 'function following 
'overriding'
-                       (current-column))
-
-                      (WITH
-                       ;; indenting aspect specification on subprogram 
declaration
-                       ;; test/aspects.ads
-                       ;; procedure Foo (X : Integer;
-                       ;;                Y : out Integer)
-                       ;; with Pre => X > 10 and
-                       ;; indenting 'with'
-                       (current-column))
-                      ))
-
-                   ;; subtype_declaration, task_type_declaration with 
full_type_declaration
-
-                   ))))
-             )))) ;; end statement-other
-
-       (statement-start
-        (cond
-         ((eq 'label_opt (wisi-cache-token cache))
-          (ada-wisi-indent-containing (+ ada-indent-label ada-indent) cache t))
+              ((aggregate
+                ;; test/ada_mode-nominal-child.adb
+                ;; return (Parent_Type_1
+                ;;         with 1, 0.0, False);
 
-         (t
-          (let ((containing-cache (wisi-get-containing-cache cache)))
-            (if (not containing-cache)
-                ;; at bob
-                0
-              ;; not at bob
-              (cl-case (wisi-cache-class containing-cache)
-                ((block-start block-middle)
-                 (wisi-goto-containing cache)
-                 (cl-case (wisi-cache-nonterm containing-cache)
-                   (record_definition
-                    (+ (current-indentation) ada-indent))
+                aspect_specification_opt
+                ;; test/ada_mode-nominal.ads
+                ;; package Ada_Mode.Nominal
+                ;; with
+                ;;
+                ;; test/ada_mode-nominal.adb
+                ;; package body Ada_Mode.Nominal
+                ;; with
 
-                   (t
-                    (ada-wisi-indent-cache ada-indent containing-cache))
-                   ))
+                elsif_expression_item
+                ;; test/ada_mode-conditional_expressions.adb
+                ;; K := (if K < 0 then 42
+                ;;       elsif K = 0 then
+
+                elsif_statement_item
+                ;; not in paren
+                ;; test/g-comlin.adb
+                ;;   elsif Current_Argument < CL.Argument_Count then
+
+                generic_renaming_declaration
+                ;; test/ada_mode-generic_instantiation.ads
+                ;; generic
+                ;; procedure
+
+                subprogram_body
+                subprogram_declaration
+                subprogram_specification
+                overriding_indicator_opt
+                abstract_subprogram_declaration
+                expression_function_declaration
+                null_procedure_declaration
+                ;; test/ada_mode-nominal.ads
+                ;; not
+                ;; overriding
+                ;;
+                ;; not overriding
+                ;; procedure Procedure_1b
+                )
+               (ada-wisi-indent-containing 0 cache t start))
 
-                (list-break
-                 (ada-wisi-indent-list-break cache prev-token))
+              (t
+               (ada-wisi-indent-containing ada-indent-broken cache t start))
+              ))
+           )) ;; end statement-other
 
-                ))))
-            ))
-       ))
-    ))
+         (statement-start
+          (ada-wisi-indent-containing ada-indent cache t start))
+         ))
+      )))
 
 (defun ada-wisi-after-cache ()
-  "Point is at indentation, not before a cached token. Find previous
-cached token, return new indentation for point."
+  "Point is at indentation. Find previous cached token, return
+new indentation for point."
   (save-excursion
     (let ((start (point))
          (prev-token (save-excursion (wisi-backward-token)))
@@ -846,13 +591,16 @@ cached token, return new indentation for point."
        0)
 
        (t
-       (while (memq (wisi-cache-class cache) '(keyword name name-paren type))
+       (while (memq (wisi-cache-class cache) '(name name-paren))
          ;; not useful for indenting
          (setq cache (wisi-backward-cache)))
 
        (cl-ecase (wisi-cache-class cache)
          (block-end
           ;; indenting block/subprogram name after 'end'
+          ;; test/ada_mode-nominal.adb
+          ;; end
+          ;;   Function_Access_11;
           (wisi-indent-current ada-indent-broken))
 
          (block-middle
@@ -861,152 +609,276 @@ cached token, return new indentation for point."
              (cl-case (wisi-cache-nonterm cache)
                (case_statement
                 ;; between 'case .. is' and first 'when'; most likely a comment
-                (ada-wisi-indent-containing 0 cache t))
+                ;; test/ada_mode-nominal.adb
+                ;; case Param_1 is
+                ;; -- comment after "is", before "when"
+                (ada-wisi-indent-containing 0 cache))
 
                (t
-                (+ (ada-wisi-indent-containing ada-indent cache t)))
+                ;; test/ada_mode-nominal.adb
+                ;; function F2 (Param_1 : Discrete_Type_1; B : Float) return 
Float
+                ;; is
+                ;;    Local : Object_Access_Type_0a := new Float'(9.0);
+                (+ (ada-wisi-indent-containing ada-indent cache)))
                ))
 
             ((THEN ELSE)
-             ;;
-             ;; test/ada_mode-conditional_expressions.adb
-             ;; K3 : Integer := (if
-             ;;                    J > 42
-             ;;                  then
-             ;;                    -1
-             ;;                  else
-             ;;                    +1);
-             ;; indenting -1, +1
              (let ((indent
-                    (cl-ecase (wisi-cache-nonterm (wisi-get-containing-cache 
cache))
-                      ((statement if_statement elsif_statement_item) 
ada-indent)
-                      ((if_expression elsif_expression_item) 
ada-indent-broken))))
-               (ada-wisi-indent-containing indent cache t)))
+                    (cl-ecase (wisi-cache-nonterm cache)
+                      ((asynchronous_select
+                       ;; test/ada_mode-nominal.adb
+                        ;; select
+                        ;;    delay 1.0;
+                        ;; then
+                        ;;    -- The comment after 'null' below has no space 
between ';'
+
+                        if_statement
+                        ;; test/ada_mode-nominal.adb
+                        ;; if A_Param > 0.0 then
+                        ;;    -- EMACSCMD:(test-face "new" 
font-lock-keyword-face)
+
+                        elsif_statement_item
+                        ;; test/ada_mode-nominal.adb
+                        ;; then -- 2
+                        ;;      --EMACSCMD:(progn ...
+
+                        selective_accept
+                        ;; test/ada_mode-nominal.adb
+                        ;; else
+                        ;;    --  comment after select else
+                        )
+                       ada-indent)
+
+                      ((if_expression
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K3 : Integer := (if
+                       ;;                    J > 42
+                       ;;                  then
+                       ;;                    -1
+                       ;;                  else
+                       ;;                    +1);
+                       ;; indenting -1, +1
+                       elsif_expression_item
+                       ;; test/ada_mode-conditional_expressions.adb
+                       ;; K := (if K < 0 then 42
+                       ;;       elsif K = 0 then
+                       ;;         (case J is
+                       )
+                       ada-indent-broken))))
+               (ada-wisi-indent-containing indent cache nil start)))
 
             (WHEN
-             ;; between 'when' and '=>'
-             (+ (current-column) ada-indent-broken))
+             (cl-ecase (wisi-cache-nonterm cache)
+               ((case_expression_alternative
+                 ;; test/ada_mode-conditional_expressions.adb
+                 ;; L2 : Integer := (case J is
+                 ;;                     when
+                 ;;                       42 => -1,
+
+                 case_statement_alternative
+                 ;; test/ada_mode-nominal.adb
+                 ;; case Local_4 is
+                 ;;    when
+                 ;;      A | -- continuation line; ada-indent-broken = 2
+
+                 exception_handler
+                 ;; test/ada_mode-nominal.adb
+                 ;; when -- 2
+                 ;;   Bad_Thing -- ada-mode 4.01 indentation
+                 ;;   =>        -- ""
+                 )
+                (+ (current-column) ada-indent-broken))
+               ))
 
             (t
-             ;; block-middle keyword may not be on separate line:
-             ;;       function Create (Model   : in Integer;
-             ;;                        Context : in String) return String is
+             ;; block-middle keyword other than above
+             ;; test/ada_mode-nominal.adb
+             ;; accept Middle_1 (Param_1 : in Integer) do
+             ;;    --  a comment after 'do'
+             ;;
+             ;; begin
+             ;;    --EMACSCMD:(progn 
(ada-goto-declarative-region-start)(looking-at " -- target 5"))
              (ada-wisi-indent-containing ada-indent cache nil))
             ))
 
          (block-start
           (cl-case (wisi-cache-nonterm cache)
-            (exception_handler
-             ;; between 'when' and '=>'
-             (+ (current-column) ada-indent-broken))
-
-            (if_expression
-             (ada-wisi-indent-containing ada-indent-broken cache nil))
-
-            (select_alternative
-             (ada-wisi-indent-containing (+ ada-indent-when ada-indent-broken) 
cache nil))
+            ((exception_handler
+              ;; test/ada_mode-nominal.adb
+              ;; when -- 2
+              ;;   Bad_Thing -- ada-mode 4.01 indentation
+
+              select_alternative
+              ;; test/ada_mode-nominal.adb
+              ;; when
+              ;;   Started =>
+              )
+              (+ (current-column) ada-indent-broken))
 
-            (t ;; other; normal block statement
-             (ada-wisi-indent-cache ada-indent cache))
+            (t
+             ;; test/ada_mode-nominal.adb
+             ;; task body Task_Type_1 is
+             ;;    -- a more typical task
+             (+ (ada-wisi-current-indentation) ada-indent))
             ))
 
          (close-paren
-          ;; actual_parameter_part: test/ada_mode-nominal.adb
-          ;; return 1.0 +
-          ;;   Foo (Bar) + -- multi-line expression that happens to have a 
cache at a line start
-          ;;   12;
-          ;; indenting '12'; don't indent relative to containing function name
-          ;;
-          ;; attribute_designator: test/ada_mode-nominal.adb
-          ;; raise Constraint_Error with Count'Image (Line (File)) &
-          ;;    "foo";
-          ;; indenting '"foo"'; relative to raise
-          ;;
-          ;; test/ada_mode-slices.adb
-          ;; Put_Line(Day'Image(D1) & " - " & Day'Image(D2) & " = " &
-          ;;            Integer'Image(N));
-          ;; indenting 'Integer'
-          (when (memq (wisi-cache-nonterm cache)
-                      '(actual_parameter_part attribute_designator))
-            (setq cache (wisi-goto-containing cache)))
-          (ada-wisi-indent-containing ada-indent-broken cache nil))
+          ;; test/ada_mode-parens.adb
+          ;;               and then E))
+          ;; or else G
+          (ada-wisi-indent-containing ada-indent-broken cache nil start))
 
-         (list-break
-          (ada-wisi-indent-list-break cache prev-token))
+         (expression-start
+          (cond
+           ((eq 'LEFT_PAREN (wisi-cache-token cache))
+            (if (= (point) (cadr prev-token))
+                ;; test/ada_mode-parens.adb
+                ;; Local_9 : String := (
+                ;;                      "123" &
+                (1+ (current-column))
+
+              ;; not at token preceding indenting token
+              ;; test/ada_mode-nominal.adb
+              ;; 2
+              ;;   => (others
+              ;;         => 2.0),
+              ;;
+              ;; test/ada_mode-parens.adb
+              ;; A :=
+              ;;   (1 |
+              ;;      2 => (0, 0, 0),
+              (+ 1 (current-column) ada-indent-broken)))
 
-         (open-paren
-          ;; 1) A parenthesized expression, or the first item in an aggregate:
-          ;;
-          ;;    (foo +
-          ;;       bar)
-          ;;    (foo =>
-          ;;       bar)
-          ;;
-          ;;     we are indenting 'bar'
-          ;;
-          ;; 2) A parenthesized expression, or the first item in an
-          ;;    aggregate, and there is whitespace between
-          ;;    ( and the first token:
-          ;;
-          ;; test/ada_mode-parens.adb
-          ;; Local_9 : String := (
-          ;;                      "123"
-          ;;
-          ;; 3) A parenthesized expression, or the first item in an
-          ;;    aggregate, and there is a comment between
-          ;;    ( and the first token:
-          ;;
+           (t
+            (let* ((containing1 (wisi-get-containing-cache cache))
+                   (containing2 (wisi-get-containing-cache containing1))
+                   (containing3 (wisi-get-containing-cache containing2)))
+
+              (cond
+               ((and (eq 'EQUAL_GREATER (wisi-cache-token containing1))
+                     (or
+                      (eq 'aspect_specification_opt (wisi-cache-nonterm 
containing2))
+                      (and (eq 'association_list (wisi-cache-nonterm 
containing2))
+                           (eq 'aspect_specification_opt (wisi-cache-nonterm 
containing3)))))
+                ;; special case for aspects
+                ;; test/aspects.ads
+                ;; with Pre => X > 10 and
+
+                (wisi-goto-containing cache);; EQUAL_GREATER
+                (let ((cache-col (current-column))
+                      (cache-pos (point))
+                      (line-end-pos (line-end-position)))
+                  (if (= (+ 2 cache-pos) line-end-pos)
+                      ;;   Post =>
+                      ;;     Y >= X and
+                      ;;     Some_Very_Verbose_Predicate (X, Y);
+                      (progn
+                        (goto-char cache-pos)
+                        (+ (current-indentation) ada-indent-broken))
+                    ;; with Pre => X > 10 and
+                    ;;             X < 50 and
+                    (+ 3 cache-col))
+                  ))
+
+               (t
+                (let ((cur-line (line-number-at-pos (point)))
+                      (paren-line (line-number-at-pos (nth 1 (syntax-ppss)))))
+                  (cond
+                   ((and (ada-in-paren-p)
+                         (eq cur-line paren-line))
+                    ;; test/ada_mode-parens.adb
+                    ;; Local_2 : Integer := (1 + 2 +
+                    ;;                         3);
+                    ;;
+                    ;; test/ada_mode-parens.adb
+                    ;; if A.all
+                    ;;   or else (B.all
+                    ;;              --EMACSCMD:(test-face "then" 
'font-lock-keyword-face)
+                    ;;              and then C
+                    (+ (current-column) ada-indent-broken))
+
+                   (t
+                    ;; test/ada_mode-conditional_expressions.adb
+                    ;; L5 : Boolean :=
+                    ;;   (case C is
+                    ;;       when A =>
+                    ;;          J = 4
+                    ;;            or else M, --  test case from Piotr Trojanek
+                    ;;
+                    ;; test/ada_mode-nominal.adb
+                    ;; return 1.0 +
+                    ;;          Function_2a (Parent_Type_1'(1, 2.0, False)) +
+                    (+ (ada-wisi-current-indentation) ada-indent-broken))
+                   )))
+               )))
+           ));; expression-start
+
+         (label
           ;; test/ada_mode-nominal.adb
-          ;; A :=
-          ;;   (
-          ;;    -- a comment between paren and first association
-          ;;    1 =>
-          ;;
-          ;; test/ada_mode-parens.adb
-          ;; return Float (
-          ;;               Integer'Value
-          ;; indenting 'Integer'
-          (let ((paren-column (current-column))
-                (start-is-comment (save-excursion (goto-char start) 
(looking-at comment-start-skip))))
-            (wisi-forward-token); point is now after paren
-            (if start-is-comment
-                (skip-syntax-forward " >"); point is now on comment
-              (forward-comment (point-max)); point is now on first token
-              )
-            (if (= (point) start)
-                ;; case 2) or 3)
-                (1+ paren-column)
-              ;; 1)
-              (+ paren-column 1 ada-indent-broken))))
+          ;; <<Label_1>>
+          ;;    --  a comment after a label
+          (+ (current-column) (- ada-indent-label)))
 
-         ((return-with-params return-without-params)
+         (list-break
           ;; test/ada_mode-nominal.adb
-          ;; function Function_Access_1
-          ;;   (A_Param : in Float)
-          ;;   return
-          ;;     Standard.Float
-          ;; indenting 'Standard.Float'
+          ;; with
+          ;;   Storage_Size => 512 + 256,
+          ;;   Priority => 5;
           ;;
-          ;; test/ada_mode-expression_functions.ads
-          ;; function Square (A : in Float) return Float
-          ;;   is (A * A);
-          ;; indenting 'is'
+          ;; (1 => (others => 1.0),
+          ;;  2
           ;;
-          ;; test/ada_mode-nominal.ads
-          ;; function Function_2g
-          ;;   (Param : in Private_Type_1)
-          ;;   return Float
-          ;;   is abstract;
-          ;; indenting 'is'
-          (back-to-indentation)
-          (+ (current-column) ada-indent-broken))
+          ;; test/format_paramlist.adb
+          ;; procedure X (Y : in     Z 'Class := Default_Z;
+          ;;              B : access Integer;
+          (ada-wisi-indent-list-break cache prev-token))
+
+         (open-paren
+          (cond
+           ((eq (cadr prev-token) (point))
+            ;; test/ada_mode-parens.adb
+            ;; return Float (
+            ;;               Integer'Value
+            (goto-char start)
+            (wisi-indent-paren 1))
+
+           (t
+            ;; test/ada_mode-parens.adb
+            ;; (Left,
+            ;;    Right : in Array_Type_1) -- ada-indent-broken to match 4.01
+            (goto-char start)
+            (wisi-indent-paren (1+ ada-indent-broken)))
+           ))
+
+         ((return-with-params
+           ;; test/ada_mode-nominal.adb
+           ;; function Function_Access_1
+           ;;   (A_Param : in Float)
+           ;;   return
+           ;;     Standard.Float
+           ;;
+           ;; test/ada_mode-nominal.ads
+           ;; function Function_2g
+           ;;   (Param : in Private_Type_1)
+           ;;   return Float
+           ;;     is abstract;
+           return-without-params
+           ;; test/ada_mode-nominal.adb
+           ;; type Function_Access_Type_2g is access protected function return
+           ;;   access Standard.Float;
+           )
+          (+ (current-indentation) ada-indent-broken))
 
          (statement-end
+          ;; test/ada_mode-nominal.ads
+          ;; pragma Elaborate_Body (Ada_Mode.Nominal);
+          ;; -- Comment after one line of code; broken versions of the
           (ada-wisi-indent-containing 0 cache nil))
 
          (statement-other
-          (cl-ecase (wisi-cache-token cache)
+          (cl-case (wisi-cache-token cache)
             (ABORT
+             ;; test/subdir/ada_mode-separate_task_body.adb
              ;; select
              ;;    Please_Abort;
              ;; then
@@ -1015,25 +887,14 @@ cached token, return new indentation for point."
              ;;    Titi;
              (ada-wisi-indent-containing ada-indent cache))
 
-            ;; test/subdir/ada_mode-separate_task_body.adb
-            ((COLON COLON_EQUAL)
-             ;; Local_3 : constant Float :=
-             ;;   Local_2;
-             ;;
-             ;; test/ada_mode-nominal.ads
-             ;; type Record_Type_3 (Discriminant_1 : access Integer) is tagged 
record
-             ;;    Component_1 : Integer; -- end 2
-             ;;    Component_2 :
-             ;;      Integer;
-             ;; indenting 'Integer'; containing is ';'
-             (ada-wisi-indent-cache ada-indent-broken cache))
-
             (COMMA
              (cl-ecase (wisi-cache-nonterm cache)
                (name_list
                 (cl-ecase (wisi-cache-nonterm (wisi-get-containing-cache 
cache))
                   (use_clause
                    ;; test/with_use1.adb
+                   ;; use Ada.Text_IO,
+                   ;;     Ada.Numerics,   --  used to be indented with 
ada-broken-indent
                    (ada-wisi-indent-containing ada-indent-use cache))
 
                   (with_clause
@@ -1047,194 +908,102 @@ cached token, return new indentation for point."
                   ))
                ))
 
-            (ELSIF
-             ;; test/g-comlin.adb
-             ;; elsif Index_Switches + Max_Length <= Switches'Last
-             ;;   and then Switches (Index_Switches + Max_Length) = '?'
-             (ada-wisi-indent-cache ada-indent-broken cache))
-
             (EQUAL_GREATER
-             (let ((cache-col (current-column))
-                   (cache-pos (point))
-                   (line-end-pos (line-end-position))
-                   (containing (wisi-goto-containing cache nil)))
-               (while (eq (wisi-cache-nonterm containing) 'association_list)
-                 (setq containing (wisi-goto-containing containing nil)))
-
-               (cl-ecase (wisi-cache-nonterm containing)
-                 ((actual_parameter_part aggregate)
-                  ;; ada_mode-generic_package.ads
-                  ;; with package A_Package_2 is new Ada.Text_IO.Integer_IO 
(Num =>
-                  ;;                                                           
Formal_Signed_Integer_Type);
-                  ;;  indenting 'Formal_Signed_...', point on '(Num'
-                  ;;
-                  ;; test/ada_mode-parens.adb
-                  ;; (1      =>
-                  ;;    1,
-                  ;;  2      =>
-                  ;;    1 + 2 * 3,
-                  ;; indenting '1,' or '1 +'; point on '(1'
-                  ;;
-                  ;; test/ada_mode-parens.adb
-                  ;; Local_13 : Local_11_Type
-                  ;;   := (Integer'(1),
-                  ;;       Integer'(2));
-                  ;; indenting 'Integer'; point on '(Integer'
-                  (+ (current-column) 1 ada-indent-broken))
-
-                 (aspect_specification_opt
-                  ;; test/aspects.ads
-                  ;; with Pre => X > 10 and
-                  ;;             X < 50 and
-                  ;;             F (X),
-                  ;;   Post =>
-                  ;;     Y >= X and
-                  ;; indenting 'X < 50' or 'Y >= X'; cache is '=>', point is 
on '=>'
-                  ;; or indenting 'Post =>'; cache is ',', point is on 'with'
-                  (cl-ecase (wisi-cache-token cache)
-                    (COMMA
-                     (+ (current-indentation) ada-indent-broken))
-
-                    (EQUAL_GREATER
-                     (if (= (+ 2 cache-pos) line-end-pos)
-                         ;;   Post =>
-                         ;;     Y >= X and
-                         (progn
-                           (goto-char cache-pos)
-                           (+ (current-indentation) ada-indent-broken))
-                       ;; with Pre => X > 10 and
-                       ;;             X < 50 and
-                       (+ 3 cache-col)))
-                    ))
-
-                 (association_list
-                  (cl-ecase (save-excursion (wisi-cache-token 
(wisi-goto-containing cache nil)))
-                    (COMMA
-                     (ada-wisi-indent-containing (* 2 ada-indent-broken) 
cache))
-                    ))
-
-                 ((case_expression_alternative case_statement_alternative 
exception_handler)
-                  ;; containing is 'when'
-                  (+ (current-column) ada-indent))
-
-                 (generic_renaming_declaration
-                  ;; not indenting keyword following 'generic'
-                  (+ (current-column) ada-indent-broken))
-
-                  (paren_expression
-                  ;; test/ada_mode-expression_functions.ads
-                  ;; (for some X of Y =>
-                  ;;    Pred (X));
-                  ;; indenting "Pred"
-                   (+ (current-column) ada-indent))
-
-                 (primary
-                  ;; test/ada_mode-quantified_expressions.adb
-                  ;; if (for some J in 1 .. 10 =>
-                  ;;       J/2 = 0)
-                  (ada-wisi-indent-containing ada-indent-broken cache))
-
-
-                 (select_alternative
+             (cond
+              ((or
+                (eq (wisi-cache-nonterm
+                     (wisi-get-containing-cache cache))
+                    'aspect_specification_opt)
+                ;; test/aspects.ads
+                ;; with
+                ;;   Pre =>
+                ;;     X > 10 and
+                (eq (wisi-cache-nonterm
+                     (wisi-get-containing-cache (wisi-get-containing-cache 
cache)))
+                    'aspect_specification_opt)
+                ;; test/aspects.ads
+                ;; with Pre => X > 10 and
+                ;;             X < 50 and
+                ;;             F (X),
+                ;;   Post =>
+                ;;     Y >= X and
+                )
+               (ada-wisi-indent-containing (* 2 ada-indent-broken) cache))
+
+              ((memq
+                (wisi-cache-nonterm cache)
+                '(case_statement_alternative
                   ;; test/ada_mode-nominal.adb
-                  ;; or when Started
-                  ;;      =>
-                  ;;       accept Finish;
-                  ;; indenting 'accept'; point is on 'when'
-                  (+ (current-column) ada-indent))
-
-                 (variant
-                  ;; test/generic_param.adb
-                  ;; case Item_Type is
-                  ;;    when Fix | Airport =>
-                  ;;       null;
-                  ;; indenting 'null'
-                  (+ (current-column) ada-indent))
-
-                 )))
+                  ;; when C =>
+                  ;;    --EMACSCMD:...
+                  exception_handler
+                  ;; test/ada_mode-nominal.adb
+                  ;; when E : Constraint_Error =>
+                  select_alternative
+                  ;; test/test_select.adb
+                  ;; or
+                  ;;    when Local = 0 =>
+                  ;;       --EMACSCMD:(test-face "E2" 
'font-lock-function-name-face)
+                  ))
+               (ada-wisi-indent-containing ada-indent cache nil start))
+
+              (t
+               ;; test/ada_mode-parens.adb
+               ;; (1      =>
+               ;;    1,
+               ;;  2      =>
+               ;;    1 + 2 * 3,
+               ;; indenting '1,' or '1 +'
+               ;;
+               ;; test/ada_mode-conditional_expressions.adb
+               ;; L3 : Integer := (case J is
+               ;;                     when 42 =>
+               ;;                        -1,
+               ;;                     when Integer'First .. 41 =>
+               ;;                        0,
+               ;; indenting -1, 0
+               (ada-wisi-indent-containing ada-indent-broken cache nil start))
+              ))
 
             (IS
-             (setq cache (wisi-goto-containing cache))
-             (cl-ecase (wisi-cache-nonterm cache)
+             (cl-case (wisi-cache-nonterm cache)
                (full_type_declaration
-                ;; ada_mode/nominal.ads
+                ;; test/ada_mode-nominal.ads
                 ;; type Limited_Derived_Type_1a is abstract limited new
                 ;;    Private_Type_1 with record
-                ;;       Component_1 : Integer;
-                ;; indenting 'Private_Type_1'; look for 'record'
-                (let ((type-column (current-column)))
-                  (goto-char start)
-                  (if (wisi-forward-find-token 'RECORD (line-end-position) t)
-                      ;; 'record' on line being indented
-                      (+ type-column ada-indent-record-rel-type)
-                    ;; 'record' on later line
-                    (+ type-column ada-indent-broken))))
-
-               ((formal_type_declaration
-                 ;; test/ada_mode-generic_package.ads
-                 ;; type Synchronized_Formal_Derived_Type is abstract 
synchronized new Formal_Private_Type and Interface_Type
-                 ;;   with private;
-
-                 subtype_declaration
-                 ;; test/ada_mode-nominal.ads
-                 ;;    subtype Subtype_2 is Signed_Integer_Type range 10 ..
-                 ;;      20;
-
-                 private_type_declaration
-                 ;; type Private_Type_2 is abstract tagged limited
-                 ;;  private;
-                 )
-                (+ (current-column) ada-indent-broken))
+                (goto-char start)
+                (if (wisi-forward-find-token 'RECORD (line-end-position) t)
+                    ;; 'record' on line being indented
+                    (ada-wisi-indent-containing ada-indent-record-rel-type 
cache)
+                  ;; 'record' on later line
+                  (ada-wisi-indent-containing ada-indent-broken cache)))
+
+               (t
+                ;; test/ada_mode-generic_package.ads
+                ;; type Synchronized_Formal_Derived_Type is abstract ...
+                ;;   with private;
 
-               (null_procedure_declaration
+                ;; test/ada_mode-nominal.ads
+                ;;    subtype Subtype_2 is Signed_Integer_Type range 10 ..
+                ;;      20;
+                ;;
+                ;; type Private_Type_2 is abstract tagged limited
+                ;;  private;
+                ;;
                 ;; ada_mode-nominal.ads
                 ;; procedure Procedure_3b is
                 ;;   null;
-                ;; indenting null
-                (+ (current-column) ada-indent-broken))
+                (ada-wisi-indent-containing ada-indent-broken cache))
 
                ))
 
-            (LEFT_PAREN
-             ;; test/indent.ads
-             ;; C_S_Controls : constant
-             ;;   CSCL_Type :=
-             ;;     CSCL_Type'
-             ;;       (
-             ;;        1 =>
-             (+ (current-column) 1))
-
-            (NEW
-             ;; ada_mode-nominal.ads
-             ;; type Limited_Derived_Type_2 is abstract limited new 
Private_Type_1 with
-             ;;   private;
-             ;;
-             ;; test/ada_mode-generic_instantiation.ads
-             ;;   procedure Procedure_6 is new
-             ;;     Instance.Generic_Procedure (Integer, Function_1);
-             ;; indenting 'Instance'; containing is 'new'
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
-            (OF
-             ;; ada_mode-nominal.ads
-             ;; Anon_Array_2 : array (1 .. 10) of
-             ;;   Integer;
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
-            (WHEN
-             ;; test/ada_mode-parens.adb
-             ;; exit when A.all
-             ;;   or else B.all
-             (ada-wisi-indent-containing ada-indent-broken cache))
-
             (WITH
              (cl-ecase (wisi-cache-nonterm cache)
                (aggregate
                 ;; test/ada_mode-nominal-child.ads
                 ;;   (Default_Parent with
                 ;;    10, 12.0, True);
-                ;; indenting '10'; containing is '('
-                (ada-wisi-indent-containing 0 cache nil))
+                (wisi-indent-paren 1))
 
                (aspect_specification_opt
                 ;; test/aspects.ads
@@ -1247,42 +1016,53 @@ cached token, return new indentation for point."
                (derived_type_definition
                 ;; test/ada_mode-nominal-child.ads
                 ;; type Child_Type_1 is new Parent_Type_1 with
-                ;;   -- comment between 'with' and 'record'
+                ;;    -- comment between 'with' and 'record'
                 ;;    record
                 ;; indenting comment
-                (+ (current-indentation) ada-indent-broken))
+                (+ (current-indentation) ada-indent-record-rel-type))
                ))
 
-            ;; otherwise just hanging
-            ((ACCEPT FUNCTION PROCEDURE RENAMES)
-             (back-to-indentation)
-             (+ (current-column) ada-indent-broken))
-
+            (t
+             ;; test/ada_mode-nominal.ads
+             ;; type Record_Type_3 (Discriminant_1 : access Integer) is tagged 
record
+             ;;    Component_1 : Integer; -- end 2
+             ;;    Component_2 :
+             ;;      Integer;
+             ;;
+             ;; test/ada_mode-nominal.adb
+             ;; Local_3 : constant Float :=
+             ;;   Local_2;
+             ;;
+             ;; test/g-comlin.adb
+             ;; elsif Index_Switches + Max_Length <= Switches'Last
+             ;;   and then Switches (Index_Switches + Max_Length) = '?'
+             ;;
+             ;; test/ada_mode-long_paren.adb
+             ;; Packet := new Packet_Type'
+             ;;   (RT                            => RT,
+             (+ (ada-wisi-current-indentation) ada-indent-broken))
             ))
 
          (statement-start
           (cl-case (wisi-cache-token cache)
-            (WITH ;; with_clause
+            (WITH
+             ;; test/ada_mode-nominal.ads
+             ;; with
+             ;;   Ada.Text_IO;
              (+ (current-column) ada-indent-with))
 
-            (label_opt
-             ;; comment after label
-             (+ (current-column) (- ada-indent-label)))
-
             (t
-             ;; procedure Procedure_8
-             ;;   is new Instance.Generic_Procedure (Integer, Function_1);
-             ;; indenting 'is'; hanging
-             ;;
-             ;; test/ada_mode-conditional_expressions.adb
-             ;; K3 : Integer := (if
-             ;;                    J > 42
-             ;;                  then
-             ;;                    -1
-             ;;                  else
-             ;;                    +1);
-             ;; indenting J
-             (ada-wisi-indent-cache ada-indent-broken cache))
+             (if (ada-in-paren-p)
+                 ;; test/ada_mode-conditional_expressions.adb
+                 ;; K3 : Integer := (if
+                 ;;                    J > 42
+                 (wisi-indent-paren (1+ ada-indent-broken))
+
+               ;; not in paren
+               ;; test/ada_mode-generic_instantiation.ads
+               ;; procedure Procedure_8
+               ;;   is new Instance.Generic_Procedure (Integer, Function_1);
+               (+ (ada-wisi-current-indentation) ada-indent-broken)))
             ))
          )))
       )))
@@ -1381,7 +1161,7 @@ cached token, return new indentation for point."
 
 (defun ada-wisi-context-clause ()
   "For `ada-fix-context-clause'."
-  (wisi-validate-cache (point-max))
+  (wisi-validate-cache (point-max) t)
   (save-excursion
     (goto-char (point-min))
     (let ((begin nil)
@@ -1429,45 +1209,39 @@ cached token, return new indentation for point."
 
 (defun ada-wisi-goto-subunit-name ()
   "For `ada-goto-subunit-name'."
-  (wisi-validate-cache (point-max))
-  (if (not (> wisi-cache-max (point)))
-      (progn
-       (message "parse failed; can't goto subunit name")
-       nil)
-
-    (let ((end nil)
-         cache
-         (name-pos nil))
-      (save-excursion
-       ;; move to top declaration
-       (goto-char (point-min))
-       (setq cache (or (wisi-get-cache (point))
-                       (wisi-forward-cache)))
-       (while (not end)
-         (cl-case (wisi-cache-nonterm cache)
-           ((pragma use_clause with_clause)
-            (wisi-goto-end-1 cache)
-            (setq cache (wisi-forward-cache)))
-           (t
-            ;; start of compilation unit
-            (setq end t))
-           ))
-       (when (eq (wisi-cache-nonterm cache) 'subunit)
-         (wisi-forward-find-class 'name (point-max)) ;; parent name
-         (wisi-forward-token)
-         (wisi-forward-find-class 'name (point-max)) ;; subunit name
-         (setq name-pos (point)))
-       )
-      (when name-pos
-       (goto-char name-pos))
-      )))
+  (wisi-validate-cache (point-max) t)
+
+  (let ((end nil)
+       cache
+       (name-pos nil))
+    (save-excursion
+      ;; move to top declaration
+      (goto-char (point-min))
+      (setq cache (or (wisi-get-cache (point))
+                     (wisi-forward-cache)))
+      (while (not end)
+       (cl-case (wisi-cache-nonterm cache)
+         ((pragma use_clause with_clause)
+          (wisi-goto-end-1 cache)
+          (setq cache (wisi-forward-cache)))
+         (t
+          ;; start of compilation unit
+          (setq end t))
+         ))
+      (when (eq (wisi-cache-nonterm cache) 'subunit)
+       (wisi-forward-find-class 'name (point-max)) ;; parent name
+       (wisi-forward-token)
+       (wisi-forward-find-class 'name (point-max)) ;; subunit name
+       (setq name-pos (point)))
+      )
+    (when name-pos
+      (goto-char name-pos))
+    ))
 
 (defun ada-wisi-goto-declaration-start ()
   "For `ada-goto-declaration-start', which see.
 Also return cache at start."
-  (wisi-validate-cache (point))
-  (unless (> wisi-cache-max (point))
-    (error "parse failed; can't goto declarative-region-start"))
+  (wisi-validate-cache (point) t)
 
   (let ((cache (wisi-get-cache (point)))
        (done nil))
@@ -1512,9 +1286,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))
-  (unless (> wisi-cache-max (point))
-    (error "parse failed; can't goto declarative-region-start"))
+  (wisi-validate-cache (point) t)
 
   (let ((done nil)
        (first t)
@@ -1588,9 +1360,7 @@ Also return cache at start."
 
 (defun ada-wisi-make-subprogram-body ()
   "For `ada-make-subprogram-body'."
-  (wisi-validate-cache (point))
-  (when wisi-parse-failed
-    (error "syntax parse failed; cannot create body"))
+  (wisi-validate-cache (point) t)
 
   (let* ((begin (point))
         (end (save-excursion (wisi-forward-find-class 'statement-end 
(point-max)) (point)))
@@ -1600,7 +1370,7 @@ Also return cache at start."
                (+ (point) (wisi-cache-last cache)))))
     (goto-char end)
     (newline)
-    (insert " is begin\nnull;\nend ");; legal syntax; parse does not fail
+    (insert " is begin\n\nend ");; legal syntax; parse does not fail
     (insert name)
     (forward-char 1)
 
@@ -1608,14 +1378,12 @@ Also return cache at start."
     (newline-and-indent)
     (indent-region begin (point))
     (forward-line -2)
-    (back-to-indentation); before 'null;'
+    (back-to-indentation)
     ))
 
 (defun ada-wisi-scan-paramlist (begin end)
   "For `ada-scan-paramlist'."
-  (wisi-validate-cache end)
-  (when (< wisi-cache-max end)
-    (error "parse failed; can't scan paramlist"))
+  (wisi-validate-cache end t)
 
   (goto-char begin)
   (let (token
@@ -1728,52 +1496,55 @@ Also return cache at start."
 (defun ada-wisi-which-function ()
   "For `ada-which-function'."
   (wisi-validate-cache (point))
-  (save-excursion
-    (let ((result nil)
-         (cache (condition-case nil (ada-wisi-goto-declaration-start) (error 
nil))))
-      (if (null cache)
-         ;; bob or failed parse
-         (setq result "")
-
-       (when (memq (wisi-cache-nonterm cache)
-                   '(generic_package_declaration 
generic_subprogram_declaration))
-         ;; name is after next statement keyword
-         (wisi-next-statement-cache cache)
-         (setq cache (wisi-get-cache (point))))
-
-       ;; add or delete 'body' as needed
-       (cl-ecase (wisi-cache-nonterm cache)
-         (package_body
-          (setq result (ada-wisi-which-function-1 "package" nil)))
-
-         ((package_declaration
-           generic_package_declaration) ;; after 'generic'
-          (setq result (ada-wisi-which-function-1 "package" t)))
-
-         (protected_body
-          (setq result (ada-wisi-which-function-1 "protected" nil)))
-
-         ((protected_type_declaration single_protected_declaration)
-          (setq result (ada-wisi-which-function-1 "protected" t)))
-
-         ((abstract_subprogram_declaration
-           subprogram_declaration
-           generic_subprogram_declaration ;; after 'generic'
-           null_procedure_declaration)
-          (setq result (ada-wisi-which-function-1
-                        (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
-                        nil))) ;; no 'body' keyword in subprogram bodies
-
-         (subprogram_body
-          (setq result (ada-wisi-which-function-1
-                        (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
-                        nil)))
-
-         (task_type_declaration
-          (setq result (ada-wisi-which-function-1 "task" t)))
+  ;; no message on parse fail, since this could be called from which-func-mode
+  (when (> wisi-cache-max (point))
+    (save-excursion
+      (let ((result nil)
+           (cache (condition-case nil (ada-wisi-goto-declaration-start) (error 
nil))))
+       (if (null cache)
+           ;; bob or failed parse
+           (setq result "")
+
+         (when (memq (wisi-cache-nonterm cache)
+                     '(generic_package_declaration 
generic_subprogram_declaration))
+           ;; name is after next statement keyword
+           (wisi-next-statement-cache cache)
+           (setq cache (wisi-get-cache (point))))
+
+         ;; add or delete 'body' as needed
+         (cl-ecase (wisi-cache-nonterm cache)
+           (package_body
+            (setq result (ada-wisi-which-function-1 "package" nil)))
+
+           ((package_declaration
+             generic_package_declaration) ;; after 'generic'
+            (setq result (ada-wisi-which-function-1 "package" t)))
+
+           (protected_body
+            (setq result (ada-wisi-which-function-1 "protected" nil)))
+
+           ((protected_type_declaration single_protected_declaration)
+            (setq result (ada-wisi-which-function-1 "protected" t)))
+
+           ((abstract_subprogram_declaration
+             subprogram_declaration
+             generic_subprogram_declaration ;; after 'generic'
+             null_procedure_declaration)
+            (setq result (ada-wisi-which-function-1
+                          (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
+                          nil))) ;; no 'body' keyword in subprogram bodies
+
+           (subprogram_body
+            (setq result (ada-wisi-which-function-1
+                          (wisi-cache-text (wisi-forward-find-token '(FUNCTION 
PROCEDURE) (point-max)))
+                          nil)))
+
+           (task_type_declaration
+            (setq result (ada-wisi-which-function-1 "task" t)))
 
-         ))
-      result)))
+           ))
+       result))
+    ))
 
 ;;;; debugging
 (defun ada-wisi-debug-keys ()
diff --git a/packages/ada-mode/gnat-core.el b/packages/ada-mode/gnat-core.el
index c9cca70..66104c5 100644
--- a/packages/ada-mode/gnat-core.el
+++ b/packages/ada-mode/gnat-core.el
@@ -45,13 +45,13 @@
 
     (setq project (plist-put project 'prj_dir prj-dir))
 
-    (let ((process-environment (plist-get project 'proc_env)))
+    (let ((process-environment (cl-copy-list (plist-get project 'proc_env))))
       (setenv "GPR_PROJECT_PATH"
              (mapconcat 'identity
                         (plist-get project 'prj_dir)
                         (plist-get project 'path_sep)))
 
-      (setq project (plist-put project 'proc_env process-environment))
+      (setq project (plist-put project 'proc_env (cl-copy-list 
process-environment)))
       )
 
     project))
@@ -76,7 +76,7 @@
   "Handle gnat-specific Emacs Ada project file settings.
 Return new PROJECT if NAME recognized, nil otherwise.
 See also `gnat-parse-emacs-final'."
-  (let ((process-environment (plist-get project 'proc_env))); for 
substitute-in-file-name
+  (let ((process-environment (cl-copy-list (plist-get project 'proc_env)))); 
for substitute-in-file-name
     (cond
      ((or
        ;; we allow either name here for backward compatibility
@@ -264,7 +264,7 @@ Assumes current buffer is (gnat-run-buffer)"
 
   (setq command (cl-delete-if 'null command))
 
-  (let ((process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+  (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
        status)
 
     (insert (format "GPR_PROJECT_PATH=%s\n%s " (getenv "GPR_PROJECT_PATH") 
exec)); for debugging
@@ -438,7 +438,7 @@ list."
                (split-string (ada-prj-get 'gnat_stub_opts))))
        (switches (when (ada-prj-get 'gnat_stub_switches)
                    (split-string (ada-prj-get 'gnat_stub_switches))))
-       (process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+       (process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
        )
 
     ;; Make sure all relevant files are saved to disk.
diff --git a/packages/ada-mode/gpr-query.el b/packages/ada-mode/gpr-query.el
index 222f2a5..0e8e651 100755
--- a/packages/ada-mode/gpr-query.el
+++ b/packages/ada-mode/gpr-query.el
@@ -58,13 +58,11 @@
     (setf (gpr-query--session-buffer session) (gnat-run-buffer 
gpr-query-buffer-name-prefix)))
 
   (with-current-buffer (gpr-query--session-buffer session)
-    (let ((process-environment (ada-prj-get 'proc_env)) ;; for GPR_PROJECT_PATH
+    (let ((process-environment (cl-copy-list (ada-prj-get 'proc_env))) ;; for 
GPR_PROJECT_PATH
 
          (project-file (file-name-nondirectory (ada-prj-get 'gpr_file))))
       (erase-buffer); delete any previous messages, prompt
       (setf (gpr-query--session-process session)
-           ;; gnatcoll-1.6 can't handle aggregate projects; M910-032
-           ;; gpr_query can handle some aggregate projects, but not all
            (start-process (concat "gpr_query " (buffer-name))
                           (gpr-query--session-buffer session)
                           "gpr_query"
@@ -245,9 +243,9 @@ Uses `gpr_query'. Returns new list."
 (defun gpr-query-compilation (identifier file line col cmd comp-err)
   "Run gpr_query IDENTIFIER:FILE:LINE:COL CMD,
 set compilation-mode with compilation-error-regexp-alist set to COMP-ERR."
-  ;; Useful when gpr_query will return a list of references; we use
-  ;; `compilation-start' to run gpr_query, so the user can navigate
-  ;; to each result in turn via `next-error'.
+  ;; Useful when gpr_query will return a list of references; the user
+  ;; can navigate to each result in turn via `next-error'.
+  ;; FIXME: implement ada-xref-full-path.
   (let ((cmd-1 (format "%s %s:%s:%d:%d" cmd identifier file line col))
        (result-count 0)
        target-file target-line target-col)
@@ -557,8 +555,9 @@ Enable mode if ARG is positive."
       (message "parsing result ... done")
       result)))
 
-(defun gpr-query-all (identifier file line col)
+(defun gpr-query-all (identifier file line col _local-only)
   "For `ada-xref-all-function', using gpr_query."
+  ;; FIXME: implement local-only
   (gpr-query-compilation identifier file line col "refs" 
'gpr-query-ident-file))
 
 (defun gpr-query-parents (identifier file line col)
diff --git a/packages/ada-mode/gpr-wisi.el b/packages/ada-mode/gpr-wisi.el
index 13c8dcd..586fa5d 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 - 2015 Free Software Foundation, Inc.
+;; Copyright (C) 2013 - 2016 Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -161,16 +161,19 @@ or containing ancestor of CACHE that is at a line 
beginning."
 (defun gpr-wisi-which-function ()
   "For `gpr-which-function'."
   (wisi-validate-cache (point))
-  (let ((cache (wisi-backward-cache)))
-    (while (and cache
-               (not (and
-                     (memq (wisi-cache-nonterm cache) '(package_spec 
simple_project_declaration))
-                     (eq (wisi-cache-class cache) 'statement-start))))
-      (setq cache (wisi-goto-containing cache)))
-    (when cache
-      (wisi-forward-token); package | project
-      (wisi-token-text (wisi-forward-token)); name
-      )))
+  ;; no message on parse fail, since this could be called from which-func-mode
+  (when (> wisi-cache-max (point))
+    (let ((cache (wisi-backward-cache)))
+      (while (and cache
+                 (not (and
+                       (memq (wisi-cache-nonterm cache) '(package_spec 
simple_project_declaration))
+                       (eq (wisi-cache-class cache) 'statement-start))))
+       (setq cache (wisi-goto-containing cache)))
+      (when cache
+       (wisi-forward-token); package | project
+       (wisi-token-text (wisi-forward-token)); name
+       ))
+    ))
 
 ;;; debugging
 (defun gpr-wisi-debug-keys ()
diff --git a/packages/aggressive-indent/aggressive-indent.el 
b/packages/aggressive-indent/aggressive-indent.el
index 3828bf2..a066c58 100644
--- a/packages/aggressive-indent/aggressive-indent.el
+++ b/packages/aggressive-indent/aggressive-indent.el
@@ -4,7 +4,7 @@
 
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/aggressive-indent-mode
-;; Version: 1.8.1
+;; Version: 1.8.3
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
 ;; Keywords: indent lisp maint tools
 ;; Prefix: aggressive-indent
@@ -105,7 +105,7 @@ Please include this in your report!"
 (defvar aggressive-indent-mode)
 
 ;;; Configuring indentarion
-(defcustom aggressive-indent-dont-electric-modes '(ruby-mode)
+(defcustom aggressive-indent-dont-electric-modes nil
   "List of major-modes where `electric-indent' should be disabled."
   :type '(choice
           (const :tag "Never use `electric-indent-mode'." t)
@@ -124,6 +124,9 @@ Please include this in your report!"
     doc-view-mode
     dos-mode
     erc-mode
+    feature-mode
+    fortran-mode
+    f90-mode
     jabber-chat-mode
     haml-mode
     haskell-mode
@@ -136,6 +139,7 @@ Please include this in your report!"
     netcmd-mode
     python-mode
     sass-mode
+    scala-mode
     slim-mode
     special-mode
     shell-mode
@@ -183,7 +187,7 @@ change."
   :package-version '(aggressive-indent . "0.3"))
 
 ;;; Preventing indentation
-(defvar aggressive-indent--internal-dont-indent-if
+(defconst aggressive-indent--internal-dont-indent-if
   '((memq this-command aggressive-indent-protected-commands)
     (region-active-p)
     buffer-read-only
@@ -239,6 +243,12 @@ This is for internal use only.  For user customization, use
                 '(and (derived-mode-p 'coq-mode)
                       (not (string-match "\\.[[:space:]]*$"
                                          (thing-at-point 'line))))))
+(eval-after-load 'ruby-mode
+  '(add-to-list 'aggressive-indent--internal-dont-indent-if
+                '(when (derived-mode-p 'ruby-mode)
+                   (let ((line (thing-at-point 'line)))
+                     (and (stringp line)
+                          (string-match "\\b\\(if\\|case\\|do\\|begin\\) *$" 
line))))))
 
 (defcustom aggressive-indent-dont-indent-if '()
   "List of variables and functions to prevent aggressive indenting.
@@ -366,6 +376,12 @@ or messages."
       (setq aggressive-indent--changed-list
             (cdr aggressive-indent--changed-list)))))
 
+(defcustom aggressive-indent-sit-for-time 0.05
+  "Time, in seconds, to wait before indenting.
+If you feel aggressive-indent is causing Emacs to hang while
+typing, try tweaking this number."
+  :type 'float)
+
 (defun aggressive-indent--indent-if-changed ()
   "Indent any region that changed in the last command loop."
   (when aggressive-indent--changed-list
@@ -374,6 +390,7 @@ or messages."
         (unless (or (run-hook-wrapped 
'aggressive-indent--internal-dont-indent-if #'eval)
                     (aggressive-indent--run-user-hooks))
           (while-no-input
+            (sit-for aggressive-indent-sit-for-time t)
             (redisplay)
             (aggressive-indent--proccess-changed-list-and-indent)))))))
 
diff --git a/packages/async/async.el b/packages/async/async.el
index 6619fff..99162cb 100644
--- a/packages/async/async.el
+++ b/packages/async/async.el
@@ -298,6 +298,42 @@ returns nil.  It can still be useful, however, as an 
argument to
   "Evaluate FUNC in a separate Emacs process, synchronously."
   `(async-get (async-start ,func)))
 
+(defun async--fold-left (fn forms bindings)
+  (let ((res forms))
+    (dolist (binding bindings)
+      (setq res (funcall fn res
+                         (if (listp binding)
+                             binding
+                             (list binding)))))
+    res))
+
+(defmacro async-let (bindings &rest forms)
+  "Implements `let', but each binding is established asynchronously.
+For example:
+
+  (async-let ((x (foo))
+              (y (bar)))
+     (message \"%s %s\" x y))
+
+    expands to ==>
+
+  (async-start (foo)
+   (lambda (x)
+     (async-start (bar)
+      (lambda (y)
+        (message \"%s %s\" x y)))))"
+  (declare (indent 1))
+  (async--fold-left
+   (lambda (acc binding)
+     (let ((fun (pcase (cadr binding)
+                  ((and (pred functionp) f) f)
+                  (f `(lambda () ,f)))))
+       `(async-start ,fun
+                     (lambda (,(car binding))
+                       ,acc))))
+   `(progn ,@forms)
+   (reverse bindings)))
+
 (provide 'async)
 
 ;;; async.el ends here
diff --git a/packages/async/dired-async.el b/packages/async/dired-async.el
index d0de789..ed37953 100644
--- a/packages/async/dired-async.el
+++ b/packages/async/dired-async.el
@@ -262,7 +262,7 @@ ESC or `q' to not overwrite any of the remaining files,
                           for destp = (file-exists-p to)
                           do (and bf destp
                                   (with-current-buffer bf
-                                    (set-visited-file-name to nil t))))))))
+                                    (set-visited-file-name to t t))))))))
     ;; Start async process.
     (when async-fn-list
       (async-start `(lambda ()
diff --git a/packages/beacon/beacon.el b/packages/beacon/beacon.el
index 9a3edac..2c33d5e 100644
--- a/packages/beacon/beacon.el
+++ b/packages/beacon/beacon.el
@@ -5,7 +5,7 @@
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/beacon
 ;; Keywords: convenience
-;; Version: 1.3.1
+;; Version: 1.3.2
 ;; Package-Requires: ((seq "2.14"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -147,7 +147,13 @@ For instance, if you want to disable beacon on buffers 
where
     (add-hook \\='beacon-dont-blink-predicates
               (lambda () (bound-and-true-p hl-line-mode)))")
 
+(defun beacon--compilation-mode-p ()
+  "Non-nil if this is some form of compilation mode."
+  (or (derived-mode-p 'compilation-mode)
+      (bound-and-true-p compilation-minor-mode)))
+
 (add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p)
+(add-hook 'beacon-dont-blink-predicates #'beacon--compilation-mode-p)
 
 (defcustom beacon-dont-blink-major-modes '(t magit-status-mode magit-popup-mode
                                        inf-ruby-mode
@@ -280,9 +286,10 @@ Only returns `beacon-size' elements."
                        (color-distance "white" bg)))
                (make-list 3 (* beacon-color 65535)))
               (t (make-list 3 (* (- 1 beacon-color) 65535))))))
-    (apply #'seq-mapn (lambda (r g b) (format "#%04x%04x%04x" r g b))
-           (mapcar (lambda (n) (butlast (beacon--int-range (elt fg n) (elt bg 
n))))
-                   [0 1 2]))))
+    (when bg
+      (apply #'seq-mapn (lambda (r g b) (format "#%04x%04x%04x" r g b))
+             (mapcar (lambda (n) (butlast (beacon--int-range (elt fg n) (elt 
bg n))))
+                     [0 1 2])))))
 
 
 ;;; Blinking
diff --git a/packages/company/NEWS.md b/packages/company/NEWS.md
index 758f0be..32d05b3 100644
--- a/packages/company/NEWS.md
+++ b/packages/company/NEWS.md
@@ -1,5 +1,18 @@
 # History of user-visible changes
 
+## 2016-11-12 (0.9.1)
+
+* `company-indent-or-complete-common` skips trying to indent if
+  `indent-line-function` is `indent-relative` or `indent-relative-maybe`.
+* Better visualization of search matches. New face 
`company-tooltip-search-selection`.
+* New variable `company-files-exclusions`.
+* `company-next-page` and `company-previous-page` adhere to
+  `company-selection-wrap-around` docstring more closely and only wrap around
+  when the selection is at the start of the end of the list.
+* `company-pseudo-tooltip-unless-just-one-frontend-with-delay` handles custom
+  frontends derived from `company-preview-frontend` better.
+* `company-idle-delay` is automatically adjusted to a non-zero value.
+
 ## 2016-06-23 (0.9.0)
 
 * Group of backends can now contain keyword `:separate`, which makes candidates
diff --git a/packages/company/company-dabbrev-code.el 
b/packages/company/company-dabbrev-code.el
index 9331087..37f287c 100644
--- a/packages/company/company-dabbrev-code.el
+++ b/packages/company/company-dabbrev-code.el
@@ -96,7 +96,7 @@ comments or strings."
                      (`t (list major-mode))
                      (`code company-dabbrev-code-modes)
                      (`all `all))
-                   t)))
+                   (not company-dabbrev-code-everywhere))))
     (ignore-case company-dabbrev-code-ignore-case)
     (duplicates t)))
 
diff --git a/packages/company/company-files.el 
b/packages/company/company-files.el
index c19d3d6..4410281 100644
--- a/packages/company/company-files.el
+++ b/packages/company/company-files.el
@@ -1,4 +1,4 @@
-;;; company-files.el --- company-mode completion backend for file paths
+;;; company-files.el --- company-mode completion backend for file names
 
 ;; Copyright (C) 2009-2011, 2014-2015  Free Software Foundation, Inc.
 
@@ -28,14 +28,40 @@
 (require 'company)
 (require 'cl-lib)
 
+(defgroup company-files nil
+  "Completion backend for file names."
+  :group 'company)
+
+(defcustom company-files-exclusions nil
+  "File name extensions and directory names to ignore.
+The values should use the same format as `completion-ignored-extensions'."
+  :type '(const string)
+  :package-version '(company . "0.9.1"))
+
 (defun company-files--directory-files (dir prefix)
-  (ignore-errors
-    ;; Don't use directory-files. It produces directories without trailing /.
-    (let ((comp (sort (file-name-all-completions prefix dir)
-                      (lambda (s1 s2) (string-lessp (downcase s1) (downcase 
s2))))))
-      (if (equal prefix "")
-          (delete "../" (delete "./" comp))
-        comp))))
+  ;; Don't use directory-files. It produces directories without trailing /.
+  (condition-case err
+      (let ((comp (sort (file-name-all-completions prefix dir)
+                        (lambda (s1 s2) (string-lessp (downcase s1) (downcase 
s2))))))
+        (when company-files-exclusions
+          (setq comp (company-files--exclusions-filtered comp)))
+        (if (equal prefix "")
+            (delete "../" (delete "./" comp))
+          comp))
+    (file-error nil)))
+
+(defun company-files--exclusions-filtered (completions)
+  (let* ((dir-exclusions (cl-delete-if-not #'company-files--trailing-slash-p
+                                           company-files-exclusions))
+         (file-exclusions (cl-set-difference company-files-exclusions
+                                             dir-exclusions)))
+    (cl-loop for c in completions
+             unless (if (company-files--trailing-slash-p c)
+                        (member c dir-exclusions)
+                      (cl-find-if (lambda (exclusion)
+                                    (string-suffix-p exclusion c))
+                                  file-exclusions))
+             collect c)))
 
 (defvar company-files--regexps
   (let* ((root (if (eq system-type 'windows-nt)
diff --git a/packages/company/company-gtags.el 
b/packages/company/company-gtags.el
index 5050783..82b8032 100644
--- a/packages/company/company-gtags.el
+++ b/packages/company/company-gtags.el
@@ -66,7 +66,8 @@ completion."
   (with-temp-buffer
     (let (tags)
       (when (= 0 (call-process company-gtags-executable nil
-                               (list (current-buffer) nil) nil "-xGq" (concat 
"^" prefix)))
+                               ;; "-T" goes through all the tag files listed 
in GTAGSLIBPATH
+                               (list (current-buffer) nil) nil "-xGqT" (concat 
"^" prefix)))
         (goto-char (point-min))
         (cl-loop while
                  (re-search-forward (concat
diff --git a/packages/company/company-keywords.el 
b/packages/company/company-keywords.el
index e59eaa2..fac37f5 100644
--- a/packages/company/company-keywords.el
+++ b/packages/company/company-keywords.el
@@ -210,6 +210,14 @@
      "do" "else" "elsif"  "end" "ensure" "false" "for" "if" "in" "module"
      "next" "nil" "not" "or" "redo" "rescue" "retry" "return" "self" "super"
      "then" "true" "undef" "unless" "until" "when" "while" "yield")
+    ;; From https://doc.rust-lang.org/grammar.html#keywords
+    ;; but excluding unused reserved words: 
https://www.reddit.com/r/rust/comments/34fq0k/is_there_a_good_list_of_rusts_keywords/cqucvnj
+    (rust-mode
+     "Self"
+     "as" "box" "break" "const" "continue" "crate" "else" "enum" "extern"
+     "false" "fn" "for" "if" "impl" "in" "let" "loop" "macro" "match" "mod"
+     "move" "mut" "pub" "ref" "return" "self" "static" "struct" "super"
+     "trait" "true" "type" "unsafe" "use" "where" "while")
     (scala-mode
      "abstract" "case" "catch" "class" "def" "do" "else" "extends" "false"
      "final" "finally" "for" "forSome" "if" "implicit" "import" "lazy" "match"
@@ -225,8 +233,10 @@
      )
     ;; aliases
     (js2-mode . javascript-mode)
+    (js2-jsx-mode . javascript-mode)
     (espresso-mode . javascript-mode)
     (js-mode . javascript-mode)
+    (js-jsx-mode . javascript-mode)
     (cperl-mode . perl-mode)
     (jde-mode . java-mode)
     (ess-julia-mode . julia-mode))
diff --git a/packages/company/company-tests.el 
b/packages/company/company-tests.el
index f0d669d..5f7a852 100644
--- a/packages/company/company-tests.el
+++ b/packages/company/company-tests.el
@@ -1,6 +1,6 @@
 ;;; company-tests.el --- company-mode test helpers  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011, 2013-2014  Free Software Foundation, Inc.
+;; Copyright (C) 2011, 2013-2016  Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov
 
@@ -21,6 +21,9 @@
 
 (require 'company)
 
+(defvar company-dir (file-name-directory (or load-file-name
+                                             buffer-file-name)))
+
 (defun company--column (&optional pos)
   (car (company--col-row pos)))
 
diff --git a/packages/company/company.el b/packages/company/company.el
index a2908af..32b4b1a 100644
--- a/packages/company/company.el
+++ b/packages/company/company.el
@@ -5,7 +5,7 @@
 ;; Author: Nikolaj Schumacher
 ;; Maintainer: Dmitry Gutov <address@hidden>
 ;; URL: http://company-mode.github.io/
-;; Version: 0.9.0
+;; Version: 0.9.2
 ;; Keywords: abbrev, convenience, matching
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
 
@@ -83,7 +83,17 @@ buffer-local wherever it is set."
       (declare (debug defvar) (doc-string 3))
       `(progn
          (defvar ,var ,val ,docstring)
-         (make-variable-buffer-local ',var)))))
+         (make-variable-buffer-local ',var))))
+
+  (unless (fboundp 'string-suffix-p)
+    (defun string-suffix-p (suffix string  &optional ignore-case)
+      "Return non-nil if SUFFIX is a suffix of STRING.
+If IGNORE-CASE is non-nil, the comparison is done without paying
+attention to case differences."
+      (let ((start-pos (- (length string) (length suffix))))
+        (and (>= start-pos 0)
+             (eq t (compare-strings suffix nil nil
+                                    string start-pos nil ignore-case)))))))
 
 (defgroup company nil
   "Extensible inline text completion mechanism"
@@ -108,9 +118,13 @@ buffer-local wherever it is set."
   "Face used for the selection in the tooltip.")
 
 (defface company-tooltip-search
-  '((default :inherit company-tooltip-selection))
+  '((default :inherit highlight))
   "Face used for the search string in the tooltip.")
 
+(defface company-tooltip-search-selection
+  '((default :inherit highlight))
+  "Face used for the search string inside the selection in the tooltip.")
+
 (defface company-tooltip-mouse
   '((default :inherit highlight))
   "Face used for the tooltip item under the mouse.")
@@ -683,6 +697,12 @@ asynchronous call into synchronous.")
       (unless (keywordp b)
         (company-init-backend b))))))
 
+(defun company--maybe-init-backend (backend)
+  (or (not (symbolp backend))
+      (eq t (get backend 'company-init))
+      (unless (get backend 'company-init)
+        (company-init-backend backend))))
+
 (defcustom company-lighter-base "company"
   "Base string to use for the `company-mode' lighter."
   :type 'string
@@ -735,9 +755,6 @@ keymap during active completions (`company-active-map'):
   nil company-lighter company-mode-map
   (if company-mode
       (progn
-        (when (eq company-idle-delay t)
-          (setq company-idle-delay 0)
-          (warn "Setting `company-idle-delay' to t is deprecated.  Set it to 0 
instead."))
         (add-hook 'pre-command-hook 'company-pre-command nil t)
         (add-hook 'post-command-hook 'company-post-command nil t)
         (mapc 'company-init-backend company-backends))
@@ -913,13 +930,16 @@ matches IDLE-BEGIN-AFTER-RE, return it wrapped in a cons."
       (if (functionp company-backend)
           (apply company-backend args)
         (apply #'company--multi-backend-adapter company-backend args))
+    (user-error (user-error
+                 "Company: backend %s user-error: %s"
+                 company-backend (error-message-string err)))
     (error (error "Company: backend %s error \"%s\" with args %s"
                   company-backend (error-message-string err) args))))
 
 (defun company--multi-backend-adapter (backends command &rest args)
   (let ((backends (cl-loop for b in backends
-                           when (not (and (symbolp b)
-                                          (eq 'failed (get b 'company-init))))
+                           when (or (keywordp b)
+                                    (company--maybe-init-backend b))
                            collect b))
         (separate (memq :separate backends)))
 
@@ -1428,7 +1448,7 @@ prefix match (same case) will be prioritized."
                (eq company-require-match t))))))
 
 (defun company-auto-complete-p (input)
-  "Return non-nil, if input starts with punctuation or parentheses."
+  "Return non-nil if INPUT should trigger auto-completion."
   (and (if (functionp company-auto-complete)
            (funcall company-auto-complete)
          company-auto-complete)
@@ -1437,7 +1457,8 @@ prefix match (same case) will be prioritized."
          (if (consp company-auto-complete-chars)
              (memq (char-syntax (string-to-char input))
                    company-auto-complete-chars)
-           (string-match (substring input 0 1) company-auto-complete-chars)))))
+           (string-match (regexp-quote (substring input 0 1))
+                          company-auto-complete-chars)))))
 
 (defun company--incremental-p ()
   (and (> (point) company-point)
@@ -1521,10 +1542,7 @@ prefix match (same case) will be prioritized."
       (setq prefix
             (if (or (symbolp backend)
                     (functionp backend))
-                (when (or (not (symbolp backend))
-                          (eq t (get backend 'company-init))
-                          (unless (get backend 'company-init)
-                            (company-init-backend backend)))
+                (when (company--maybe-init-backend backend)
                   (funcall backend 'prefix))
               (company--multi-backend-adapter backend 'prefix)))
       (when prefix
@@ -1638,11 +1656,13 @@ prefix match (same case) will be prioritized."
               (company--perform)))
           (if company-candidates
               (company-call-frontends 'post-command)
-            (and (numberp company-idle-delay)
+            (and (or (numberp company-idle-delay)
+                     ;; Deprecated.
+                     (eq company-idle-delay t))
                  (not defining-kbd-macro)
                  (company--should-begin)
                  (setq company-timer
-                       (run-with-timer company-idle-delay nil
+                       (run-with-timer (company--idle-delay) nil
                                        'company-idle-begin
                                        (current-buffer) (selected-window)
                                        (buffer-chars-modified-tick) 
(point))))))
@@ -1651,6 +1671,11 @@ prefix match (same case) will be prioritized."
              (company-cancel))))
   (company-install-map))
 
+(defun company--idle-delay ()
+  (if (memql company-idle-delay '(t 0 0.0))
+      0.01
+    company-idle-delay))
+
 (defvar company--begin-inhibit-commands '(company-abort
                                           company-complete-mouse
                                           company-complete
@@ -1977,15 +2002,23 @@ With ARG, move by that many elements."
   "Select the candidate one page further."
   (interactive)
   (when (company-manual-begin)
-    (company-set-selection (+ company-selection
-                              company-tooltip-limit))))
+    (if (and company-selection-wrap-around
+             (= company-selection (1- company-candidates-length)))
+        (company-set-selection 0)
+      (let (company-selection-wrap-around)
+        (company-set-selection (+ company-selection
+                                  company-tooltip-limit))))))
 
 (defun company-previous-page ()
   "Select the candidate one page earlier."
   (interactive)
   (when (company-manual-begin)
-    (company-set-selection (- company-selection
-                              company-tooltip-limit))))
+    (if (and company-selection-wrap-around
+             (zerop company-selection))
+        (company-set-selection (1- company-candidates-length))
+      (let (company-selection-wrap-around)
+        (company-set-selection (- company-selection
+                                  company-tooltip-limit))))))
 
 (defvar company-pseudo-tooltip-overlay)
 
@@ -2075,6 +2108,9 @@ With ARG, move by that many elements."
   (cond
    ((use-region-p)
     (indent-region (region-beginning) (region-end)))
+   ((memq indent-line-function
+          '(indent-relative indent-relative-maybe))
+    (company-complete-common))
    ((let ((old-point (point))
           (old-tick (buffer-chars-modified-tick))
           (tab-always-indent t))
@@ -2450,22 +2486,24 @@ If SHOW-VERSION is non-nil, show the version in the 
echo area."
                                          'company-tooltip-common-selection
                                        'company-tooltip-common)
                                      line)
-    (when selected
-      (if (let ((re (funcall company-search-regexp-function
+    (when (let ((re (funcall company-search-regexp-function
                              company-search-string)))
             (and (not (string= re ""))
                  (string-match re value (length company-prefix))))
-          (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
-            (let ((beg (+ margin mbeg))
-                  (end (+ margin mend))
-                  (width (- width (length right))))
-              (when (< beg width)
-                (font-lock-prepend-text-property beg (min end width)
-                                                 'face 'company-tooltip-search
-                                                 line))))
-        (font-lock-append-text-property 0 width 'face
-                                        'company-tooltip-selection
-                                        line)))
+      (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
+        (let ((beg (+ margin mbeg))
+              (end (+ margin mend))
+              (width (- width (length right))))
+          (when (< beg width)
+            (font-lock-prepend-text-property beg (min end width) 'face
+                                             (if selected
+                                                 
'company-tooltip-search-selection
+                                               'company-tooltip-search)
+                                             line)))))
+    (when selected
+      (font-lock-append-text-property 0 width 'face
+                                      'company-tooltip-selection
+                                      line))
     (font-lock-append-text-property 0 width 'face
                                     'company-tooltip
                                     line)
@@ -2865,20 +2903,20 @@ Returns a negative number if the tooltip should be 
displayed above point."
 (defun company-pseudo-tooltip-unless-just-one-frontend-with-delay (command)
   "`compandy-pseudo-tooltip-frontend', but shown after a delay.
 Delay is determined by `company-tooltip-idle-delay'."
+  (defvar company-preview-overlay)
+  (when (and (memq command '(pre-command hide))
+             company-tooltip-timer)
+    (cancel-timer company-tooltip-timer)
+    (setq company-tooltip-timer nil))
   (cl-case command
-    (pre-command
-     (company-pseudo-tooltip-unless-just-one-frontend command)
-     (when company-tooltip-timer
-       (cancel-timer company-tooltip-timer)
-       (setq company-tooltip-timer nil)))
     (post-command
      (if (or company-tooltip-timer
              (overlayp company-pseudo-tooltip-overlay))
-         (if (not (memq 'company-preview-frontend company-frontends))
+         (if (not (overlayp company-preview-overlay))
              (company-pseudo-tooltip-unless-just-one-frontend command)
-           (company-preview-frontend 'pre-command)
-           (company-pseudo-tooltip-unless-just-one-frontend command)
-           (company-preview-frontend 'post-command))
+           (let (company-tooltip-timer)
+             (company-call-frontends 'pre-command))
+           (company-call-frontends 'post-command))
        (setq company-tooltip-timer
              (run-with-timer company-tooltip-idle-delay nil
                              
'company-pseudo-tooltip-unless-just-one-frontend-with-delay
diff --git a/packages/company/test/files-tests.el 
b/packages/company/test/files-tests.el
new file mode 100644
index 0000000..2e89d8d
--- /dev/null
+++ b/packages/company/test/files-tests.el
@@ -0,0 +1,48 @@
+;;; filtes-tests.el --- company-mode tests  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Dmitry Gutov
+
+;; 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 'company-tests)
+(require 'company-files)
+
+(ert-deftest company-files-candidates-normal ()
+  (let (company-files--completion-cache)
+    (should (member (expand-file-name "test/" company-dir)
+                    (company-files 'candidates
+                                   company-dir)))))
+
+(ert-deftest company-files-candidates-normal-root ()
+  (let (company-files--completion-cache)
+    (should (member "/bin/"
+                    (company-files 'candidates "/")))))
+
+(ert-deftest company-files-candidates-excluding-dir ()
+  (let ((company-files-exclusions '("test/"))
+        company-files--completion-cache)
+    (should-not (member (expand-file-name "test/" company-dir)
+                        (company-files 'candidates
+                                       company-dir)))))
+
+(ert-deftest company-files-candidates-excluding-files ()
+  (let ((company-files-exclusions '(".el"))
+        company-files--completion-cache)
+    (should-not (member (expand-file-name "company.el" company-dir)
+                        (company-files 'candidates
+                                       company-dir)))))
diff --git a/packages/company/test/frontends-tests.el 
b/packages/company/test/frontends-tests.el
index 7b8ee61..9592bed 100644
--- a/packages/company/test/frontends-tests.el
+++ b/packages/company/test/frontends-tests.el
@@ -256,18 +256,18 @@
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 6 t nil nil)
              #("barfoo"
-               0 3 (face (company-tooltip) mouse-face (company-tooltip-mouse))
-               3 6 (face (company-tooltip-search company-tooltip) mouse-face 
(company-tooltip-mouse)))))
+               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
+               3 6 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face 
(company-tooltip-mouse)))))
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 5 t "" " ")
              #("barfo "
-               0 3 (face (company-tooltip) mouse-face (company-tooltip-mouse))
-               3 5 (face (company-tooltip-search company-tooltip) mouse-face 
(company-tooltip-mouse))
-               5 6 (face (company-tooltip) mouse-face 
(company-tooltip-mouse)))))
+               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
+               3 5 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face (company-tooltip-mouse))
+               5 6 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))
     (should (ert-equal-including-properties
              (company-fill-propertize "barfoo" nil 3 t " " " ")
              #(" bar "
-               0 5 (face (company-tooltip) mouse-face 
(company-tooltip-mouse)))))))
+               0 5 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))))
 
 (ert-deftest company-fill-propertize-overrides-face-property ()
   (let ((company-backend #'ignore)
diff --git a/packages/debbugs/Debbugs.wsdl b/packages/debbugs/Debbugs.wsdl
index f9657db..5ca86ee 100644
--- a/packages/debbugs/Debbugs.wsdl
+++ b/packages/debbugs/Debbugs.wsdl
@@ -331,10 +331,10 @@ along with GNU Emacs.  If not, see 
<http://www.gnu.org/licenses/>. -->
 
   <wsdl:service name="Debbugs/SOAP/SERVICE">
     <wsdl:port binding="tns:Debbugs/SOAP/BINDING" name="gnu.org">
-      <wsdlsoap:address location="http://debbugs.gnu.org/cgi/soap.cgi"/>
+      <wsdlsoap:address location="https://debbugs.gnu.org/cgi/soap.cgi"/>
     </wsdl:port>
     <wsdl:port binding="tns:Debbugs/SOAP/BINDING" name="debian.org">
-      <wsdlsoap:address location="http://bugs.debian.org/cgi-bin/soap.cgi"/>
+      <wsdlsoap:address location="https://bugs.debian.org/cgi-bin/soap.cgi"/>
     </wsdl:port>
   </wsdl:service>
 </wsdl:definitions>
diff --git a/packages/debbugs/README b/packages/debbugs/README
index 74f8db8..7e29420 100644
--- a/packages/debbugs/README
+++ b/packages/debbugs/README
@@ -2,12 +2,14 @@ This package lets you access the GNU Bug Tracker from within 
Emacs.
 
 It defines the command `M-x debbugs-gnu' for listing bugs, and the
 command `M-x debbugs-gnu-search' for bug searching.  The command
-`M-x debbugs-gnu-usertags' shows existing user tags on bugs.  In order
-to show bugs with known numbers, `M-x debbugs-gnu-bugs' could be used.
+`M-x debbugs-gnu-usertags' shows existing user tags on bugs, whilst
+the command `M-x debbugs-gnu-patches' lists bugs containing a patch.
+In order to show bugs with known numbers, `M-x debbugs-gnu-bugs' could
+be used.
 
 If you prefer the listing of bugs as TODO items of `org-mode', you
-could use the commands `M-x debbugs-org', `M-x debbugs-org-search' and
-`M-x debbugs-org-bugs' instead.
+could use the commands `M-x debbugs-org', `M-x debbugs-org-search',
+`M-x debbugs-org-patches' and `M-x debbugs-org-bugs' instead.
 
 A minor mode `debbugs-browse-mode' let you browse URLs to the GNU Bug
 Tracker as well as bug identifiers prepared for `bug-reference-mode'.
diff --git a/packages/debbugs/debbugs-browse.el 
b/packages/debbugs/debbugs-browse.el
index b4e87c7..2a98b7d 100644
--- a/packages/debbugs/debbugs-browse.el
+++ b/packages/debbugs/debbugs-browse.el
@@ -41,7 +41,7 @@ This can be either `debbugs-gnu-bugs' or `debbugs-org-bugs'."
             (string-match
              (format
               "^%s\\(%s\\)?\\([[:digit:]]+\\)$"
-              (regexp-quote "http://debbugs.gnu.org/";)
+              "https?://debbugs\\.gnu\\.org/"
               (regexp-quote "cgi/bugreport.cgi?bug="))
              url))
     (funcall debbugs-browse-function (string-to-number (match-string 2 url)))
diff --git a/packages/debbugs/debbugs-gnu.el b/packages/debbugs/debbugs-gnu.el
index 4a69f2b..42f2cb0 100644
--- a/packages/debbugs/debbugs-gnu.el
+++ b/packages/debbugs/debbugs-gnu.el
@@ -35,6 +35,7 @@
 ;;   (autoload 'debbugs-gnu "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-search "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-usertags "debbugs-gnu" "" 'interactive)
+;;   (autoload 'debbugs-gnu-patches "debbugs-gnu" "" 'interactive)
 ;;   (autoload 'debbugs-gnu-bugs "debbugs-gnu" "" 'interactive)
 
 ;; The bug tracker is called interactively by
@@ -127,14 +128,26 @@
 
 ;; Unfortunately, it is not possible with the SOAP interface to show
 ;; all users who have tagged bugs.  This list can be retrieved via
-;; <http://debbugs.gnu.org/cgi/pkgindex.cgi?indexon=users>.
+;; <https://debbugs.gnu.org/cgi/pkgindex.cgi?indexon=users>.
+
+;; A special command to show bugs containing patches is
+;;
+;;   M-x debbugs-gnu-patches
+
+;; This command shows all unarchived bugs of the packages declared in
+;; `debbugs-gnu-default-packages', and tagged with "patch".  This is
+;; useful for bug triages.
 
 ;; Finally, if you simply want to list some bugs with known bug
 ;; numbers, call the command
 ;;
 ;;   M-x debbugs-gnu-bugs
 
-;; The bug numbers to be shown shall be entered as comma separated list.
+;; The bug numbers to be shown shall be entered as comma separated
+;; list.  A bug number can also be a range of bugs like "123-456" or
+;; "-10".  In the former case, all bugs from 123 until 456 are
+;; presented, and in the latter case the last 10 bugs are shown,
+;; counting from the highest bug number in the repository.
 
 ;;; Code:
 
@@ -189,7 +202,7 @@
 (defcustom debbugs-gnu-default-severities '("serious" "important" "normal")
   "The list severities bugs are searched for.
 \"tagged\" is not a severity but marks locally tagged bugs."
-  ;; <http://debbugs.gnu.org/Developer.html#severities>
+  ;; <https://debbugs.gnu.org/Developer.html#severities>
   ;; /ssh:debbugs:/etc/debbugs/config @gSeverityList
   ;; We don't use "critical" and "grave".
   :group 'debbugs-gnu
@@ -227,8 +240,8 @@ If nil, the value of `send-mail-function' is used instead."
 
 (defcustom debbugs-gnu-default-packages '("emacs")
   "The list of packages to be searched for."
-  ;; <http://debbugs.gnu.org/Packages.html>
-  ;; <http://debbugs.gnu.org/cgi/pkgindex.cgi>
+  ;; <https://debbugs.gnu.org/Packages.html>
+  ;; <https://debbugs.gnu.org/cgi/pkgindex.cgi>
   :group 'debbugs-gnu
   :type `(set (const "adns")
              (const "auctex")
@@ -345,13 +358,15 @@ The specification which bugs shall be suppressed is taken 
from
   :group 'debbugs-gnu
   :type '(choice (const "24.5")
                 (const "25.1")
-                (const "25.2"))
-  :version "25.1")
+                (const "25.2")
+                (const "26.1"))
+  :version "25.2")
 
 (defconst debbugs-gnu-emacs-blocking-reports
   '(("24.5" . 19758)
     ("25.1" . 19759)
-    ("25.2" . 21966))
+    ("25.2" . 21966)
+    ("26.1" . 24655))
   "The IDs of the Emacs report used to track blocking bug reports.
 It is a list of cons cells, each one containing the Emacs
 version (a string) and the bug report number (a number).")
@@ -1421,7 +1436,7 @@ MERGED is the list of bugs merged with this one."
   "Dynamic completion table for reading bug numbers.")
 
 (defun debbugs-gnu-expand-bug-number-list (bug-number-list)
-  "Expand BUG-NUMBER-LIST to a list of singe bug numbers.
+  "Expand BUG-NUMBER-LIST to a list of single bug numbers.
 BUG-NUMBER-LIST is a list of bug numbers or bug number ranges, as
 returned by `debbugs-gnu-bugs'."
   (let (result)
@@ -1657,22 +1672,28 @@ The following commands are available:
   (let ((args (get-text-property (line-beginning-position) 
'tabulated-list-id)))
     (when args (apply 'debbugs-gnu args))))
 
-(defcustom debbugs-gnu-default-bug-number-list "-10"
+(defcustom debbugs-gnu-default-bug-number-list
+  (propertize "-10" 'help-echo "The 10 most recent bugs.")
   "The default value used in interactive call of `debbugs-gnu-bugs'.
-It must be a string, containing a comma separated list of bugs or bug ranges."
+It must be a string, containing a comma separated list of bugs or bug ranges.
+A negative value, -N, means the newest N bugs."
   :group 'debbugs-gnu
   :type 'string
   :version "25.2")
 
 ;;;###autoload
 (defun debbugs-gnu-bugs (&rest bugs)
-  "List all BUGS, a list of bug numbers."
+  "List all BUGS, a list of bug numbers.
+In interactive calls, prompt for a comma separated list of bugs
+or bug ranges, with default to `debbugs-gnu-default-bug-number-list'."
   (interactive
    (mapcar
     'string-to-number
     (debbugs-gnu-expand-bug-number-list
      (or
-      (completing-read-multiple "Bug numbers: " debbugs-gnu-completion-table)
+      (completing-read-multiple
+       (format "Bug numbers (default %s): " 
debbugs-gnu-default-bug-number-list)
+       debbugs-gnu-completion-table)
       (split-string debbugs-gnu-default-bug-number-list "," t)))))
   (dolist (elt bugs)
     (unless (natnump elt) (signal 'wrong-type-argument (list 'natnump elt))))
diff --git a/packages/debbugs/debbugs-org.el b/packages/debbugs/debbugs-org.el
index c413d11..6c7f82f 100644
--- a/packages/debbugs/debbugs-org.el
+++ b/packages/debbugs/debbugs-org.el
@@ -32,6 +32,7 @@
 ;;
 ;;   (autoload 'debbugs-org "debbugs-org" "" 'interactive)
 ;;   (autoload 'debbugs-org-search "debbugs-org" "" 'interactive)
+;;   (autoload 'debbugs-org-patches "debbugs-org" "" 'interactive)
 ;;   (autoload 'debbugs-org-bugs "debbugs-org" "" 'interactive)
 
 ;; The bug tracker is called interactively by
@@ -89,12 +90,24 @@
 ;; opened presenting all related messages for this bug.  Here you
 ;; could also send debbugs control messages by keystroke "C".
 
+;; A special command to show bugs containing patches is
+;;
+;;   M-x debbugs-org-patches
+
+;; This command shows all unarchived bugs of the packages declared in
+;; `debbugs-gnu-default-packages', and tagged with "patch".  This is
+;; useful for bug triages.
+
 ;; Finally, if you simply want to list some bugs with known bug
 ;; numbers, call the command
 ;;
 ;;   M-x debbugs-org-bugs
 
-;; The bug numbers to be shown shall be entered as comma separated list.
+;; The bug numbers to be shown shall be entered as comma separated
+;; list.  A bug number can also be a range of bugs like "123-456" or
+;; "-10".  In the former case, all bugs from 123 until 456 are
+;; presented, and in the latter case the last 10 bugs are shown,
+;; counting from the highest bug number in the repository.
 
 ;;; Code:
 
@@ -315,7 +328,9 @@ the corresponding buffer (e.g. by closing Emacs)."
 
 ;;;###autoload
 (defun debbugs-org-bugs ()
-  "List all BUGS, a list of bug numbers."
+  "List all BUGS, a list of bug numbers.
+In interactive calls, prompt for a comma separated list of bugs
+or bug ranges, with default to `debbugs-gnu-default-bug-number-list'."
   (interactive)
   (cl-letf (((symbol-function 'debbugs-gnu-show-reports)
             #'debbugs-org-show-reports))
diff --git a/packages/debbugs/debbugs-ug.info b/packages/debbugs/debbugs-ug.info
index 0d4ad7d..0cd822c 100644
--- a/packages/debbugs/debbugs-ug.info
+++ b/packages/debbugs/debbugs-ug.info
@@ -427,7 +427,7 @@ File: debbugs-ug.info,  Node: Control Messages,  Next: 
Applying Patches,  Prev:
 
 Debbugs control messages are sent by email to the GNU Debbugs control
 server.  Their format is described in
-<http://debbugs.gnu.org/server-control.html>.
+<https://debbugs.gnu.org/server-control.html>.
 
    A control message can be initiated in the tabulated list of bugs,
 in the list of org TODO items, or in the GNUS ephemeral group or Rmail
@@ -587,7 +587,7 @@ option 'debbugs-browse-function' controls, whether 
'debbugs-gnu-bugs'
 or 'debbugs-org-bugs' is called.
 
    This minor mode is applicable for all URLs, not only bug
-references.  Any URL with the format <http://debbugs.gnu.org/12345>
+references.  Any URL with the format <https://debbugs.gnu.org/12345>
 will be shown in a bug report buffer, when 'debbugs-browse-mode' is
 enabled.
 
@@ -675,10 +675,10 @@ Node: Presenting Bugs11360
 Node: Tabulated Lists11936
 Node: TODO Items15611
 Node: Control Messages16667
-Node: Applying Patches19709
-Node: Minor Mode21075
-Node: Command Index22019
-Node: Variable Index22808
-Node: Key Index23882
+Node: Applying Patches19710
+Node: Minor Mode21076
+Node: Command Index22021
+Node: Variable Index22810
+Node: Key Index23884
 
 End Tag Table
diff --git a/packages/debbugs/debbugs-ug.texi b/packages/debbugs/debbugs-ug.texi
index e63923a..7d5e429 100644
--- a/packages/debbugs/debbugs-ug.texi
+++ b/packages/debbugs/debbugs-ug.texi
@@ -491,7 +491,7 @@ When the bug attributes are shown by @code{org-cycle}, 
there is a link
 
 Debbugs control messages are sent by email to the GNU Debbugs control
 server.  Their format is described in
address@hidden://debbugs.gnu.org/server-control.html}.
address@hidden://debbugs.gnu.org/server-control.html}.
 
 A control message can be initiated in the tabulated list of bugs, in
 the list of org TODO items, or in the GNUS ephemeral group or Rmail
@@ -657,7 +657,7 @@ user option @code{debbugs-browse-function} controls, whether
 @code{debbugs-gnu-bugs} or @code{debbugs-org-bugs} is called.
 
 This minor mode is applicable for all URLs, not only bug references.
-Any URL with the format @uref{http://debbugs.gnu.org/12345} will be
+Any URL with the format @uref{https://debbugs.gnu.org/12345} will be
 shown in a bug report buffer, when @code{debbugs-browse-mode} is
 enabled.
 
@@ -679,7 +679,7 @@ enabled.
 @bye
 
 @c Local Variables:
address@hidden bug-reference-url-format: "http://debbugs.gnu.org/%s";
address@hidden bug-reference-url-format: "https://debbugs.gnu.org/%s";
 @c eval: (bug-reference-mode)
 @c eval: (debbugs-browse-mode)
 @c End:
diff --git a/packages/debbugs/debbugs.el b/packages/debbugs/debbugs.el
index cf1e643..ff85c35 100644
--- a/packages/debbugs/debbugs.el
+++ b/packages/debbugs/debbugs.el
@@ -5,7 +5,7 @@
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hypermedia
 ;; Package: debbugs
-;; Version: 0.10
+;; Version: 0.12
 ;; Package-Requires: ((soap-client "3.1.1") (cl-lib "0.5"))
 
 ;; This file is not part of GNU Emacs.
@@ -29,7 +29,7 @@
 ;; server (see <http://wiki.debian.org/DebbugsSoapInterface>).
 
 ;; The function "get_versions" is not implemented (yet).  "search_est"
-;; is an extension on <http://debbugs.gnu.org>.
+;; is an extension on <https://debbugs.gnu.org>.
 
 ;;; Code:
 
@@ -43,11 +43,11 @@
 
 (defcustom debbugs-servers
   '(("gnu.org"
-     :wsdl "http://debbugs.gnu.org/cgi/soap.cgi?WSDL";
-     :bugreport-url "http://debbugs.gnu.org/cgi/bugreport.cgi";)
+     :wsdl "https://debbugs.gnu.org/cgi/soap.cgi?WSDL";
+     :bugreport-url "https://debbugs.gnu.org/cgi/bugreport.cgi";)
     ("debian.org"
-     :wsdl "http://bugs.debian.org/cgi-bin/soap.cgi?WSDL";
-     :bugreport-url "http://bugs.debian.org/cgi-bin/bugreport.cgi";))
+     :wsdl "https://bugs.debian.org/cgi-bin/soap.cgi?WSDL";
+     :bugreport-url "https://bugs.debian.org/cgi-bin/bugreport.cgi";))
   "*List of Debbugs server specifiers.
 Each entry is a list that contains a string identifying the port
 name and the server parameters in keyword-value form. Allowed
diff --git a/packages/debbugs/debbugs.info b/packages/debbugs/debbugs.info
index d401541..a77fd24 100644
--- a/packages/debbugs/debbugs.info
+++ b/packages/debbugs/debbugs.info
@@ -110,8 +110,8 @@ File: debbugs.info,  Node: Configuration,  Next: Requesting 
bug numbers,  Prev:
 ***************
 
 'debbugs' is already configured to work with two main ports of Debbugs
-BTS: <http://bugs.debian.org> and <http://debbugs.gnu.org>.  So if you
-intend to use one of these ports, you don't need to configure
+BTS: <https://bugs.debian.org> and <https://debbugs.gnu.org>.  So if
+you intend to use one of these ports, you don't need to configure
 'debbugs'.  If you want to interact with a Debbugs port other than
 those listed, you have to configure 'debbugs' by adding a new server
 specifier to the 'debbugs-servers' variable.  The actual port can be
@@ -142,8 +142,8 @@ selected by the 'debbugs-port' variable.
           (add-to-list
            'debbugs-servers
            '("foobars.net"
-             :wsdl "http://bugs.foobars.net/cgi/soap.cgi?WSDL";
-             :bugreport-url "http://bugs.foobars.net/cgi/bugreport.cgi";))
+             :wsdl "https://bugs.foobars.net/cgi/soap.cgi?WSDL";
+             :bugreport-url "https://bugs.foobars.net/cgi/bugreport.cgi";))
 
  -- Variable: debbugs-port
      This variable holds the name of the currently used port.  The
@@ -225,7 +225,7 @@ Debbugs server the list of bug numbers that match a user's 
query.
           GNU port: '"fixed"', '"notabug"', '"wontfix"',
           '"unreproducible"', '"moreinfo"', '"patch"', '"pending"',
           '"help"', '"security"', '"confirmed"', '"easy"'.  See
-          <http://debbugs.gnu.org/Developer.html#tags> for the actual
+          <https://debbugs.gnu.org/Developer.html#tags> for the actual
           list of tags.
 
      ':owner'
@@ -725,10 +725,10 @@ Tag Table:
 Node: Top1094
 Node: Installation3235
 Node: Configuration4334
-Node: Requesting bug numbers6685
-Node: Requesting bugs statuses12065
-Node: Searching bugs16357
-Node: Requesting messages23163
-Node: Requesting user tags26169
+Node: Requesting bug numbers6689
+Node: Requesting bugs statuses12070
+Node: Searching bugs16362
+Node: Requesting messages23168
+Node: Requesting user tags26174
 
 End Tag Table
diff --git a/packages/debbugs/debbugs.texi b/packages/debbugs/debbugs.texi
index 6671bf2..e15410b 100644
--- a/packages/debbugs/debbugs.texi
+++ b/packages/debbugs/debbugs.texi
@@ -116,8 +116,8 @@ libraries than needed for installation on Emacs 22/23.
 @chapter Configuration
 
 @code{debbugs} is already configured to work with two main ports of
-Debbugs BTS: @uref{http://bugs.debian.org} and
address@hidden://debbugs.gnu.org}.  So if you intend to use one of these
+Debbugs BTS: @uref{https://bugs.debian.org} and
address@hidden://debbugs.gnu.org}.  So if you intend to use one of these
 ports, you don't need to configure @code{debbugs}.  If you want to
 interact with a Debbugs port other than those listed, you have to
 configure @code{debbugs} by adding a new server specifier to the
@@ -150,8 +150,8 @@ Example.  Add a new Debbugs port with name "foobars.net":
 (add-to-list
  'debbugs-servers
  '("foobars.net"
-   :wsdl "http://bugs.foobars.net/cgi/soap.cgi?WSDL";
-   :bugreport-url "http://bugs.foobars.net/cgi/bugreport.cgi";))
+   :wsdl "https://bugs.foobars.net/cgi/soap.cgi?WSDL";
+   :bugreport-url "https://bugs.foobars.net/cgi/bugreport.cgi";))
 @end example
 @end defvar
 
@@ -236,7 +236,7 @@ GNU port: @code{"fixed"}, @code{"notabug"}, 
@code{"wontfix"},
 @code{"unreproducible"}, @code{"moreinfo"}, @code{"patch"},
 @code{"pending"}, @code{"help"}, @code{"security"},
 @code{"confirmed"}, @code{"easy"}.  See
address@hidden://debbugs.gnu.org/Developer.html#tags} for the actual list
address@hidden://debbugs.gnu.org/Developer.html#tags} for the actual list
 of tags.
 
 @item :owner
diff --git a/packages/el-search/el-search-x.el 
b/packages/el-search/el-search-x.el
index 7c050cf..9a98c87 100644
--- a/packages/el-search/el-search-x.el
+++ b/packages/el-search/el-search-x.el
@@ -33,15 +33,152 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'subr-x))
 (require 'el-search)
 
 
+;;;; `append and `l'
+
+(defun el-search--split (matcher1 matcher2 list)
+  "Helper for the \"append\" pattern type.
+
+When a splitting of LIST into two lists L1, L2 exist so that Li
+is matched by MATCHERi, return (L1 L2) for such Li, else return
+nil."
+  (let ((try-match (lambda (list1 list2)
+                     (when (and (el-search--match-p matcher1 list1)
+                                (el-search--match-p matcher2 list2))
+                       (list list1 list2))))
+        (list1 list) (list2 '()) (match nil))
+    ;; don't use recursion, this could hit `max-lisp-eval-depth'
+    (while (and (not (setq match (funcall try-match list1 list2)))
+                (consp list1))
+      (let ((last-list1 (last list1)))
+        (if-let ((cdr-last-list1 (cdr last-list1)))
+            ;; list1 is a dotted list.  Then list2 must be empty.
+            (progn (setcdr last-list1 nil)
+                   (setq list2 cdr-last-list1))
+          (setq list1 (butlast list1 1)
+                list2 (cons (car last-list1) list2)))))
+    match))
+
+(el-search-defpattern append (&rest patterns)
+  "Matches any list factorable into lists matched by PATTERNS in order.
+
+PATTERNS is a list of patterns P1..Pn.  Match any list L for that
+lists L1..Ln exist that are matched by P1..Pn in order and L is
+equal to the concatenation of L1..Ln.  Ln is allowed to be no
+list.
+
+When different ways of matching are possible, it is unspecified
+which one is chosen.
+
+Example: the pattern
+
+   (append '(1 2 3) x (app car-safe 7))
+
+matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5 6)."
+  (if (null patterns)
+      '(pred null)
+    (pcase-let ((`(,pattern . ,more-patterns) patterns))
+      (cond
+       ((null more-patterns)  pattern)
+       ((null (cdr more-patterns))
+        `(and (pred listp)
+              (app ,(apply-partially #'el-search--split
+                                     (el-search--matcher pattern)
+                                     (el-search--matcher (car more-patterns)))
+                   `(,,pattern ,,(car more-patterns)))))
+       (t `(append ,pattern (append ,@more-patterns)))))))
+
+(defun el-search--transform-nontrivial-lpat (expr)
+  (pcase expr
+    ((and (pred symbolp) (let symbol-name (symbol-name expr)))
+     `(or (symbol ,symbol-name)
+          `',(symbol  ,symbol-name)
+          `#',(symbol ,symbol-name)))
+    ((pred stringp) `(string ,expr))
+    (_ expr)))
+
+(el-search-defpattern l (&rest lpats)
+  "Alternative pattern type for matching lists.
+Match any list with subsequent elements matched by all LPATS in
+order.
+
+The idea is to be able to search for pieces of code (i.e. lists)
+with very brief input by using a specialized syntax.
+
+An LPAT can take the following forms:
+
+SYMBOL  Matches any symbol S matched by SYMBOL's name interpreted
+        as a regexp.  Matches also 'S and #'S for any such S.
+STRING  Matches any string matched by STRING interpreted as a
+        regexp
+_       Matches any list element
+__      Matches any number of list elements (including zero)
+^       Matches zero elements, but only at the beginning of a list
+$       Matches zero elements, but only at the end of a list
+PAT     Anything else is interpreted as a normal pcase pattern, and
+        matches one list element matched by it
+
+^ is only valid as the first, $ as the last of the LPATS.
+
+Example: To match defuns that contain \"hl\" in their name and
+have at least one mandatory, but also optional arguments, you
+could use this pattern:
+
+    (l ^ 'defun hl (l _ &optional))"
+  (declare
+   (heuristic-matcher
+    (lambda (&rest lpats)
+      (lambda (atoms)
+        (cl-every
+         (lambda (lpat)
+           (pcase lpat
+             ((or '__ '_ '_? '^ '$) t)
+             ((pred symbolp)
+              (funcall (el-search-heuristic-matcher `(symbol ,(symbol-name 
lpat))) atoms))
+             (_ (funcall (el-search-heuristic-matcher 
(el-search--transform-nontrivial-lpat lpat))
+                         atoms))))
+         lpats)))))
+  (let ((match-start nil) (match-end nil))
+    (when (eq (car-safe lpats) '^)
+      (setq match-start t)
+      (cl-callf cdr lpats))
+    (when (eq (car-safe (last lpats)) '$)
+      (setq match-end t)
+      (cl-callf butlast lpats 1))
+    `(append ,@(if match-start '() '(_))
+             ,@(mapcar
+                (lambda (elt)
+                  (pcase elt
+                    ('__ '_)
+                    ('_ '`(,_))
+                    ('_? '(or '() `(,_))) ;FIXME: useful - document? or should 
we provide a (? PAT)
+                                          ;thing?
+                    (_ ``(,,(el-search--transform-nontrivial-lpat elt)))))
+                lpats)
+             ,@(if match-end '() '(_)))))
+
+
 ;;;; `change', `changed'
 
 (defvar diff-hl-reference-revision)
 (declare-function diff-hl-changes "diff-hl")
+(declare-function vc-git-command "vc-git")
 (defvar-local el-search--cached-changes nil)
 
+
+(defcustom el-search-change-revision-transformer-function nil
+  "Transformer function for the REVISION argument of `change' and `changed'.
+
+When specified, this function is called on the REVISION argument
+of `change' and `changed' before passing it to git.  The default
+value is nil."
+  :group 'el-search
+  :type '(choice (const :tag "No transformer" nil)
+                 (function :tag "User specified function")))
+
 (defun el-search--changes-from-diff-hl (revision)
   "Return a list of changed regions (as conses of positions) since REVISION.
 Use variable `el-search--cached-changes' for caching."
@@ -51,25 +188,35 @@ Use variable `el-search--cached-changes' for caching."
       (cdr el-search--cached-changes)
     (when (buffer-modified-p)
       (error "Buffer is modified - please save"))
+    (require 'vc)
     (require 'diff-hl)
     ;; `diff-hl-changes' returns line numbers.  We must convert them into 
positions.
     (save-restriction
       (widen)
       (save-excursion
-        (let ((diff-hl-reference-revision revision)
+        (let ((diff-hl-reference-revision
+               (funcall (or el-search-change-revision-transformer-function 
#'identity) revision))
               (current-line-nbr 1) change-beg)
           (goto-char 1)
           (cdr (setq el-search--cached-changes
                      (cons (list revision (visited-file-modtime))
-                           (delq nil (mapcar (pcase-lambda (`(,start-line 
,nbr-lines ,kind))
-                                               (if (eq kind 'delete) nil
-                                                 (forward-line (- start-line 
current-line-nbr))
-                                                 (setq change-beg (point))
-                                                 (forward-line (1- nbr-lines))
-                                                 (setq current-line-nbr (+ 
start-line nbr-lines -1))
-                                                 (cons (copy-marker change-beg)
-                                                       (copy-marker 
(line-end-position)))))
-                                             (diff-hl-changes)))))))))))
+                           (and
+                            (let ((file-name buffer-file-name))
+                              (with-temp-buffer
+                                (vc-git-command
+                                 (current-buffer) 128 file-name
+                                 "log" "--ignore-missing" "-1"
+                                 diff-hl-reference-revision "--" file-name)
+                                (> (point-max) 1)))
+                            (delq nil (mapcar (pcase-lambda (`(,start-line 
,nbr-lines ,kind))
+                                                (if (eq kind 'delete) nil
+                                                  (forward-line (- start-line 
current-line-nbr))
+                                                  (setq change-beg (point))
+                                                  (forward-line (1- nbr-lines))
+                                                  (setq current-line-nbr (+ 
start-line nbr-lines -1))
+                                                  (cons (copy-marker 
change-beg)
+                                                        (copy-marker 
(line-end-position)))))
+                                              (ignore-errors 
(diff-hl-changes)))))))))))))
 
 (defun el-search--change-p (posn &optional revision)
   ;; Non-nil when sexp after POSN is part of a change
@@ -98,15 +245,133 @@ Use variable `el-search--cached-changes' for caching."
   "Matches the object if its text is part of a file change.
 
 Requires library \"diff-hl\".  REVISION defaults to the file's
-repository's HEAD commit."
-  `(guard (el-search--change-p (point) ,revision)))
+repository's HEAD commit and is a git revision string.  Customize
+`el-search-change-revision-transformer-function' to control how
+REVISION is interpreted."
+  `(guard (el-search--change-p (point) ,(or revision "HEAD"))))
 
 (el-search-defpattern changed (&optional revision)
   "Matches the object if its text contains a file change.
 
 Requires library \"diff-hl\".  REVISION defaults to the file's
-repository's HEAD commit."
-  `(guard (el-search--changed-p (point) ,revision)))
+repository's HEAD commit and is a git revision string.  Customize
+`el-search-change-revision-transformer-function' to control how
+REVISION is interpreted."
+  `(guard (el-search--changed-p (point) ,(or revision "HEAD"))))
+
+
+;;;; `keys'
+
+(defun el-search--match-key-sequence (keys expr)
+  (when-let ((expr-keys (pcase expr
+                          ((or (pred stringp) (pred vectorp))  expr)
+                          (`(kbd ,(and (pred stringp) string)) (ignore-errors 
(kbd string))))))
+    (apply #'equal
+           (mapcar (lambda (keys) (ignore-errors (key-description keys)))
+                   (list keys expr-keys)))))
+
+(el-search-defpattern keys (key-sequence)
+  "Matches descriptions of the KEY-SEQUENCE.
+KEY-SEQUENCE is a string or vector representing a key sequence,
+or an expression of the form (kbd STRING).
+
+Match any description of the same key sequence in any of these
+formats.
+
+Example: the pattern
+
+    (keys (kbd \"C-s\"))
+
+matches any of these expressions:
+
+    \"\\C-s\"
+    \"\C-s\"
+    (kbd \"C-s\")
+    [(control ?s)]"
+  (when (eq (car-safe key-sequence) 'kbd)
+    (setq key-sequence (kbd (cadr key-sequence))))
+  (el-search-defpattern--check-args
+   "keys" (list key-sequence) (lambda (x) (or (stringp x) (vectorp x))) 
"argument not a string or vector")
+  `(pred (el-search--match-key-sequence ,key-sequence)))
+
+
+;;;; `but-not-parent' and `top-level'
+
+(el-search-defpattern but-not-parent (pattern &optional not-pattern)
+    "Matches when PATTERN matches but the parent sexp does not.
+For toplevel expressions, this is equivalent to PATTERN.
+
+Optional NOT-PATTERN defaults to PATTERN; when given, match when
+PATTERN matches but the parent sexp is not matched by
+NOT-PATTERN.
+
+
+This pattern is useful to match only the outermost expression
+when subexpressions would match recursively.  For
+example, (but-not-parent _) matches only top-level expressions.
+Another example: For the `change' pattern, any subexpression of a
+match is typically also an according change.  Wrapping the
+`change' pattern into `but-not-parent' prevents el-search from
+descending into any found expression - only the outermost
+expression matching the `change' pattern will be matched."
+    `(and ,pattern
+          (not (guard (save-excursion
+                        (condition-case nil
+                            (progn
+                              (backward-up-list)
+                              (el-search--match-p
+                               ',(el-search--matcher (or not-pattern pattern))
+                               (save-excursion (read (current-buffer)))))
+                          (scan-error)))))))
+
+(el-search-defpattern top-level ()
+  "Matches any toplevel expression."
+  '(but-not-parent _))
+
+
+;;; Patterns for stylistic rewriting
+
+;;;; Iffy `if's
+
+(defun el-search--nested-if-1 (expr)
+  ;; EXPR is a (potentially nested) `if' expression.  Return a list L so
+  ;; that (cond . L) is semantically equivalent to EXPR.  For example,
+  ;; when EXPR == (if x 1 (if y 2 3)), return ((x 1) (y 2) (t 3))
+  (pcase-exhaustive expr
+    (`(if ,condition ,then ,(and `(if . ,_) inner-if))
+     `((,condition ,then)  ,@(el-search--nested-if-1 inner-if)))
+    (`(if ,condition ,then)
+     `((,condition ,then)))
+    (`(if ,condition ,then . ,else)
+     `((,condition ,then)
+       (t . ,else)))))
+
+(el-search-defpattern -nested-if (&optional var)
+  (let ((test-pattern '`(if ,_ ,_ (if ,_ ,_ ,_ . ,_))))
+    (if (not var)  test-pattern
+      (let ((cases (make-symbol "cases")))
+        `(and ,test-pattern
+              (app el-search--nested-if-1 ,cases)
+              (let ,var `(cond . ,,cases)))))))
+
+(el-search-defpattern iffy-if (&optional var)
+  "Matches `if'-clauses that could be replaced with a more suitable form.
+
+Match `if' clauses that would fit better into either `cond',
+`when' or `unless'.  With symbol VAR given, bind that to such a
+semantically equivalent expression suitable to replace the
+current match."
+  (cl-callf or var '_)
+  (let ((condition (make-symbol "condition"))
+        (then      (make-symbol "then"))
+        (clauses   (make-symbol "clauses")))
+    `(or (-nested-if ,var)
+         (and `(if (not ,,condition) ,,then)
+              (let ,var `(unless ,,condition ,,then)))
+         (and `(if ,,condition ,,then)
+              (let ,var `(when   ,,condition ,,then)))
+         (and `(if ,,condition ,,then (cond . ,,clauses))
+              (let ,var `(cond (,,condition ,,then) . ,,clauses))))))
 
 
 (provide 'el-search-x)
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index c10a284..2dbd022 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -1,4 +1,4 @@
-;;; el-search.el --- Expression based incremental search for emacs-lisp-mode 
-*- lexical-binding: t -*-
+;;; el-search.el --- Expression based interactive search for emacs-lisp-mode 
-*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
 
@@ -7,8 +7,8 @@
 ;; Created: 29 Jul 2015
 ;; Keywords: lisp
 ;; Compatibility: GNU Emacs 25
-;; Version: 0.2.3
-;; Package-Requires: ((emacs "25"))
+;; Version: 1.1.2
+;; Package-Requires: ((emacs "25") (stream "2.2.3"))
 
 
 ;; This file is not part of GNU Emacs.
@@ -29,10 +29,41 @@
 
 ;;; Commentary:
 
+;; Suggested key bindings
+;; ======================
+;;
+;; You can eval the following key definitions to try things out while
+;; reading this introduction.  These are the bindings I use
+;; personally:
+;;
+;;   (define-key emacs-lisp-mode-map [(control ?S)] #'el-search-pattern)
+;;   (define-key emacs-lisp-mode-map [(control ?%)] #'el-search-query-replace)
+;;   (define-key global-map          [(control ?J)] 
#'el-search-jump-to-search-head)
+;;   (define-key global-map          [(control ?N)] 
#'el-search-continue-in-next-buffer)
+;;
+;;   (define-key el-search-read-expression-map [(control ?S)] 
#'exit-minibuffer)
+;;
+;;   (define-key isearch-mode-map [(control ?S)] 
#'el-search-search-from-isearch)
+;;
+;;   (with-eval-after-load 'dired
+;;     (define-key dired-mode-map [(control ?S)] 
#'el-search-dired-marked-files))
+;;
+;; These bindings may not work in a console (if you have an idea for
+;; official bindings that fit better into the Emacs ecosystem, please
+;; mail me).
+;;
+;; The binding in `isearch-mode-map' lets you switch to "el-search"
+;; from isearch reusing already the given input.  The binding in
+;; `el-search-read-expression-map' allows you to hit C-S twice to
+;; start a search using the last search pattern, similar to isearch.
+;;
+;; Don't be afraid of the long introduction, it's only verbose (sorry)
+;; but not complicated.
+;;
+;;
 ;; Introduction
 ;; ============
 ;;
-;;
 ;; The main user entry point is `el-search-pattern'.  This command
 ;; prompts for a `pcase' pattern and searches the current buffer for
 ;; matching expressions by iteratively `read'ing buffer contents.  For
@@ -45,9 +76,9 @@
 ;; pattern types and to combine them with other patterns in a natural
 ;; and transparent way out of the box.
 ;;
-;; It doesn't matter how the code is actually formatted.  Comments are
-;; ignored, and strings are treated as atomic objects, their contents
-;; are not being searched.
+;; When searching, it doesn't matter how code is actually formatted.
+;; Comments are ignored, and strings are treated as atomic objects,
+;; their contents are not being searched.
 ;;
 ;;
 ;; Example 1: if you enter
@@ -66,15 +97,12 @@
 ;;
 ;; you search for all defvar forms that don't specify an init value.
 ;;
-;; The following will search for defvar forms with a docstring whose
-;; first line is longer than 70 characters:
+;; The following pattern will search for defvar forms with a docstring
+;; whose first line is longer than 70 characters:
 ;;
 ;;   `(defvar ,_ ,_
-;;      ,(and s (guard (< 70 (length (car (split-string s "\n")))))))
-;;
-;;
-;; When a search pattern is processed, the searched buffer is current
-;; with point at the beginning of the currently tested expression.
+;;      ,(and (pred stringp) s
+;;            (guard (< 70 (length (car (split-string s "\n")))))))
 ;;
 ;;
 ;; Convenience
@@ -89,8 +117,8 @@
 ;;
 ;; Example 3:
 ;;
-;; If you want to search a buffer for symbols that are defined in
-;; "cl-lib", you can use this pattern
+;; If you wanted to search a buffer for symbols that are defined in
+;; "cl-lib", you could use this pattern
 ;;
 ;;   (guard (and (symbolp exp)
 ;;               (when-let ((file (symbol-file exp)))
@@ -109,13 +137,14 @@
 ;;
 ;; It's cumbersome to write out the same complicated pattern
 ;; constructs in the minibuffer again and again.  You can define your
-;; own pcase pattern types for the purpose of el-search with
+;; own `pcase' pattern types for the purpose of el-searching with
 ;; `el-search-defpattern'.  It is just like `pcase-defmacro', but the
-;; effect is limited to this package.  See C-h f `el-search-pattern'
-;; for a list of predefined additional pattern forms.
+;; effect is limited to this package (i.e. it uses a separate name
+;; space).  See C-h f `el-search-pattern' for a list of predefined
+;; pattern forms.
 ;;
 ;; Some additional pattern definitions can be found in the file
-;; "el-search-x.el".
+;; "el-search-x" which is part of this package.
 ;;
 ;;
 ;; Replacing
@@ -125,7 +154,7 @@
 ;; You are queried for a (pcase) pattern and a replacement expression.
 ;; For each match of the pattern, the replacement expression is
 ;; evaluated with the bindings created by the pcase matching in
-;; effect, and printed to produce the replacement string.
+;; effect, and printed to a string to produce the replacement.
 ;;
 ;; Example: In some buffer you want to swap the two expressions at the
 ;; places of the first two arguments in all calls of function `foo',
@@ -156,29 +185,129 @@
 ;; in a `el-search-query-replace' session.
 ;;
 ;;
-;; Suggested key bindings
-;; ======================
+;; Multi Searching
+;; ===============
 ;;
-;;    (define-key emacs-lisp-mode-map [(control ?S)] #'el-search-pattern)
-;;    (define-key emacs-lisp-mode-map [(control ?%)] #'el-search-query-replace)
+;; "el-search" is capable of performing "multi searches" - searches
+;; spanning multiple files or buffers.  When no more matches can be
+;; found in the current buffer, the search automatically switches to
+;; the next buffer.  Examples for search commands starting a multi
+;; search are `el-search-buffers' (search all living elisp mode
+;; buffers), `el-search-directory' (search all elisp files in a
+;; specified directory), `el-search-emacs-elisp-sources' (search all
+;; Emacs elisp sources) and `el-search-dired-marked-files'.  Actually,
+;; every search is internally a multi search.
 ;;
-;;    (define-key isearch-mode-map [(control ?S)] 
#'el-search-search-from-isearch)
-;;    (define-key isearch-mode-map [(control ?%)] 
#'el-search-replace-from-isearch)
+;; You can pause any (multi) search by just doing something different,
+;; the state of the search is automatically saved. You can continue
+;; searching by calling `el-search-jump-to-search-head': this command
+;; jumps to the last match and re-activates the search.
+
+;; `el-search-continue-in-next-buffer' skips all remaining matches in
+;; the current buffer and continues searching in the next buffer.
 ;;
-;;    (define-key el-search-read-expression-map [(control ?S)] 
#'exit-minibuffer)
+;; Matches found in the current buffer are recorded; use
+;; `el-search-previous-match' to revisit them in reverse order (this
+;; is actually the poor-man's version of a backward search, since a
+;; real backward el-search would be slow).
+;;
+;; There is no multi query-replace currently implemented; I don't know
+;; if it would be that useful as a separate command anyway.  If you
+;; want to query-replace in multiple buffers or files, call an
+;; appropriate multi-search command, and every time a first match is
+;; found in any buffer, start an ordinary `el-search-query-replace';
+;; after finishing, check that everything is ok, save etc, and resume
+;; the multi search with one of the above commands.
+;;
+;; There is currently nothing like `occur' for el-search.  However,
+;; you can get a list of matches in the form
+;; (file-name-or-buffer . match-position) with
+;;
+;;  (el-search-all-matches (el-search-make-search pattern stream))
+;;
+;; where PATTERN is the search pattern and STREAM is a stream of
+;; buffers or files (typical ways to construct such a STREAM are to
+;; call the `stream' function on a list of buffers, or to use
+;; `el-search-stream-of-directory-files').
+;;
+;; For example,
+;;
+;;   (el-search-all-matches
+;;    (el-search-make-search
+;;     ''require
+;;     (seq-filter
+;;      (lambda (buffer)
+;;         (with-current-buffer buffer (derived-mode-p 'emacs-lisp-mode)))
+;;      (stream (buffer-list)))))
+;;
+;; would return a list of matches for the symbol require in all elisp
+;; mode buffers.
+;;
+;;
+;; Multiple multi searches
+;; =======================
+;;
+;; Every search is collected in a history.  You can resume older
+;; searches from the position of the last match by calling
+;; `el-search-jump-to-search-head' with a prefix argument.  That let's
+;; you select an older search to resume and switches to the buffer and
+;; position where this search had been suspended.
+;;
+;; There is no special command to restart a prior search from the
+;; beginning.  I suggest to use `repeat-complex-command'.
+;;
+;;
+;; Writing replacement rules for semi-automatic code rewriting
+;; ===========================================================
+;;
+;; When you want to rewrite larger code parts programmatically, it is
+;; often useful to define dedicated patterns for performing the
+;; replacement.  Here is an example:
+;;
+;; You heard that in many situations, `dolist' is faster than an
+;; equivalent `mapc'.  You use `mapc' quite often in your code and
+;; want to query-replace many occurrences in your stuff.  Instead of
+;; using an ad hoc replacing rule, it's cleaner to define a dedicated
+;; named pattern using `el-search-defpattern'.  Make this pattern
+;; accept an argument and use this argument to bind the replacement
+;; expression to a variable you specify.  In our case, the pattern
+;; could look like this:
+;;
+;;   (el-search-defpattern el-search-mapc->dolist (new)
+;;     (let ((var  (make-symbol "var"))
+;;           (body (make-symbol "body"))
+;;           (list (make-symbol "list")))
+;;       `(and `(mapc (lambda (,,var) . ,,body) ,,list)
+;;             (let ,new `(dolist (,,var ,,list) . ,,body)))))
+;;
+;; The first condition in the `and' performs the matching and binds
+;; the essential parts of the `mapc' form to variables.  The second,
+;; the `let' part, binds the pattern specified argument NEW (as said,
+;; typically just a variable to receive the rewritten code) to the
+;; rewritten expression - in our case, a `dolist' form is constructed
+;; with the remembered code parts filled in.
+;;
+;; Now, in `el-search-query-replace', you just specify the following
+;; rule:
+;;
+;;   (el-search-mapc->dolist replacement) -> replacement
+;;
+;; And when you want to replace in multiple buffers or files, call an
+;; appropriate multi el-search command, e.g. `el-search-directory',
+;; and specify
+;;
+;;   (el-search-mapc->dolist replacement)
+;;
+;; as search pattern.
 ;;
-;; The bindings in `isearch-mode-map' let you conveniently switch to
-;; "el-search" searching from isearch.  The binding in
-;; `el-search-read-expression-map' allows you to hit C-S twice to
-;; start a search for the last search pattern.
 ;;
 ;;
 ;; Bugs, Known Limitations
 ;; =======================
 ;;
-;; - Replacing: in some cases the reader syntax of forms
-;; is changing due to reading+printing.  "Some" because we can treat
-;; that problem in most cases.
+;; - Replacing: in some cases the reader syntax of forms is changing
+;; due to reading+printing.  "Some" because we can handle this problem
+;; in most cases.
 ;;
 ;; - Similarly: Comments are normally preserved (where it makes
 ;; sense).  But when replacing like `(foo ,a ,b) -> `(foo ,b ,a)
@@ -187,13 +316,11 @@
 ;;
 ;;   (foo
 ;;     a
-;;     ;;a comment
+;;     ;; comment
 ;;     b)
 ;;
 ;; the comment will be lost.
 ;;
-;; FIXME: when we have resumable sessions, pause and warn about this case.
-;;
 ;;
 ;;  Acknowledgments
 ;;  ===============
@@ -201,35 +328,53 @@
 ;; Thanks to Stefan Monnier for corrections and advice.
 ;;
 ;;
+;;  Notes for developers
+;;  ====================
+;;
+;; We use the following model for multi buffer/file searches: a search
+;; (object) is represented by a struct "el-search-object" that
+;; contains a stream of matches M and a search head object H that
+;; contains a compiled matcher according to the given search pattern,
+;; the buffer and buffer position where to continue searching, and the
+;; stream of buffers or files yet to search.
+;;
+;; When elements are requested from M, H is updated accordingly.  H
+;; can be manipulated directly to influence how M will find further
+;; elements when requested (useful for skipping buffers on the fly).
+;;
+;;
 ;; TODO:
 ;;
-;; - implement backward searching
+;; - The default keys are not available in the terminal
+;;
+;; - Handle buffers killed/files closed when resuming a search
+;;
+;; - Make el-search-previous-match behave correctly when a buffer has
+;;   been modified and data is outdated
 ;;
-;; - Make `el-search-pattern' accept an &optional limit, at least for
-;;   the non-interactive use case?
+;; - Make the non-command `el-search-forward' accept an &optional
+;;   LIMIT argument
 ;;
-;; - improve docstrings
+;; - Make searching work in comments, too? (->
+;;   `parse-sexp-ignore-comments').  Related: should the pattern
+;;   `symbol' also match strings that contain matches for a symbol so
+;;   that it's possible to replace also occurrences of a symbol in
+;;   docstrings?
 ;;
-;; - Make it work in comments, too? (-> `parse-sexp-ignore-comments').
-;;   Related: should the pattern `symbol' also match strings that
-;;   contain matches for a symbol so that it's possible to replace
-;;   also occurrences of a symbol in docstrings?
+;; - Implement an occur like interface?
 ;;
-;; - handle more reader syntaxes, e.g. #n, #n#
+;; - Port this to non Emacs Lisp modes?  How?  Would it already
+;;   work using only syntax tables, sexp scanning and font-lock?
 ;;
-;; - Implement sessions; add multi-file support based on iterators.  A
-;;   file list is read in (or the user can specify an iterator as a
-;;   variable).  The state in the current buffer is just (buffer
-;;   . marker).  Or should this be abstracted into an own lib?  Could
-;;   be named "files-session" or so.
+;; - For query-replace, maybe we should save the original buffer
+;;   string in a buffer-local variable, and make that ediff'able
+;;   against the new version.  Or should we even save multiple
+;;   versions when appropriate?
 ;;
-;; - Make `el-search--format-replacement' work non-heuristically.
-;;   Idea: When replacing, for every variable V bound by the search
-;;   pattern that directly corresponds to some text T, provide some
-;;   "match data" V -> T.  Use this when formatting the replacement.
-;;   Maybe use a special marker to "paste" in expressions, like (paste
-;;   V), whereby the `paste' flag lands in the replacement and can be
-;;   replaced textually afterwards.
+;; - Replace: pause and warn when replacement might be wrong
+;;   (ambiguous reader syntaxes; lost comments, comments that can't
+;;   non-ambiguously be assigned to rewritten code)
+
 
 
 
@@ -243,7 +388,9 @@
 (require 'cl-lib)
 (require 'elisp-mode)
 (require 'thingatpt)
+(require 'stream)
 (require 'help-fns) ;el-search--make-docstring
+(require 'ring)     ;el-search-history
 
 
 ;;;; Configuration stuff
@@ -254,65 +401,57 @@
 
 (defcustom el-search-this-expression-identifier 'exp
   "Identifier ID referring to the current expression in pattern input.
-When entering a PATTERN in an interactive \"el-search\" command,
-the pattern actually used will be (and ID PATTERN).
-The default value is `exp'."
+When entering a pattern in an interactive \"el-search\" command,
+the pattern actually used will be (and ID PATTERN).  The default
+value is `exp'."
   :type 'symbol)
 
-(defface el-search-match '((((background dark)) (:background "#0000A0"))
-                          (t                   (:background "DarkSlateGray3")))
-  "Face for highlighting the current match.")
-
-(defface el-search-other-match '((((background dark)) (:background "#202060"))
-                                 (t                   (:background 
"DarkSlateGray1")))
-  "Face for highlighting the other matches.")
-
-(defcustom el-search-smart-case-fold-search t
-  "Whether to use smart case folding in pattern matching.
-When an \"el-search\" pattern involves regexp matching (like for
-\"string\" or \"source\") and this option is non-nil,
-case-fold-search will be temporarily bound to t if the according
-regexp contains any upper case letter, and nil else.  This is
-done independently for every single matching operation.
-
-If nil, the value of `case-fold-search' is decisive."
-  :type 'boolean)
-
-(defcustom el-search-use-sloppy-strings nil
-  "Whether to allow the usage of \"sloppy strings\".
-When this option is turned on, for faster typing you are allowed
-to specify symbols instead of strings as arguments to an
-\"el-search\" pattern type that would otherwise accept only
-strings, and their names will be used as input (with other words,
-this spares you to type the string delimiters in many cases).
-
-For example,
-
-  \(source ^cl\)
+(defvar el-search-optimized-search t
+  "Whether to use optimized searching.
+When turned on, use a fast pre-processing algorithm to sort out
+buffers that can be proved to not contain a match.
 
-is then equivalent to
+Setting this to nil should not have any effect apart from making
+multi-buffer searching slower in most cases.")
 
-  \(source \"^cl\"\)
-
-When this option is off, the first form would just signal an
-error."
-  :type 'boolean)
-
-
-;;;; Helpers
+(defface el-search-match '((((background dark))
+                            ;; (:background "#0000A0")
+                            (:background "#600000"))
+                          (t (:background "DarkSlateGray3")))
+  "Face for highlighting the current match.")
 
-(defun el-search--smart-string-match-p (regexp string)
-  "`string-match-p' taking `el-search-smart-case-fold-search' into account."
-  (let ((case-fold-search (if el-search-smart-case-fold-search
-                              (not (let ((case-fold-search nil))
-                                     (string-match-p "[[:upper:]]" regexp)))
-                            case-fold-search)))
-    (string-match-p regexp string)))
+(defface el-search-other-match '((((background dark))
+                                  ;; (:background "#202060")
+                                  (:background "#603030"))
+                                 (t (:background "DarkSlateGray1")))
+  "Face for highlighting the other matches.")
 
-(defun el-search--pp-to-string (expr)
-  (let ((print-length nil)
-        (print-level nil))
-    (pp-to-string expr)))
+(defvar el-search-display-buffer-action
+  '((display-buffer-reuse-window display-buffer-pop-up-frame)
+    (reusable-frames . visible))
+  "The `display-buffer' action used by `el-search-jump-to-search-head'.")
+
+(defcustom el-search-ignored-directory-regexps
+  (mapcar
+   (lambda (name) (format "\\`%s\\'" (regexp-quote name)))
+   ;; this is just the default value of `grep-find-ignored-directories':
+   '("SCCS" "RCS" "CVS" "MCVS" ".src" ".svn" ".git" ".hg" ".bzr" "_MTN" 
"_darcs" "{arch}"))
+  "List of regexps defining directories that el-search should ignore.
+
+The value influences the behavior of the commands that perform
+directory searches like `el-search-directory' or
+`el-search-dired-marked-files'.  It is consulted by all streams
+`el-search-stream-of-directory-files' returns."
+  :type '(choice (repeat :tag "Ignored directories" regexp)
+                (const  :tag "No ignored directories" nil)))
+
+(defvar el-search-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(control ?D)] #'el-search-skip-directory)
+    (define-key map [(control ?N)] #'el-search-continue-in-next-buffer)
+    (define-key map [(control ?R)] #'el-search-previous-match)
+    map)
+  "Used by search commands as transient-map.")
 
 (defvar el-search-read-expression-map
   (let ((map (make-sparse-keymap)))
@@ -324,6 +463,62 @@ error."
     map)
   "Map for reading input with `el-search-read-expression'.")
 
+
+;;;; Helpers and Definitions
+
+(defvar el-search--current-pattern nil
+  "Current search pattern or nil when no search in progress.")
+
+(defvar el-search--current-search nil
+  "The currently active search, an `el-search-object'.")
+
+(defvar el-search--current-matcher nil
+  "The matcher according to `el-search--current-pattern'.")
+
+(defvar-local el-search--temp-buffer-flag nil
+  "Non-nil tags (file) buffers as temporarily opened for searching.")
+
+(defvar el-search--success nil
+  "Non-nil when last search command was successful.")
+
+(defvar-local el-search--this-buffer-matches (stream-empty)
+  "Stream of the matches that were found in current buffer."
+  ;; Internally, simply the substream of the matches of the current
+  ;; search with all matches before current buffer cut off
+  )
+
+(defun el-search-true (&rest _ignore)
+  "Ignore the arguments and return t."
+  t)
+
+(defun el-search--message-no-log (format-string &rest args)
+  "Like `message' but with `message-log-max' bound to nil."
+  (let ((message-log-max nil))
+    (apply #'message format-string args)))
+
+(defun el-search--string-match-p (eregexp string)
+  "Non-nil when extended regexp EREGEXP matches the STRING."
+  (let ((match-bindings ()) regexp)
+    (pcase eregexp
+      ((pred stringp) (setq regexp eregexp))
+      (`(,binds ,real-regexp)
+       (setq regexp real-regexp)
+       (setq match-bindings binds)))
+    (setq match-bindings
+          (mapcar (lambda (binding)
+                    (pcase binding
+                      ((pred symbolp)                  (list binding nil))
+                      (`(,(and (pred symbolp) symbol)) (list symbol nil))
+                      (_                               binding)))
+                  match-bindings))
+    (cl-progv (mapcar #'car match-bindings) (mapcar #'cadr match-bindings)
+      (string-match-p regexp string))))
+
+(defun el-search--pp-to-string (expr)
+  (let ((print-length nil)
+        (print-level nil))
+    (pp-to-string expr)))
+
 (defun el-search--setup-minibuffer ()
   (let ((inhibit-read-only t))
     (put-text-property 1 (minibuffer-prompt-end) 'font-lock-face 
'minibuffer-prompt))
@@ -343,22 +538,28 @@ error."
                             (append minibuffer-default more-defaults)
                           (cons minibuffer-default more-defaults)))))))
 
-;; $$$$$FIXME: this should be in Emacs!  There is only a helper 
`read--expression'.
 (defun el-search-read-expression (prompt &optional initial-contents hist 
default read)
-  "Read expression for `my-eval-expression'."
+  "Conveniently read an expression from the minibuffer."
   (minibuffer-with-setup-hook #'el-search--setup-minibuffer
     (read-from-minibuffer prompt initial-contents 
el-search-read-expression-map read
                           (or hist 'read-expression-history) default)))
 
-(defvar el-search-history '()
-  "List of search input strings.")
+(defvar el-search-pattern-history ()
+  "List of search pattern input strings.")
+
+(defvar el-search-history (make-ring 10) ;$$$$FIXME: Make `10' customizable?
+  "History of previous searches."
+  ;; Elements have the form (search-object pattern)
+  )
 
-(defvar el-search-query-replace-history '()
+(defvar el-search-query-replace-history ()
   "List of input strings from `el-search-query-replace'.")
 
 (defvar el-search--initial-mb-contents nil)
 
 (defun el-search--pushnew-to-history (input histvar)
+  ;; Push INPUT to history in HISTVAR unless it's already "the same" as
+  ;; the history's head element
   (let ((hist-head (car (symbol-value histvar))))
     (unless (or (string-match-p "\\`\\'" input)
                 (and (stringp hist-head)
@@ -373,23 +574,64 @@ error."
               input)
             (symbol-value histvar)))))
 
+(defun el-search--maybe-warn-about-unquoted-symbol (pattern)
+  (when (and (symbolp pattern)
+             (not (eq pattern '_))
+             (or (not (boundp pattern))
+                 (not (eq (symbol-value pattern) pattern))))
+    (error "Unbound symbol: %S" pattern)))
+
 (defun el-search--read-pattern (prompt &optional default histvar)
-  (cl-callf or histvar 'el-search-history)
-  (let ((input (el-search-read-expression
-                prompt el-search--initial-mb-contents histvar default)))
+  (cl-callf or histvar 'el-search-pattern-history)
+  (let ((input (el-search-read-expression prompt 
el-search--initial-mb-contents histvar default)))
     (el-search--pushnew-to-history input histvar)
     (if (not (string= input "")) input (car (symbol-value histvar)))))
 
+(defun el-search--read-pattern-for-interactive ()
+  (let* ((input (el-search--read-pattern "Find pcase pattern: " (car 
el-search-pattern-history)))
+         (pattern (read input)))
+    ;; A very common mistake: input "foo" instead of "'foo"
+    (el-search--maybe-warn-about-unquoted-symbol pattern)
+    (setq this-command 'el-search-pattern) ;in case we come from isearch
+    ;; Make input available also in query-replace history
+    (el-search--pushnew-to-history input 'el-search-query-replace-history)
+    pattern))
+
+
 (defun el-search--end-of-sexp ()
-  ;;Point must be at sexp beginning
+  ;; Assumes point is at sexp beginning
   (or (scan-sexps (point) 1) (point-max)))
 
+(defun el-search--skip-expression (expression &optional read)
+  ;; Move forward at least one character.  Don't move into a string or
+  ;; comment.  Don't move further than the beginning of the next sexp.
+  ;; Try to move as far as possible under these conditions.  Point must
+  ;; be at the beginning of an expression.  If there are positions where
+  ;; `read' would succeed, but that do not represent a valid sexp start,
+  ;; move past them (e.g. when before "#'" move past both characters).
+  ;;
+  ;; EXPRESSION must equal the (read) expression at point, but with READ
+  ;; non-nil, ignore the first argument and use the read expression at
+  ;; point instead.
+  (when read (setq expression (save-excursion (read (current-buffer)))))
+  (cond
+   ((eq '@ expression) ;bug#24542
+    (forward-char))
+   ((or (null expression)
+        (equal [] expression)
+        (not (or (listp expression) (vectorp expression))))
+    (goto-char (el-search--end-of-sexp)))
+   ((looking-at (rx (or ",@" "," "#'" "'")))
+    (goto-char (match-end 0)))
+   (t (forward-char))))
+
 (defun el-search--ensure-sexp-start ()
   "Move point to the next sexp beginning position.
-Don't move if already at beginning of a sexp.  Point must not be
-inside a string or comment.  `read' the expression at that point
-and return it."
-  ;; This doesn't catch end-of-buffer to keep the return value non-ambiguous
+Do nothing if already at beginning of a sexp.  `read' the
+expression at that point and return it.  Point must not be inside
+a string or comment."
+  ;; We donn't catch end-of-buffer to keep the return value
+  ;; non-ambiguous
   (let ((not-done t) res)
     (while not-done
       (let ((stop-here nil)
@@ -420,13 +662,14 @@ and return it."
         (error (forward-char))))
     res))
 
+
 (defvar el-search--pcase-macros '()
   "List of additional \"el-search\" pcase macros.")
 
 (defun el-search--make-docstring (name)
   ;; code mainly from `pcase--make-docstring'
   (let* ((main (documentation (symbol-function name) 'raw))
-         (ud (help-split-fundoc main 'pcase)))
+         (ud (help-split-fundoc main name)))
     (with-temp-buffer
       (insert (or (cdr ud) main))
       (mapc
@@ -440,27 +683,68 @@ and return it."
       (let ((combined-doc (buffer-string)))
         (if ud (help-add-fundoc-usage combined-doc (car ud)) combined-doc)))))
 
-(put 'el-search-pattern 'function-documentation '(el-search--make-docstring 
'el-search-pattern))
+(defvar el-search--heuristic-matchers ()
+  "Alist of heuristic matchers.
+Keys are pattern names (i.e. symbols), and values the associated
+heuristic matcher functions.")
 
 (defmacro el-search-defpattern (name args &rest body)
-  "Like `pcase-defmacro', but limited to el-search patterns.
-The semantics is exactly that of `pcase-defmacro', but the scope
-of the definitions is limited to \"el-search\".
+  "Like `pcase-defmacro', but for defining el-search patterns.
 
-\(fn NAME ARGLIST &optional DOCSTRING &rest BODY)"
+The semantics is exactly that of `pcase-defmacro', but the scope
+of the definitions is limited to \"el-search\", using a separate
+name space.  The expansion is allowed to use any defined `pcase'
+pattern as well as any defined el-search pattern.
+
+The docstring may be followed by a `defun' style declaration list
+DECL.  There is only one respected specification, it has the form
+
+  \(heuristic-matcher MATCHER-FUNCTION\)
+
+and specifies the heuristic MATCHER-FUNCTION to be associated
+with the defined pattern NAME.
+
+The purpose of a heuristic matcher function is to speed up multi
+buffer searching.  When specified, the MATCHER-FUNCTION should be
+a function accepting the same arguments as the defined pattern.
+When called with the ARGS, this function should return a function
+that accepts a list of atoms, which is the complete list of atoms
+found in the buffer to search, and that returns non-nil when this
+buffer could contain a match for the pattern (NAME . ARGS), and
+nil when we can be sure that it contains no match (whereby an
+atom here is anything whose parts aren't searched by
+el-searching, like integers or strings, but unlike arrays).  When
+in doubt, this function must return non-nil.  When el-searching
+is started with a certain PATTERN, a heuristic matcher function
+is constructed by recursively destructuring PATTERN and combining
+the heuristic matchers of the subpatterns.  The resulting
+function is then used to dismiss any buffer for that can be
+proved that it can not contain any match.
+
+\(fn NAME ARGLIST &optional DOCSTRING DECL &rest BODY)"
   (declare (indent 2) (debug defun))
-  `(setf (alist-get ',name el-search--pcase-macros)
-         (lambda ,args ,@body)))
+  (let ((doc nil) (set-heuristic-matcher ()))
+    (when (stringp (car body))
+      (setq doc       (car body)
+            body (cdr body)))
+    (pcase (car body)
+      (`(declare (heuristic-matcher ,heuristic-matcher))
+       (setq set-heuristic-matcher
+             `((setf (alist-get ',name el-search--heuristic-matchers) 
,heuristic-matcher)))
+       (setq body (cdr body))))
+    `(progn
+       ,@set-heuristic-matcher
+       (setf (alist-get ',name el-search--pcase-macros)
+             (lambda ,args ,doc ,@body)))))
 
 (defmacro el-search--with-additional-pcase-macros (&rest body)
-  `(cl-letf ,(mapcar (pcase-lambda (`(,symbol . ,fun))
-                       `((get ',symbol 'pcase-macroexpander) #',fun))
+  `(cl-letf ,(mapcar (pcase-lambda (`(,symbol . ,fun)) `((get ',symbol 
'pcase-macroexpander) #',fun))
                      el-search--pcase-macros)
      ,@body))
 
 (defun el-search--macroexpand-1 (pattern)
   "Expand \"el-search\" PATTERN.
-This is like `pcase--macroexpand', but expands only patterns
+This is like `pcase--macroexpand' but expands only patterns
 defined with `el-search-defpattern' and performs only one
 expansion step.
 
@@ -492,261 +776,376 @@ Return PATTERN if this pattern type was not defined with
 (defun el-search--wrap-pattern (pattern)
   `(and ,el-search-this-expression-identifier ,pattern))
 
-(defun el-search--skip-expression (expression &optional read)
-  ;; Move forward at least one character.  Don't move into a string or
-  ;; comment.  Don't move further than the beginning of the next sexp.
-  ;; Try to move as far as possible.  Point must be at the beginning
-  ;; of an expression.
-  ;; If there are positions where `read' would succeed, but that do
-  ;; not represent a valid sexp start, move past them (e.g. when
-  ;; before "#'" move past both characters).
-  ;;
-  ;; EXPRESSION must be the (read) expression at point, but when READ
-  ;; is non-nil, ignore the first argument and read the expression at
-  ;; point instead.
-  (when read (setq expression (save-excursion (read (current-buffer)))))
-  (cond
-   ((or (null expression)
-        (equal [] expression)
-        (not (or (listp expression) (vectorp expression))))
-    (goto-char (el-search--end-of-sexp)))
-   ((looking-at (rx (or ",@" "," "#'" "'")))
-    (goto-char (match-end 0)))
-   (t (forward-char))))
 
 (defun el-search--search-pattern-1 (matcher &optional noerror)
-  (let ((match-beg nil) (opoint (point)) current-expr)
-
-    ;; when inside a string or comment, move past it
-    (let ((syntax-here (syntax-ppss)))
-      (when (nth 3 syntax-here) ;inside a string
-        (goto-char (nth 8 syntax-here))
-        (forward-sexp))
-      (when (nth 4 syntax-here) ;inside a comment
-        (forward-line 1)
-        (while (and (not (eobp)) (looking-at (rx (and (* space) ";"))))
-          (forward-line 1))))
-
-    (if (catch 'no-match
-          (while (not match-beg)
-            (condition-case nil
-                (setq current-expr (el-search--ensure-sexp-start))
-              (end-of-buffer
-               (goto-char opoint)
-               (throw 'no-match t)))
-            (if (el-search--match-p matcher current-expr)
-                (setq match-beg (point)
-                      opoint (point))
-              (el-search--skip-expression current-expr))))
-        (if noerror nil (signal 'end-of-buffer nil)))
-    match-beg))
-
-(defun el-search--search-pattern (pattern &optional noerror)
-  "Search for el-search PATTERN in current buffer.
-Set point to the beginning of the occurrence found and return
-point.  Optional second argument, if non-nil, means if fail just
-return nil (no error)."
+  (if (not (derived-mode-p 'emacs-lisp-mode))
+      (if noerror nil (error "Buffer not in emacs-lisp-mode: %s" 
(buffer-name)))
+    (let ((match-beg nil) (opoint (point)) current-expr)
+
+      ;; when inside a string or comment, move past it
+      (let ((syntax-here (syntax-ppss)))
+        (when (nth 3 syntax-here) ;inside a string
+          (goto-char (nth 8 syntax-here))
+          (forward-sexp))
+        (when (nth 4 syntax-here) ;inside a comment
+          (forward-line 1)
+          (while (and (not (eobp)) (looking-at (rx (and (* space) ";"))))
+            (forward-line 1))))
+
+      (if (catch 'no-match
+            (while (not match-beg)
+              (condition-case nil
+                  (setq current-expr (el-search--ensure-sexp-start))
+                (end-of-buffer
+                 (goto-char opoint)
+                 (throw 'no-match t)))
+              (if (el-search--match-p matcher current-expr)
+                  (setq match-beg (point)
+                        opoint (point))
+                (el-search--skip-expression current-expr))))
+          (if noerror nil (signal 'end-of-buffer nil))
+        match-beg))))
+
+(defun el-search-forward (pattern &optional noerror)
+  "Search for el-search PATTERN in current buffer from point.
+Set point to the beginning of the occurrence found and return the
+new value of point.  Optional second argument, if non-nil, means
+if fail just return nil (no error)."
   (el-search--search-pattern-1 (el-search--matcher pattern) noerror))
 
-(defun el-search--replace-hunk (region to-insert)
-  "Replace the text in REGION in current buffer with string TO-INSERT.
-Add line breaks before and after TO-INSERT when appropriate and
-reindent."
-  (atomic-change-group
-    (let* ((inhibit-message t)
-           (opoint (point))
-           (original-text (prog1 (apply #'buffer-substring-no-properties 
region)
-                            (goto-char (car region))
-                            (apply #'delete-region region)))
-           ;; care about other sexps in this line
-           (sexp-before-us (not (looking-back "\(\\|^\\s-*" 
(line-beginning-position))))
-           (sexp-after-us  (not (looking-at "\\s-*[;\)]\\|$")))
-           (insert-newline-before
-            (or
-             (and (string-match-p "\n" to-insert)
-                  (not (string-match-p "\n" original-text))
-                  (or (and sexp-before-us sexp-after-us)
-                      (looking-back
-                       (rx (or (syntax word) (syntax symbol))
-                           (+ blank)
-                           (or (syntax word) (syntax symbol))
-                           (* any))
-                       (line-beginning-position))))
-             ;; (and sexp-before-us
-             ;;      (> (+ (apply #'max (mapcar #'length (split-string 
to-insert "\n")))
-             ;;            (- (point) (line-beginning-position)))
-             ;;         fill-column))
-             ))
-           (insert-newline-after (and insert-newline-before sexp-after-us)))
-      (when insert-newline-before
-        (when (looking-back "\\s-+" (line-beginning-position))
-          (delete-region (match-beginning 0) (match-end 0)))
-        (insert "\n"))
-      (insert to-insert)
-      (when insert-newline-after
-        (insert "\n"))
-      (indent-region opoint (1+ (point))))))
 
-(defun el-search--format-replacement (replacement original replace-expr-input 
splice)
-  ;; Return a printed representation of REPLACEMENT.  Try to reuse the
-  ;; layout of subexpressions shared with the original (replaced)
-  ;; expression and the replace expression.
-  (if (and splice (not (listp replacement)))
-      (error "Expression to splice in is an atom")
-    (let ((orig-buffer (generate-new-buffer "orig-expr")))
-      (with-current-buffer orig-buffer
-        (emacs-lisp-mode)
-        (insert original)
-        (when replace-expr-input (insert "\n\n" replace-expr-input)))
-      (unwind-protect
-          (with-temp-buffer
-            (emacs-lisp-mode)
-            (insert (if splice
-                        (mapconcat #'el-search--pp-to-string replacement " ")
-                      (el-search--pp-to-string replacement)))
-            (goto-char 1)
-            (let (start this-sexp end orig-match-start orig-match-end done)
-              (while (and (< (point) (point-max))
-                          (condition-case nil
-                              (progn
-                                (setq start (point)
-                                      this-sexp (read (current-buffer))
-                                      end   (point))
-                                t)
-                            (end-of-buffer nil)))
-                (setq done nil orig-match-start nil)
-                (with-current-buffer orig-buffer
-                  (goto-char 1)
-                  (if (el-search--search-pattern `',this-sexp t)
-                      (setq orig-match-start (point)
-                            orig-match-end (progn (forward-sexp) (point)))
-                    (setq done t)))
-                ;; find out whether we have a sequence of equal expressions
-                (while (and (not done)
-                            (condition-case nil
-                                (progn (setq this-sexp (read 
(current-buffer))) t)
-                              ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
-                  (if (with-current-buffer orig-buffer
-                        (condition-case nil
-                            (if (not (equal this-sexp (read (current-buffer))))
-                                nil
-                              (setq orig-match-end (point))
-                              t)
-                          ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
-                      (setq end (point))
-                    (setq done t)))
-                ;; FIXME: there could be another occurrence of THIS-SEXP in 
ORIG-BUFFER with more
-                ;; subsequent equal expressions after it
-                (if orig-match-start
-                    (el-search--replace-hunk
-                     (list start end)
-                     (with-current-buffer orig-buffer
-                       (buffer-substring-no-properties orig-match-start 
orig-match-end)))
-                  (goto-char start)
-                  (el-search--skip-expression nil t))
-                (condition-case nil
-                    (el-search--ensure-sexp-start)
-                  (end-of-buffer (goto-char (point-max))))))
-            (goto-char 1)
-            (forward-sexp (if splice (length replacement) 1))
-            (let ((result (buffer-substring 1 (point))))
-              (if (equal replacement (read (if splice (format "(%s)" result) 
result)))
-                  result
-                (error "Error in `el-search--format-replacement' - please make 
a bug report"))))
-        (kill-buffer orig-buffer)))))
-
-(defun el-search--check-pattern-args (type args predicate &optional message)
+(defun el-search-defpattern--check-args (type args predicate &optional message)
   "Check whether all ARGS fulfill PREDICATE.
 Raise an error if not.  The string arguments TYPE and optional
 MESSAGE are used to construct the error message."
-  (mapc (lambda (arg)
-          (unless (funcall predicate arg)
-            (error (concat "Pattern `%s': "
-                           (or message (format "argument doesn't fulfill %S" 
predicate))
-                           ": %S")
-                   type arg)))
-        args))
-
-(defvar el-search-current-pattern nil)
-
-(defvar el-search-success nil)
+  (dolist (arg args)
+    (unless (funcall predicate arg)
+      (error (concat "Pattern `%s': "
+                     (or message (format "argument doesn't fulfill %S" 
predicate))
+                     ": %S")
+             type arg))))
+
+(defun el-search--elisp-file-name-p (file)
+  (and (string-match-p "\\.el\\'" file)
+       (file-exists-p file)
+       (not (file-directory-p file))))
+
+(cl-defstruct el-search-object
+  head       ;an `el-search-head' instance, modified ("moved") while searching
+  matches    ;the stream of matches in the form (buffer position file)
+  last-match ;position of last match found
+  )
+
+(cl-defstruct el-search-head
+  matcher                  ;for the search pattern
+  heuristic-buffer-matcher ;for the search pattern
+  buffer                   ;currently searched buffer, or nil meaning 
"continue in next buffer"
+  file                     ;name of currently searched file, or nil
+  position                 ;where to continue search in this buffer
+  buffers                  ;stream of buffers and/or files yet to search
+  )
+
+(defun el-search-kill-left-over-search-buffers (&optional not-current-buffer)
+  "Kill all buffers that were opened for searching."
+  (interactive)
+  (dolist (buffer (buffer-list))
+    (when (with-current-buffer buffer el-search--temp-buffer-flag)
+      (unless (or (buffer-modified-p buffer)
+                  (and not-current-buffer (eq buffer (current-buffer))))
+        (kill-buffer buffer)))))
+
+(defun el-search-heuristic-matcher (pattern)
+  "Return a heuristic matcher for PATTERN.
+This is a predicate accepting a list of a file's or buffer's
+atoms and returns nil when we can be sure that this file or
+buffer can't contain a match for PATTERN, and non-nil else."
+  (pcase pattern
+    ((pred symbolp) #'el-search-true)
+    ((pred pcase--self-quoting-p) (apply-partially #'member pattern))
+    (`',tree
+     (pcase (el-search--flatten-tree tree)
+       (`(,tree)  (apply-partially #'member tree))
+       (flattened (let ((matchers (mapcar (lambda (atom) 
(el-search-heuristic-matcher `',atom))
+                                          flattened)))
+                    (lambda (atoms) (cl-every (lambda (matcher) (funcall 
matcher atoms)) matchers))))))
+    (``,qpat
+     (cond
+      ((eq (car-safe qpat) '\,) (el-search-heuristic-matcher (cadr qpat)))
+      ((vectorp qpat)
+       (let ((matchers (mapcar (lambda (inner-qpat) 
(el-search-heuristic-matcher (list '\` inner-qpat)))
+                               qpat)))
+         (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+      ((consp qpat)
+       (el-search-heuristic-matcher
+        `(and
+          ,(list '\` (car qpat))
+          ,(if (cdr qpat) (list '\` (cdr qpat)) '_))))
+      ((or (stringp qpat) (integerp qpat) (symbolp qpat)) (apply-partially 
#'member qpat))
+      (t #'el-search-true)))
+    (`(and . ,patterns)
+     (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+       (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+    (`(or . ,patterns)
+     (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+       (lambda (atoms) (cl-some (lambda (matcher) (funcall matcher atoms)) 
matchers))))
+    (`(,(or 'app 'let 'pred 'guard) . ,_) #'el-search-true)
+    ((and `(,name . ,args)
+          (let matcher (alist-get name el-search--heuristic-matchers)) (guard 
matcher))
+     (ignore name) ;quite byte compiler
+     (apply matcher args))
+    ((and (app el-search--macroexpand-1 expanded)
+          (guard (not (eq expanded pattern))))
+     (el-search-heuristic-matcher expanded))
+    (_ #'el-search-true)))
+
+(defun el-search-atom-list (buffer)
+  (with-current-buffer buffer
+    (apply #'append
+           (mapcar #'el-search--flatten-tree
+                   (save-excursion
+                     (goto-char (point-min))
+                     (let ((forms ()))
+                       (condition-case err
+                           (while t (push (read (current-buffer)) forms))
+                         (end-of-file forms)
+                         (error "Unexpected error whilst reading %s position 
%s: %s"
+                                buffer (point) err))))))))
+
+(defun el-search--flatten-tree (tree)
+  (let ((elements ()))
+    (cl-labels ((walker (object)
+                        (if (or (not (sequencep object)) (stringp object) 
(null object)
+                                (char-table-p object) (bool-vector-p object))
+                            (push object elements)
+                          (if (consp object)
+                              (progn
+                                (while (consp object)
+                                  (walker (car object))
+                                  (setq object (cdr object)))
+                                (when object ;dotted list
+                                  (walker object)))
+                            (cl-loop for elt being the elements of object do 
(walker elt))))))
+      (walker tree)
+      elements)))
+
+(defun el-search-heuristic-buffer-matcher (pattern)
+  (let ((heuristic-matcher (el-search-heuristic-matcher pattern)))
+    (lambda (file-name-or-buffer)
+      (el-search--message-no-log "Searching in %s"
+                                 (if (stringp file-name-or-buffer)
+                                     file-name-or-buffer
+                                   (buffer-name file-name-or-buffer)))
+      (if (bufferp file-name-or-buffer)
+          (and (buffer-live-p file-name-or-buffer)
+               (funcall heuristic-matcher (el-search-atom-list 
(current-buffer))))
+        (with-temp-buffer
+          (insert-file-contents file-name-or-buffer)
+          (funcall heuristic-matcher (el-search-atom-list 
(current-buffer))))))))
+
+(defvar warning-minimum-level)
+(defun el-search--next-buffer (search &optional predicate)
+  ;; Prepare to continue SEARCH in the next buffer in line.  Move
+  ;; SEARCH's head accordingly.  When specified, PREDICATE should accept
+  ;; a file name or a buffer, and we skip all buffers and files not
+  ;; fulfilling it.  Return the new buffer to search in or nil if done.
+  (el-search-hl-remove)
+  (el-search-kill-left-over-search-buffers t)
+  (let ((original-predicate (or predicate #'el-search-true))
+        (heuristic-buffer-matcher
+         (el-search-head-heuristic-buffer-matcher (el-search-object-head 
search))))
+    (setq predicate
+          (lambda (file-name-or-buffer)
+            (and (funcall original-predicate file-name-or-buffer)
+                 (or (not el-search-optimized-search)
+                     (funcall heuristic-buffer-matcher 
file-name-or-buffer))))))
+  (let ((head (el-search-object-head search)))
+    (let ((buffer-stream (el-search-head-buffers head))
+          (buffer-list-before (buffer-list))
+          (done nil)  next  buffer)
+      (while (and (not done) (not (stream-empty-p buffer-stream)))
+        (setq next          (stream-first buffer-stream)
+              buffer-stream (stream-rest buffer-stream)
+              done          (or (not predicate) (funcall predicate next))))
+      (if (not done)
+          (progn
+            (setf (el-search-head-buffer   head) nil
+                  (el-search-head-buffers  head) buffer-stream) ;i.e. the 
empty stream
+            nil)
+        (setf (el-search-head-buffers  head) buffer-stream
+              (el-search-head-position head) 1)
+        (if (bufferp next)
+            (setq buffer next)
+          (setf (el-search-head-file head) next)
+          (setq buffer (let ((warning-minimum-level :error)) 
(find-file-noselect next))))
+        (unless (memq buffer buffer-list-before)
+          (with-current-buffer buffer
+            (setq-local el-search--temp-buffer-flag t)))
+        (setf (el-search-head-buffer head) buffer)
+        (when (bufferp buffer)
+          (with-current-buffer buffer
+            (setq-local el-search--this-buffer-matches
+                        (el-search-object-matches search))
+            (when (and (buffer-narrowed-p)
+                       (y-or-n-p (format "Widen buffer \"%s\"? "
+                                         (buffer-name))))
+              ;;FIXME: Is this always appropriate?
+              (widen))))
+        buffer))))
+
+(defun el-search--skip-to-next-buffer (&optional predicate)
+  ;; Find next buffer fulfilling the PREDICATE and continue search there
+  (el-search--next-buffer el-search--current-search predicate)
+  (el-search-continue-search))
+
+(defun el-search-make-search (pattern stream)
+  "Create and return a new `el-search-object' instance.
+MATCHER is the result of calling `el-search--matcher' on the
+pattern to search.  STREAM is a stream of buffers and/or files to
+search."
+  (let* ((matcher (el-search--matcher pattern))
+         (head (make-el-search-head
+                :matcher matcher
+                :buffers stream
+                :heuristic-buffer-matcher (el-search-heuristic-buffer-matcher 
pattern))))
+    (letrec ((search
+              (make-el-search-object
+               :head head
+               :matches
+               (seq-filter
+                #'identity ;we use `nil' as a "skip" tag
+                (funcall
+                 (letrec ((get-stream
+                           (lambda ()
+                             (stream-make
+                              (if-let ((buffer (or (el-search-head-buffer head)
+                                                   (el-search--next-buffer 
search))))
+                                  (with-current-buffer buffer
+                                    (save-excursion
+                                      ;; Widening already happens in 
`el-search-continue-search'
+                                      (goto-char (el-search-head-position 
head))
+                                      (el-search--message-no-log "Searching in 
%s"
+                                                                 (or 
(el-search-head-file head)
+                                                                     
(el-search-head-buffer head)))
+                                      (if-let ((match 
(el-search--search-pattern-1
+                                                       (el-search-head-matcher 
head) t)))
+                                          (progn
+                                            (setf (el-search-object-last-match 
search)
+                                                  (copy-marker (point)))
+                                            (el-search--skip-expression nil t)
+                                            (setf (el-search-head-position 
head)
+                                                  (copy-marker (point)))
+                                            (cons
+                                             (list (el-search-head-buffer head)
+                                                   match
+                                                   (el-search-head-file head))
+                                             (funcall get-stream)))
+                                        (setf (el-search-head-buffer head) nil
+                                              (el-search-head-file   head) nil)
+                                        (el-search--next-buffer search)
+                                        ;; retry with the next buffer
+                                        (cons nil (funcall get-stream)))))
+                                ;; end of stream (no buffers left to search in)
+                                nil)))))
+                   get-stream))))))
+      search)))
+
+(defun el-search-setup-search (pattern stream &optional from-here)
+  "Create and start a new search.
+PATTERN is the search pattern.  STREAM is a stream of buffers
+and/or files (i.e. file names) to search in.
+
+With optional FROM-HERE non-nil, the first buffer in STREAM
+should be the current buffer, and searching will start at the
+current buffer's point instead of its beginning."
+  (setq el-search--success nil)
+  (setq el-search--current-search (el-search-make-search 
(el-search--wrap-pattern pattern) stream))
+  (setq el-search--current-matcher
+        (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+  (setq el-search--current-pattern pattern)
+  (ring-insert el-search-history (list el-search--current-search pattern))
+  (when from-here (setq el-search--temp-buffer-flag nil))
+  (el-search-continue-search from-here))
+
+(defun el-search-stream-of-directory-files (&optional directory recurse)
+  "Return a stream of emacs-lisp files in DIRECTORY.
+DIRECTORY defaults to `default-directory'.  The returned stream
+will recurse into DIRECTORY's subdirectories when RECURSE is
+non-nil unless their name is matched by one of the
+`el-search-ignored-directory-regexps'."
+  (stream-of-directory-files
+   (or directory default-directory)
+   t nil
+   (and recurse
+        (lambda (dir-name)
+          (not (cl-some (lambda (regexp) (string-match-p regexp dir-name))
+                        el-search-ignored-directory-regexps))))
+   t #'el-search--elisp-file-name-p))
 
 
 ;;;; Additional pattern type definitions
 
-(defun el-search--split (matcher1 matcher2 list)
-  "Helper for the append pattern type.
-
-When a splitting of LIST into two lists L1, L2 exist so that Li
-is matched by MATCHERi, return (L1 L2) for such Li, else return
-nil."
-  (let ((try-match (lambda (list1 list2)
-                     (when (and (el-search--match-p matcher1 list1)
-                                (el-search--match-p matcher2 list2))
-                       (list list1 list2))))
-        (list1 list) (list2 '()) (match nil))
-    ;; don't use recursion, this could hit `max-lisp-eval-depth'
-    (while (and (not (setq match (funcall try-match list1 list2)))
-                (consp list1))
-      (let ((last-list1 (last list1)))
-        (if-let ((cdr-last-list1 (cdr last-list1)))
-            ;; list1 is a dotted list.  Then list2 must be empty.
-            (progn (setcdr last-list1 nil)
-                   (setq list2 cdr-last-list1))
-          (setq list1 (butlast list1 1)
-                list2 (cons (car last-list1) list2)))))
-    match))
-
-(el-search-defpattern append (&rest patterns)
-  "Matches any list factorable into lists matched by PATTERNS in order.
-
-PATTERNS is a list of patterns P1..Pn.  Match any list L for that
-lists L1..Ln exist that are matched by P1..Pn in order and L is
-equal to the concatenation of L1..Ln.  Ln is allowed to be no
-list.
-
-When different ways of matching are possible, it is unspecified
-which one is chosen.
-
-Example: the pattern
-
-   (append '(1 2 3) x (app car-safe 7))
-
-matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5 6)."
-  (if (null patterns)
-      '(pred null)
-    (pcase-let ((`(,pattern . ,more-patterns) patterns))
-      (cond
-       ((null more-patterns)  pattern)
-       ((null (cdr more-patterns))
-        `(and (pred listp)
-              (app ,(apply-partially #'el-search--split
-                                     (el-search--matcher pattern)
-                                     (el-search--matcher (car more-patterns)))
-                   `(,,pattern ,,(car more-patterns)))))
-       (t `(append ,pattern (append ,@more-patterns)))))))
-
-(defun el-search--stringish-p (thing)
-  (or (stringp thing) (and el-search-use-sloppy-strings (symbolp thing))))
+(defun el-search--eregexp-p (thing)
+  ;; Return non-nil when THING is an "extended regexp" in the sense of
+  ;; the "string" pattern type
+  (pcase thing
+    ((pred stringp) t)
+    (`(,(and (pred listp) bindings)
+       ,(pred stringp))
+     (cl-every
+      (lambda (binding) (pcase binding ((or (pred symbolp) `(,(pred symbolp)) 
`(,(pred symbolp) ,_)) t)))
+      bindings))))
 
 (el-search-defpattern string (&rest regexps)
-  "Matches any string that is matched by all REGEXPS."
-  (el-search--check-pattern-args "string" regexps #'el-search--stringish-p
-                                 "Argument not a string")
+  "Matches any string that is matched by all REGEXPS.
+
+Any of the REGEXPS can also be an \"extended\" regexp of the form
+
+  \(bindings regexp\)
+
+where REGEXP is the actual regexp to match and BINDINGS is a
+let-style list of variable bindings.
+
+Example: (((case-fold-search nil)) \"foo\") is an extended regexp
+matching \"foo\", but not \"Foo\" even when `case-fold-search' is
+currently enabled."
+  (declare (heuristic-matcher
+            (lambda (&rest eregexps)
+              (let ((matchers
+                     (mapcar (lambda (eregexp) (apply-partially 
#'el-search--string-match-p eregexp))
+                             eregexps)))
+                (lambda (atoms)
+                  (cl-some
+                   (lambda (atom)
+                     (and (stringp atom)
+                          (cl-every (lambda (matcher) (funcall matcher atom)) 
matchers)))
+                   atoms))))))
+  (el-search-defpattern--check-args "string" regexps #'el-search--eregexp-p
+                                    "argument not a regexp")
   `(and (pred stringp)
-        ,@(mapcar (lambda (thing) `(pred (el-search--smart-string-match-p
-                                     ,(if (symbolp thing) (symbol-name thing) 
thing))))
+        ,@(mapcar (lambda (thing) `(pred (el-search--string-match-p ',thing)))
                   regexps)))
 
 (el-search-defpattern symbol (&rest regexps)
-  "Matches any symbol whose name is matched by all REGEXPS."
-  (el-search--check-pattern-args "symbol" regexps #'el-search--stringish-p
-                                 "Argument not a string")
-  `(and (pred symbolp)
-        (app symbol-name (string ,@regexps))))
+  "Matches any symbol whose name is matched by all REGEXPS.
+Any of the REGEXPS can be an extended regexp of the form
+\(bindings regexp\) like in the \"string\" pattern."
+  (declare (heuristic-matcher
+            (lambda (&rest eregexps)
+              (let ((matchers
+                     (mapcar (lambda (eregexp) (apply-partially 
#'el-search--string-match-p eregexp))
+                             eregexps)))
+                (lambda (atoms)
+                  (cl-some
+                   (lambda (atom)
+                     (when-let ((symbol-name (and (symbolp atom) (symbol-name 
atom))))
+                       (cl-every (lambda (matcher) (funcall matcher 
symbol-name)) matchers)))
+                   atoms))))))
+  (el-search-defpattern--check-args "symbol" regexps #'el-search--eregexp-p
+                                    "argument not a regexp")
+  `(and (pred symbolp) (app symbol-name (string ,@regexps))))
 
 (defun el-search--contains-p (matcher exp)
-  "Return non-nil when tree EXP contains a match for MATCHER.
+  "Return non-nil when expression tree EXP contains a match for MATCHER.
 Recurse on all types of sequences.  In the positive case the
 return value is (t elt), where ELT is a matching element found in
 EXP."
@@ -760,11 +1159,22 @@ EXP."
              (cl-some try-match exp))))))
 
 (el-search-defpattern contains (&rest patterns)
-  "Matches trees that contain a match for all PATTERNs.
-Searches any tree of sequences recursively for matches.  Objects
-of any kind matched by all PATTERNs are also matched.
+  "Matches expressions that contain a match for all PATTERNs.
+
+Example:
+
+  \(contains (string \"H\") 17)
 
-  Example: (contains (string \"H\") 17) matches ((\"Hallo\") x (5 [1 17]))"
+matches
+
+  \((\"Hallo\") x (5 [1 17])).
+
+The expression itself is included, so for example `1' is matched
+by \(contains 1\)."
+  (declare (heuristic-matcher
+            (lambda (&rest patterns)
+              (let ((matchers (mapcar #'el-search-heuristic-matcher patterns)))
+                (lambda (atoms) (cl-every (lambda (matcher) (funcall matcher 
atoms)) matchers))))))
   (cond
    ((null patterns) '_)
    ((null (cdr patterns))
@@ -775,120 +1185,29 @@ of any kind matched by all PATTERNs are also matched.
 
 (el-search-defpattern not (pattern)
   "Matches any object that is not matched by PATTERN."
+  (declare (heuristic-matcher ;We can't just negate the hm of the PATTERN!
+            (lambda (_pattern) #'el-search-true)))
   `(app ,(apply-partially #'el-search--match-p (el-search--matcher pattern))
         (pred not)))
 
-(defun el-search--match-symbol-file (regexp symbol)
-  (when-let ((symbol-file (and (symbolp symbol)
-                               (symbol-file symbol))))
-    (el-search--smart-string-match-p
-     (if (symbolp regexp) (concat "\\`" (symbol-name regexp) "\\'") regexp)
+(defun el-search--match-symbol-file (eregexp symbol)
+  (when-let ((symbol-file (and (symbolp symbol) (symbol-file symbol))))
+    (el-search--string-match-p
+     eregexp
      (file-name-sans-extension (file-name-nondirectory symbol-file)))))
 
-(el-search-defpattern source (regexp)
+(el-search-defpattern symbol-file (regexp)
   "Matches any symbol whose `symbol-file' is matched by REGEXP.
 
 This pattern matches when the object is a symbol for that
-`symbol-file' returns a (non-nil) FILE-NAME that fulfills
-  (string-match-p REGEXP (file-name-sans-extension
-                           (file-name-nondirectory FILENAME)))
-
-REGEXP can also be a symbol, in which case
-
-  (concat \"^\" (symbol-name regexp) \"$\")
-
-is used as regular expression."
-  (el-search--check-pattern-args "source" (list regexp) 
#'el-search--stringish-p
-                                 "Argument not a string")
-  `(pred (el-search--match-symbol-file ,(if (symbolp regexp) (symbol-name 
regexp) regexp))))
-
-(defun el-search--match-key-sequence (keys expr)
-  (when-let ((expr-keys (pcase expr
-                          ((or (pred stringp) (pred vectorp))  expr)
-                          (`(kbd ,(and (pred stringp) string)) (ignore-errors 
(kbd string))))))
-    (apply #'equal
-           (mapcar (lambda (keys) (ignore-errors (key-description keys)))
-                   (list keys expr-keys)))))
-
-(el-search-defpattern keys (key-sequence)
-  "Matches descriptions of the KEY-SEQUENCE.
-KEY-SEQUENCE is a string or vector representing a key sequence,
-or an expression of the form (kbd STRING).
-
-Match any description of the same key sequence in any of these
-formats.
-
-Example: the pattern
-
-    (keys (kbd \"C-s\"))
-
-matches any of these expressions:
-
-    \"\\C-s\"
-    \"\C-s\"
-    (kbd \"C-s\")
-    [(control ?s)]"
-  (when (eq (car-safe key-sequence) 'kbd)
-    (setq key-sequence (kbd (cadr key-sequence))))
-  (el-search--check-pattern-args "keys" (list key-sequence) (lambda (x) (or 
(stringp x) (vectorp x)))
-                                 "argument not a string or vector")
-  `(pred (el-search--match-key-sequence ,key-sequence)))
-
-(defun el-search--transform-nontrivial-lpat (expr)
-  (pcase expr
-    ((and (pred symbolp) (let symbol-name (symbol-name expr)))
-     `(or (symbol ,symbol-name)
-          `',(symbol  ,symbol-name)
-          `#',(symbol ,symbol-name)))
-    ((pred stringp) `(string ,expr))
-    (_ expr)))
-
-(el-search-defpattern l (&rest lpats)
-  "Alternative pattern type for matching lists.
-Match any list with subsequent elements matched by all LPATS in
-order.
-
-The idea is to be able to search for pieces of code (i.e. lists)
-with very brief input by using a specialized syntax.
-
-An LPAT can take the following forms:
-
-SYMBOL  Matches any symbol S matched by SYMBOL's name interpreted
-        as a regexp.  Matches also 'S and #'S for any such S.
-STRING  Matches any string matched by STRING interpreted as a
-        regexp
-_       Matches any list element
-__      Matches any number of list elements (including zero)
-^       Matches zero elements, but only at the beginning of a list
-$       Matches zero elements, but only at the end of a list
-PAT     Anything else is interpreted as a normal pcase pattern, and
-        matches one list element matched by it
-
-^ is only valid as the first, $ as the last of the LPATS.
-
-Example: To match defuns that contain \"hl\" in their name and
-have at least one mandatory, but also optional arguments, you
-could use this pattern:
-
-    (l ^ 'defun hl (l _ &optional))"
-  (let ((match-start nil) (match-end nil))
-    (when (eq (car-safe lpats) '^)
-      (setq match-start t)
-      (cl-callf cdr lpats))
-    (when (eq (car-safe (last lpats)) '$)
-      (setq match-end t)
-      (cl-callf butlast lpats 1))
-    `(append ,@(if match-start '() '(_))
-             ,@(mapcar
-                (lambda (elt)
-                  (pcase elt
-                    ('__ '_)
-                    ('_ '`(,_))
-                    ('_? '(or '() `(,_))) ;FIXME: useful - document? or should 
we provide a (? PAT)
-                                          ;thing?
-                    (_ ``(,,(el-search--transform-nontrivial-lpat elt)))))
-                lpats)
-             ,@(if match-end '() '(_)))))
+`symbol-file' returns a (non-nil) FILE-NAME so that
+
+   (file-name-sans-extension (file-name-nondirectory FILENAME)))
+
+is matched by the REGEXP."
+  (el-search-defpattern--check-args "symbol-file" (list regexp) 
#'el-search--eregexp-p
+                                    "argument not a regexp")
+  `(pred (el-search--match-symbol-file ',regexp)))
 
 (el-search-defpattern char-prop (property)
   "Matches the object if completely covered with PROPERTY.
@@ -896,9 +1215,9 @@ This pattern matches the object if its representation in 
the
 search buffer is completely covered with the character property
 PROPERTY.
 
-This pattern always tests the complete expression in the search
-buffer, it is not possible to test subexpressions calculated in
-the search pattern."
+This pattern should only be used to match against the current
+object (so it can't be used inside an `app' pattern for
+example)."
   `(guard (and (get-char-property (point) ',property)
                ,(macroexp-let2 nil limit '(scan-sexps (point) 1)
                   `(= (next-single-char-property-change
@@ -911,9 +1230,9 @@ This pattern matches the object if its representation in 
the
 search buffer is partly covered with the character property
 PROPERTY.
 
-This pattern always tests the complete expression in the search
-buffer, it is not possible to test subexpressions calculated in
-the search pattern."
+This pattern should only be used to match against the current
+object (so it can't be used inside an `app' pattern for
+example)."
   `(guard (or (get-char-property (point) ',property)
               ,(macroexp-let2 nil limit '(scan-sexps (point) 1)
                  `(not (= (next-single-char-property-change
@@ -927,24 +1246,55 @@ the search pattern."
 
 (defvar-local el-search-hl-other-overlays '())
 
-(defvar el-search-keep-hl nil)
+(defvar el-search-keep-hl nil
+  "Non-nil indicates we should not remove any highlighting.")
 
 (defun el-search-hl-sexp (&optional bounds)
-  (let ((bounds (or bounds
-                    (list (point) (el-search--end-of-sexp)))))
+  (let ((bounds (or bounds (list (point) (el-search--end-of-sexp)))))
     (if (overlayp el-search-hl-overlay)
         (apply #'move-overlay el-search-hl-overlay bounds)
       (overlay-put (setq el-search-hl-overlay (apply #'make-overlay bounds))
                    'face 'el-search-match))
-    (overlay-put el-search-hl-overlay 'priority 1002))
+    (overlay-put el-search-hl-overlay 'priority 1002)
+
+    ;; Vertically scroll the current sexp into view when appropriate -- we
+    ;; must redisplay to get updated window bounds.  The selected frame
+    ;; must apparently be displayed for this to work.
+    (while (not (eq t (frame-visible-p (selected-frame))))
+      (sleep-for .1))
+    (redisplay)
+    (let ((wheight (window-height)))
+      ;; FIXME: make the following integer constants customizable,
+      ;; presumably, named in analogy to the scroll- options?
+      (unless (pos-visible-in-window-p
+               (save-excursion (goto-char (cadr bounds))
+                               (line-end-position (max +3 (/ wheight 25)))))
+        (scroll-up (min
+                    (max
+                     ;; make at least sexp end + a small margin visible
+                     (- (line-number-at-pos (cadr bounds))
+                        (line-number-at-pos (window-end))
+                        (- (max 2 (/ wheight 4))))
+                     ;; also try to center current sexp
+                     (- (/ ( + (line-number-at-pos (car bounds))
+                               (line-number-at-pos (cadr bounds)))
+                           2)
+                        (/ (+ (line-number-at-pos (window-start))
+                              (line-number-at-pos (window-end)))
+                           2)))
+                    ;; but also ensure at least a small margin is left between 
point and window start
+                    (- (line-number-at-pos (car  bounds))
+                       (line-number-at-pos (window-start))
+                       3))))))
+
   (add-hook 'post-command-hook #'el-search-hl-post-command-fun t t))
 
-(defun el-search--hl-other-matches-1 (pattern from to)
+(defun el-search--hl-other-matches-1 (matcher from to)
+  ;; Highlight all matches between FROM and TO with face
+  ;; `el-search-other-match'.
   (mapc #'delete-overlay el-search-hl-other-overlays)
   (setq el-search-hl-other-overlays '())
-  (let ((matcher (el-search--matcher pattern))
-        this-match-beg this-match-end
-        (done nil))
+  (let (this-match-beg this-match-end (done nil))
     (save-excursion
       (goto-char from)
       (while (not done)
@@ -960,9 +1310,13 @@ the search pattern."
             (goto-char this-match-end)
             (when (>= (point) to) (setq done t))))))))
 
-(defun el-search-hl-other-matches (pattern)
-  "Highlight all matches visible in the selected window."
-  (el-search--hl-other-matches-1 pattern
+(defun el-search-hl-other-matches (matcher)
+  "Highlight all visible matches.
+
+Highlight all matches visible in the selected window with face
+`el-search-other-match' and add `el-search--after-scroll' to the
+local binding of `window-scroll-functions'."
+  (el-search--hl-other-matches-1 matcher
                                  (save-excursion
                                    (goto-char (window-start))
                                    (beginning-of-defun-raw)
@@ -971,7 +1325,7 @@ the search pattern."
   (add-hook 'window-scroll-functions #'el-search--after-scroll t t))
 
 (defun el-search--after-scroll (_win start)
-  (el-search--hl-other-matches-1 el-search-current-pattern
+  (el-search--hl-other-matches-1 el-search--current-matcher
                                  (save-excursion
                                    (goto-char start)
                                    (beginning-of-defun-raw)
@@ -990,24 +1344,158 @@ the search pattern."
               (eq this-command 'el-search-query-replace)
               (eq this-command 'el-search-pattern))
     (el-search-hl-remove)
-    (remove-hook 'post-command-hook 'el-search-hl-post-command-fun t)))
+    (remove-hook 'post-command-hook 'el-search-hl-post-command-fun t)
+    (setq el-search--temp-buffer-flag nil)))
 
 
 ;;;; Core functions
 
+(defun el-search-continue-in-next-buffer ()
+  "Skip current search buffer and continue with the next."
+  (interactive)
+  (el-search--skip-to-next-buffer
+   (lambda (buffer-or-file)
+     (not (if (bufferp buffer-or-file)
+              (eq buffer-or-file (current-buffer))
+            (file-equal-p buffer-or-file buffer-file-name))))))
+
+(defun el-search-all-matches (search)
+  "Perform SEARCH non-interactively and return a list of all matches.
+
+SEARCH is an `el-search-object'.  Execute SEARCH
+non-interactively until finished and return a list of matches in
+the form \(file-name-or-buffer . match-position)."
+  (mapcar
+   (pcase-lambda (`(,buffer ,position ,file))
+     (cons (if (buffer-live-p buffer) buffer file) position))
+   (seq-into-sequence (el-search-object-matches search))))
+
+(defun el-search-jump-to-search-head (&optional previous-search)
+  (interactive "P")
+  "Switch to current search buffer and go to the last match.
+With prefix arg, prompt for a prior search to resume, and make
+that the current search."
+  (when previous-search
+    (let ((entry (ring-ref
+                  el-search-history
+                  (string-to-number
+                   (let ((completion-extra-properties
+                          `(:annotation-function
+                            ,(lambda (elt)
+                               (format "  Search in %S for %S"
+                                       (el-search-head-buffer
+                                        (el-search-object-head
+                                         (car (ring-ref el-search-history 
(string-to-number elt)))))
+                                       (cadr (ring-ref el-search-history 
(string-to-number elt))))))))
+                     (completing-read
+                      "Resume previous search: "
+                      (mapcar #'prin1-to-string
+                              (number-sequence 0 (1- (ring-length 
el-search-history))))))))))
+      (setq el-search--current-search  (car entry))
+      (setq el-search--current-pattern (cadr entry)))
+    (setq el-search--current-matcher
+          (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+    (el-search--pushnew-to-history
+     (el-search--pp-to-string el-search--current-pattern)
+     'el-search-pattern-history))
+  (if-let ((search el-search--current-search)
+           (current-head (el-search-object-head search))
+           (current-search-buffer (el-search-head-buffer current-head)))
+      (progn
+        (setq this-command 'el-search-pattern)
+        (let ((win (display-buffer current-search-buffer 
el-search-display-buffer-action)))
+          (select-frame-set-input-focus (window-frame win))
+          (select-window win))
+        (let ((last-match (el-search-object-last-match search)))
+          (if (not (and last-match
+                        (eq (marker-buffer last-match) (current-buffer))))
+              ;; this should only happen for bad search patterns
+              (goto-char (el-search-head-position current-head))
+            (goto-char last-match)
+            (el-search-hl-sexp)
+            (el-search-hl-other-matches el-search--current-matcher)
+            (set-transient-map el-search-map))))
+    (error "Last search finished")))
+
+(defun el-search-continue-search (&optional from-here)
+  "Continue or resume the current search.
+
+With prefix arg FROM-HERE given, the current search buffer should
+be the current buffer, and the search will be resumed from point
+instead of the position where the search would normally be
+continued."
+  (interactive "P")
+  (setq this-command 'el-search-pattern)
+  (setq el-search--current-matcher
+        (el-search-head-matcher (el-search-object-head 
el-search--current-search)))
+  (let ((old-current-buffer (current-buffer)))
+    (when from-here
+      (let* ((head (el-search-object-head el-search--current-search))
+             (current-search-buffer
+              (or (el-search-head-buffer head)
+                  (el-search--next-buffer el-search--current-search))))
+        (cond
+         ((eq (current-buffer) current-search-buffer)
+          (setf (el-search-head-position head) (copy-marker (point))))
+         ((and current-search-buffer (buffer-live-p current-search-buffer))
+          (error "Please resume from buffer %s" (buffer-name 
current-search-buffer)))
+         (current-search-buffer
+          (error "Invalid search head: buffer killed")))))
+    (unwind-protect
+        (let ((stream-of-matches (el-search-object-matches 
el-search--current-search)))
+          (if (not (stream-empty-p stream-of-matches))
+              (let ((match (stream-first stream-of-matches)))
+                (switch-to-buffer (car match))
+                (goto-char (cadr match))
+                (cl-callf stream-rest (el-search-object-matches 
el-search--current-search))
+                (el-search-hl-sexp)
+                (unless (and (eq this-command last-command)
+                             el-search--success
+                             (eq (current-buffer) old-current-buffer))
+                  (el-search-hl-other-matches el-search--current-matcher))
+                (set-transient-map el-search-map)
+                (setq el-search--success t))
+            (setq el-search--success nil)
+            (set-transient-map nil)
+            (el-search-kill-left-over-search-buffers)
+            (message "Done!")))
+      (unless el-search--success (setq el-search--current-pattern nil)))))
+
+(defun el-search-skip-directory (directory)
+  "Skip all subsequent matches in files located under DIRECTORY."
+  (interactive
+   (list (expand-file-name
+          (read-directory-name "Skip all files under directory: " nil
+                               (if-let ((search el-search--current-search)
+                                        (current-head (el-search-object-head 
search))
+                                        (current-file (el-search-head-file 
current-head)))
+                                   (file-name-directory current-file)
+                                 default-directory)
+                               t))))
+  (el-search--skip-to-next-buffer
+   (lambda (buffer-or-file-name)
+     (or (bufferp buffer-or-file-name)
+         ;; `file-in-directory-p' would be perfect here, but it calls
+         ;; file-truename on both args what we don't want, so we use this:
+         (string-match-p "\\`\\.\\." (file-relative-name buffer-or-file-name 
directory))))))
+
 ;;;###autoload
-(defun el-search-pattern (pattern &optional no-error)
-  "Start new or resume last elisp search.
+(defun el-search-pattern (pattern)
+  "Start new or resume last elisp buffer search.
 
 Search current buffer for expressions that are matched by `pcase'
 PATTERN.  Use `read' to transform buffer contents into
 expressions.
 
-Use `emacs-lisp-mode' for reading input.  Some keys in the
-minibuffer have a special binding: to make it possible to edit
-multi line input, C-j inserts a newline, and up and down move the
-cursor vertically - see `el-search-read-expression-map' for more
-details.
+When called from the current search's current search buffer,
+continue that search from point.  Otherwise or when a new PATTERN
+is given, start a new single-buffer search from point.
+
+Use `emacs-lisp-mode' for reading the input pattern.  Some keys
+in the minibuffer have a special binding: to make it possible to
+edit multi line input, C-j inserts a newline, and up and down
+move the cursor vertically - see `el-search-read-expression-map'
+for details.
 
 
 Additional `pcase' pattern types to be used with this command can
@@ -1015,40 +1503,228 @@ be defined with `el-search-defpattern'.
 
 The following additional pattern types are currently defined:"
   (interactive (list (if (and (eq this-command last-command)
-                              el-search-success)
-                         el-search-current-pattern
-                       (let* ((input (el-search--read-pattern "Find pcase 
pattern: "
-                                                              (car 
el-search-history)))
-                              (pattern (read input)))
-                         ;; A very common mistake: input "foo" instead of 
"'foo"
-                         (when (and (symbolp pattern)
-                                    (not (eq pattern '_))
-                                    (or (not (boundp pattern))
-                                        (not (eq (symbol-value pattern) 
pattern))))
-                           (error "Please don't forget the quote when 
searching for a symbol"))
-                         ;; Make input available also in query-replace history
-                         (el-search--pushnew-to-history input 
'el-search-query-replace-history)
-                         ;; and wrap the PATTERN
-                         (el-search--wrap-pattern pattern)))))
-  (if (not (called-interactively-p 'any))
-      (el-search--search-pattern pattern no-error)
-    (setq this-command 'el-search-pattern) ;in case we come from isearch
-    (setq el-search-current-pattern pattern)
-    (let ((opoint (point)))
-      (when (and (eq this-command last-command) el-search-success)
-        (el-search--skip-expression nil t))
-      (setq el-search-success nil)
-      (when (condition-case nil
-                (el-search--search-pattern pattern)
-              (end-of-buffer (message "No match")
-                             (goto-char opoint)
-                             (el-search-hl-remove)
-                             (ding)
-                             nil))
-        (setq el-search-success t)
-        (el-search-hl-sexp)
-        (unless (eq this-command last-command)
-          (el-search-hl-other-matches pattern))))))
+                              el-search--success)
+                         el-search--current-pattern
+                       (el-search--read-pattern-for-interactive))))
+  (cond
+   ((and (eq this-command last-command)
+         (eq pattern el-search--current-pattern))
+    (progn
+      (el-search--skip-expression nil t)
+      (el-search-continue-search 'from-here)))
+   ((and (equal pattern el-search--current-pattern)
+         (eq (current-buffer)
+             (el-search-head-buffer (el-search-object-head 
el-search--current-search))))
+    (el-search-continue-search 'from-here))
+   (t ;; create a new search single-buffer search
+    (el-search-setup-search pattern (stream (list (current-buffer))) 
'from-here))))
+
+(put 'el-search-pattern 'function-documentation '(el-search--make-docstring 
'el-search-pattern))
+
+(defun el-search-previous-match ()
+  "Revisit found matches in the current buffer in reverse order."
+  ;; Implementing backward el-searching is very hard (or very slow,
+  ;; alternatively), so let's use this for now...
+  (interactive)
+  (if (not (el-search-head-buffer (el-search-object-head 
el-search--current-search)))
+      ;; FIXME: This case is tricky; the user would expect that when he hits
+      ;; C-S afterwards, the search is restored with the old matches
+      ;; "merged".  So for now, we raise this:
+      (error "Last search completed, please start a new search")
+    (setq this-command 'el-search-pattern)
+    (let ((last-match-beg (el-search-object-last-match 
el-search--current-search)))
+      (if (< last-match-beg (point))
+          (el-search-jump-to-search-head)
+        (let ((go-there nil) (matches el-search--this-buffer-matches))
+          (catch 'done
+            (while (and (not (stream-empty-p matches))
+                        (< (cadr (stream-first matches)) (point)))
+              (setq go-there (cadr (stream-first matches)))
+              (stream-pop matches)))
+          (if (not go-there)
+              (el-search--message-no-log "[Beginning of this buffer's recorded 
matches]")
+            (goto-char go-there)
+            (el-search-hl-sexp)
+            (set-transient-map el-search-map)))))))
+
+;;;###autoload
+(defun el-search-buffers (pattern)
+  "Search all live elisp buffers for PATTERN."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (seq-filter
+    (lambda (buffer) (with-current-buffer buffer (derived-mode-p 
'emacs-lisp-mode)))
+    (stream (buffer-list)))))
+
+;;;###autoload
+(defun el-search-directory (pattern directory &optional recursively)
+  "Search all elisp files in DIRECTORY for PATTERN.
+With prefix arg RECURSIVELY non-nil, search subdirectories recursively."
+  (interactive (list (el-search--read-pattern-for-interactive)
+                     (expand-file-name
+                      (read-directory-name (format "el-search directory%s: "
+                                                   (if current-prefix-arg " 
recursively" ""))
+                                           nil default-directory t))
+                     current-prefix-arg))
+  (el-search-setup-search
+   pattern
+   (el-search-stream-of-directory-files directory recursively)))
+
+;;;###autoload
+(defun el-search-emacs-elisp-sources (pattern)
+  "Search Emacs elisp sources for PATTERN.
+This command recursively searches all elisp files under
+\(expand-file-name \"lisp/\" source-directory\)."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (el-search-stream-of-directory-files
+    (expand-file-name "lisp/" source-directory)
+    t)))
+
+;;;###autoload
+(defun el-search-load-path (pattern)
+  "Search PATTERN in the elisp files in all directories of `load-path'.
+nil elements in `load-path' (standing for `default-directory')
+are ignored."
+  (interactive (list (el-search--read-pattern-for-interactive)))
+  (el-search-setup-search
+   pattern
+   (stream-concatenate
+    (seq-map (lambda (path) (el-search-stream-of-directory-files path nil))
+             (stream (delq nil load-path))))))
+
+(declare-function dired-get-marked-files "dired")
+
+;;;###autoload
+(defun el-search-dired-marked-files (pattern &optional recursively)
+  "el-search marked files and directories in dired.
+With RECURSIVELY given (the prefix arg in an interactive call),
+search directories recursively."
+  (interactive (list (el-search--read-pattern-for-interactive) 
current-prefix-arg))
+  (el-search-setup-search
+   pattern
+   (stream-concatenate
+    (seq-map
+     (lambda (file)
+       (if (file-directory-p file)
+           (el-search-stream-of-directory-files file recursively)
+         (stream (list file))))
+     (stream (dired-get-marked-files))))))
+
+
+;;;; Query-replace
+
+(defun el-search--replace-hunk (region to-insert)
+  "Replace the text in REGION in current buffer with string TO-INSERT.
+Add line breaks before and after TO-INSERT when appropriate and
+reindent."
+  (atomic-change-group
+    (let* ((inhibit-message t)
+           (opoint (point))
+           (original-text (prog1 (apply #'buffer-substring-no-properties 
region)
+                            (goto-char (car region))
+                            (apply #'delete-region region)))
+           ;; care about other sexps in this line
+           (sexp-before-us (not (looking-back "\(\\|^\\s-*" 
(line-beginning-position))))
+           (sexp-after-us  (not (looking-at "\\s-*[;\)]\\|$")))
+           (insert-newline-before
+            (or
+             (and (string-match-p "\n" to-insert)
+                  (not (string-match-p "\n" original-text))
+                  (or (and sexp-before-us sexp-after-us)
+                      (looking-back
+                       (rx (or (syntax word) (syntax symbol))
+                           (+ blank)
+                           (or (syntax word) (syntax symbol))
+                           (* any))
+                       (line-beginning-position))))
+             ;; (and sexp-before-us
+             ;;      (> (+ (apply #'max (mapcar #'length (split-string 
to-insert "\n")))
+             ;;            (- (point) (line-beginning-position)))
+             ;;         fill-column))
+             ))
+           (insert-newline-after (and insert-newline-before sexp-after-us)))
+      (when insert-newline-before
+        (when (looking-back "\\s-+" (line-beginning-position))
+          (delete-region (match-beginning 0) (match-end 0)))
+        (insert "\n"))
+      (insert to-insert)
+      (when insert-newline-after
+        (insert "\n"))
+      (save-excursion
+        ;; the whole enclosing sexp might need re-indenting
+        (condition-case nil (up-list)  (scan-error))
+        (indent-region opoint (1+ (point)))))))
+
+(defun el-search--format-replacement (replacement original replace-expr-input 
splice)
+  ;; Return a printed representation of REPLACEMENT.  Try to reuse the
+  ;; layout of subexpressions shared with the original (replaced)
+  ;; expression and the replace expression.
+  (if (and splice (not (listp replacement)))
+      (error "Expression to splice in is an atom")
+    (let ((orig-buffer (generate-new-buffer "orig-expr")))
+      (with-current-buffer orig-buffer
+        (emacs-lisp-mode)
+        (insert original)
+        (when replace-expr-input (insert "\n\n" replace-expr-input)))
+      (unwind-protect
+          (with-temp-buffer
+            (emacs-lisp-mode)
+            (insert (if splice
+                        (mapconcat #'el-search--pp-to-string replacement " ")
+                      (el-search--pp-to-string replacement)))
+            (goto-char 1)
+            (let (start this-sexp end orig-match-start orig-match-end done)
+              (while (and (< (point) (point-max))
+                          (condition-case nil
+                              (progn
+                                (setq start (point)
+                                      this-sexp (read (current-buffer))
+                                      end   (point))
+                                t)
+                            (end-of-buffer nil)))
+                (setq done nil orig-match-start nil)
+                (with-current-buffer orig-buffer
+                  (goto-char 1)
+                  (if (el-search-forward `',this-sexp t)
+                      (setq orig-match-start (point)
+                            orig-match-end (progn (forward-sexp) (point)))
+                    (setq done t)))
+                ;; find out whether we have a sequence of equal expressions
+                (while (and (not done)
+                            (condition-case nil
+                                (progn (setq this-sexp (read 
(current-buffer))) t)
+                              ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
+                  (if (with-current-buffer orig-buffer
+                        (condition-case nil
+                            (if (not (equal this-sexp (read (current-buffer))))
+                                nil
+                              (setq orig-match-end (point))
+                              t)
+                          ((invalid-read-syntax end-of-buffer end-of-file) 
nil)))
+                      (setq end (point))
+                    (setq done t)))
+                ;; FIXME: there could be another occurrence of THIS-SEXP in 
ORIG-BUFFER with more
+                ;; subsequent equal expressions after it
+                (if orig-match-start
+                    (el-search--replace-hunk
+                     (list start end)
+                     (with-current-buffer orig-buffer
+                       (buffer-substring-no-properties orig-match-start 
orig-match-end)))
+                  (goto-char start)
+                  (el-search--skip-expression nil t))
+                (condition-case nil
+                    (el-search--ensure-sexp-start)
+                  (end-of-buffer (goto-char (point-max))))))
+            (goto-char 1)
+            (forward-sexp (if splice (length replacement) 1))
+            (let ((result (buffer-substring 1 (point))))
+              (if (equal replacement (read (if splice (format "(%s)" result) 
result)))
+                  result
+                (error "Error in `el-search--format-replacement' - please make 
a bug report"))))
+        (kill-buffer orig-buffer)))))
 
 (defvar el-search-search-and-replace-help-string
   "\
@@ -1070,95 +1746,105 @@ Hit any key to proceed."
   (let ((replace-all nil) (nbr-replaced 0) (nbr-skipped 0) (done nil)
         (el-search-keep-hl t) (opoint (point))
         (get-replacement (el-search--matcher pattern replacement))
-        (skip-matches-in-replacement 'ask))
+        (skip-matches-in-replacement 'ask)
+        (matcher (setq el-search--current-matcher
+                       (el-search--matcher (el-search--wrap-pattern 
pattern)))))
     (unwind-protect
-        (while (and (not done) (el-search--search-pattern pattern t))
-          (setq opoint (point))
-          (unless replace-all
-            (el-search-hl-sexp)
-            (unless (eq this-command last-command)
-              (el-search-hl-other-matches pattern)))
-          (let* ((region (list (point) (el-search--end-of-sexp)))
-                 (original-text (apply #'buffer-substring-no-properties 
region))
-                 (expr      (read original-text))
-                 (replaced-this nil)
-                 (new-expr  (funcall get-replacement expr))
-                 (get-replacement-string
-                  (lambda () (el-search--format-replacement new-expr 
original-text to-input-string splice)))
-                 (to-insert (funcall get-replacement-string))
-                 (replacement-contains-another-match
-                  (with-temp-buffer
-                    (emacs-lisp-mode)
-                    (insert to-insert)
-                    (goto-char 1)
-                    (el-search--skip-expression new-expr)
-                    (condition-case nil
-                        (progn (el-search--ensure-sexp-start)
-                               (el-search--search-pattern pattern t))
-                      (end-of-buffer nil))))
-                 (do-replace
-                  (lambda ()
-                    (save-excursion
-                      (save-restriction
-                        (widen)
-                        (el-search--replace-hunk (list (point) 
(el-search--end-of-sexp)) to-insert)))
-                    (el-search--ensure-sexp-start) ;skip potentially newly 
added whitespace
-                    (el-search-hl-sexp (list opoint (point)))
-                    (cl-incf nbr-replaced)
-                    (setq replaced-this t))))
-            (if replace-all
-                (funcall do-replace)
-              (while (not (pcase (if replaced-this
-                                     (read-char-choice "[SPC ! q]  (? for 
help)"
-                                                       '(?\ ?! ?q ?\C-g ?n ??))
-                                   (read-char-choice
-                                    (concat "Replace this occurrence"
-                                            (if (or (string-match-p "\n" 
to-insert)
-                                                    (< 40 (length to-insert)))
-                                                "" (format " with `%s'" 
to-insert))
-                                            "? "
-                                            (if splice "{splice} " "")
-                                            "[y SPC r ! s q]  (? for help)" )
-                                    '(?y ?n ?r ?\ ?! ?q ?\C-g ?s ??)))
-                            (?r (funcall do-replace)
-                                nil)
-                            (?y (funcall do-replace)
-                                t)
-                            ((or ?\ ?n)
-                             (unless replaced-this (cl-incf nbr-skipped))
-                             t)
-                            (?! (unless replaced-this
-                                  (funcall do-replace))
-                                (setq replace-all t)
-                                t)
-                            (?s (cl-callf not splice)
-                                (setq to-insert (funcall 
get-replacement-string))
-                                nil)
-                            ((or ?q ?\C-g)
-                             (setq done t)
-                             t)
-                            (?? (ignore (read-char 
el-search-search-and-replace-help-string))
-                                nil)))))
-            (unless (or done (eobp))
-              (cond
-               ((not (and replaced-this replacement-contains-another-match))
-                (el-search--skip-expression nil t))
-               ((eq skip-matches-in-replacement 'ask)
-                (if (setq skip-matches-in-replacement
-                          (yes-or-no-p "Match in replacement - always skip? "))
-                    (forward-sexp)
+        (progn
+
+          ;; Try to avoid to call time consuming `el-search-hl-other-matches' 
in the loop
+          (el-search-hl-other-matches matcher)
+          (add-hook 'window-scroll-functions #'el-search--after-scroll t t)
+
+          (while (and (not done) (el-search--search-pattern-1 matcher t))
+            (setq opoint (point))
+            (unless replace-all
+              (el-search-hl-sexp))
+            (let* ((region (list (point) (el-search--end-of-sexp)))
+                   (original-text (apply #'buffer-substring-no-properties 
region))
+                   (expr      (read original-text))
+                   (replaced-this nil)
+                   (new-expr  (funcall get-replacement expr))
+                   (get-replacement-string
+                    (lambda () (el-search--format-replacement
+                           new-expr original-text to-input-string splice)))
+                   (to-insert (funcall get-replacement-string))
+                   (replacement-contains-another-match
+                    (with-temp-buffer
+                      (emacs-lisp-mode)
+                      (insert to-insert)
+                      (goto-char 1)
+                      (el-search--skip-expression new-expr)
+                      (condition-case nil
+                          (progn (el-search--ensure-sexp-start)
+                                 (el-search-forward pattern t))
+                        (end-of-buffer nil))))
+                   (do-replace
+                    (lambda ()
+                      (save-excursion
+                        (save-restriction
+                          (widen)
+                          (el-search--replace-hunk (list (point) 
(el-search--end-of-sexp)) to-insert)))
+                      (el-search--ensure-sexp-start) ;skip potentially newly 
added whitespace
+                      (unless replace-all (el-search-hl-sexp (list opoint 
(point))))
+                      (cl-incf nbr-replaced)
+                      (setq replaced-this t))))
+              (if replace-all
+                  (funcall do-replace)
+                (redisplay) ;FIXME: why is this necessary?  Without this, 
read-char-choice recenters!?!
+                (while (not (pcase (if replaced-this
+                                       (read-char-choice "[SPC ! q]  (? for 
help)"
+                                                         '(?\ ?! ?q ?\C-g ?n 
??))
+                                     (read-char-choice
+                                      (concat "Replace this occurrence"
+                                              (if (or (string-match-p "\n" 
to-insert)
+                                                      (< 40 (length 
to-insert)))
+                                                  "" (format " with `%s'" 
to-insert))
+                                              "? "
+                                              (if splice "{splice} " "")
+                                              "[y SPC r ! s q]  (? for help)" )
+                                      '(?y ?n ?r ?\ ?! ?q ?\C-g ?s ??)))
+                              (?r (funcall do-replace)
+                                  nil)
+                              (?y (funcall do-replace)
+                                  t)
+                              ((or ?\ ?n)
+                               (unless replaced-this (cl-incf nbr-skipped))
+                               t)
+                              (?! (unless replaced-this
+                                    (funcall do-replace))
+                                  (setq replace-all t)
+                                  t)
+                              (?s (cl-callf not splice)
+                                  (setq to-insert (funcall 
get-replacement-string))
+                                  nil)
+                              ((or ?q ?\C-g)
+                               (setq done t)
+                               t)
+                              (?? (ignore (read-char 
el-search-search-and-replace-help-string))
+                                  nil)))))
+              (when replacement-contains-another-match
+                (el-search-hl-other-matches matcher))
+              (unless (or done (eobp))
+                (cond
+                 ((not (and replaced-this replacement-contains-another-match))
+                  (el-search--skip-expression nil t))
+                 ((eq skip-matches-in-replacement 'ask)
+                  (if (setq skip-matches-in-replacement
+                            (yes-or-no-p "Match in replacement - always skip? 
"))
+                      (forward-sexp)
+                    (el-search--skip-expression nil t)
+                    (when replace-all
+                      (setq replace-all nil)
+                      (message "Falling back to interactive mode")
+                      (sit-for 3.))))
+                 (skip-matches-in-replacement (forward-sexp))
+                 (t
                   (el-search--skip-expression nil t)
-                  (when replace-all
-                    (setq replace-all nil)
-                    (message "Falling back to interactive mode")
-                    (sit-for 3.))))
-               (skip-matches-in-replacement (forward-sexp))
-               (t
-                (el-search--skip-expression nil t)
-                (message "Replacement contains another match%s"
-                         (if replace-all " - falling back to interactive mode" 
""))
-                (setq replace-all nil)
-                (sit-for 2.)))))))
+                  (message "Replacement contains another match%s"
+                           (if replace-all " - falling back to interactive 
mode" ""))
+                  (setq replace-all nil)
+                  (sit-for 2.))))))))
     (el-search-hl-remove)
     (goto-char opoint)
     (message "Replaced %d matches%s"
@@ -1171,10 +1857,13 @@ Hit any key to proceed."
   (let ((from-input (let ((el-search--initial-mb-contents
                            (or el-search--initial-mb-contents
                                (and (eq last-command 'el-search-pattern)
-                                    (car el-search-history)))))
+                                    (if (equal (read (car 
el-search-pattern-history))
+                                               (read (car 
el-search-query-replace-history)))
+                                        (car el-search-query-replace-history)
+                                      (car el-search-pattern-history))))))
                       (el-search--read-pattern "Query replace pattern: " nil
                                                
'el-search-query-replace-history)))
-        from to)
+        from to read-from read-to)
     (with-temp-buffer
       (emacs-lisp-mode)
       (insert from-input)
@@ -1182,11 +1871,11 @@ Hit any key to proceed."
       (forward-sexp)
       (skip-chars-forward " \t\n")
       ;; FIXME: maybe more sanity tests here...
-      (if (not (looking-at "->"))
+      (if (not (looking-at "->\\|=>\\|>"))
           (setq from from-input
                 to (let ((el-search--initial-mb-contents nil))
                      (el-search--read-pattern "Replace with result of 
evaluation of: " from)))
-        (delete-char 2)
+        (delete-region (point) (match-end 0))
         (goto-char 1)
         (forward-sexp)
         (setq from (buffer-substring 1 (point)))
@@ -1208,8 +1897,14 @@ Hit any key to proceed."
               (indent-region 1 (point-max))
               (buffer-string))
             el-search-query-replace-history))
-    (el-search--pushnew-to-history from 'el-search-history)
-    (list (el-search--wrap-pattern (read from)) (read to) to)))
+    (el-search--pushnew-to-history from 'el-search-pattern-history)
+    (setq read-from (read from))
+    (setq read-to   (read to))
+    (el-search--maybe-warn-about-unquoted-symbol read-from)
+    (when (and (symbolp read-to)
+               (not (el-search--contains-p (el-search--matcher `',read-to) 
read-from)))
+      (el-search--maybe-warn-about-unquoted-symbol read-to))
+    (list read-from read-to to)))
 
 ;;;###autoload
 (defun el-search-query-replace (from-pattern to-expr &optional textual-to)
@@ -1228,11 +1923,12 @@ you can also give an input of the form
 
    FROM-PATTERN -> TO-EXPR
 
-to the first prompt and specify both expressions at once.  This
-format is also used for history entries."
+\(\">\" and \"=>\" are also allowed as a separator) to the first
+prompt and specify both expressions at once.  This format is also
+used for history entries."
   (interactive (el-search-query-replace--read-args))
   (setq this-command 'el-search-query-replace) ;in case we come from isearch
-  (setq el-search-current-pattern from-pattern)
+  (setq el-search--current-pattern from-pattern)
   (barf-if-buffer-read-only)
   (el-search--search-and-replace-pattern from-pattern to-expr nil textual-to))
 
@@ -1244,22 +1940,24 @@ format is also used for history entries."
       (goto-char other-end))
     input))
 
+
+;;;; Invoking from Isearch
+
 ;;;###autoload
 (defun el-search-search-from-isearch ()
-  ;; FIXME: an interesting alternative would be to really integrate it
-  ;; with Isearch, using `isearch-search-fun-function'.
-  ;; Alas, this is not trivial if we want to transfer our optimizations.
+  "Switch to an el-search session from isearch.
+Reuse already given input."
   (interactive)
   (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch))))
     ;; use `call-interactively' so we get recorded in 
`extended-command-history'
     (call-interactively #'el-search-pattern)))
 
-;;;###autoload
-(defun el-search-replace-from-isearch ()
-  (interactive)
-  (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch t))))
-    (call-interactively #'el-search-query-replace)))
-
+;; Is this useful at all?
+;; ;;;###autoload
+;; (defun el-search-replace-from-isearch ()
+;;   (interactive)
+;;   (let ((el-search--initial-mb-contents (concat "'" 
(el-search--take-over-from-isearch t))))
+;;     (call-interactively #'el-search-query-replace)))
 
 
 (provide 'el-search)
diff --git a/packages/excorporate/NEWS b/packages/excorporate/NEWS
index 4bb3a9c..d7d449d 100644
--- a/packages/excorporate/NEWS
+++ b/packages/excorporate/NEWS
@@ -1,5 +1,11 @@
 GNU Emacs Excorporate NEWS -- history of user-visible changes.
 
+* Excorporate 0.7.6
+
+Released 2016-10-05
+
+** Require some NTLM compatibility fixes via updated dependencies
+
 * Excorporate 0.7.5
 
 Released 2016-06-16
diff --git a/packages/excorporate/excorporate.el 
b/packages/excorporate/excorporate.el
index 9f9f504..071da2b 100644
--- a/packages/excorporate/excorporate.el
+++ b/packages/excorporate/excorporate.el
@@ -5,10 +5,10 @@
 ;; Author: Thomas Fitzsimmons <address@hidden>
 ;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Created: 2014-09-19
-;; Version: 0.7.5
+;; Version: 0.7.6
 ;; Keywords: calendar
 ;; Homepage: https://www.fitzsim.org/blog/
-;; Package-Requires: ((emacs "24.1") (fsm "0.2") (soap-client "3.1.1") 
(url-http-ntlm "2.0.2"))
+;; Package-Requires: ((emacs "24.1") (fsm "0.2") (soap-client "3.1.1") 
(url-http-ntlm "2.0.3"))
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -99,6 +99,9 @@
 ;; Erik Hetzner <address@hidden> tested on Office 365 and helped debug
 ;; Office 365 support.
 
+;; Fabio Leimgruber <address@hidden> tested NTLM
+;; authentication against a challenging server configuration.
+
 ;;; Code:
 
 ;; Implementation-visible functions and variables.
diff --git a/packages/excorporate/excorporate.texi 
b/packages/excorporate/excorporate.texi
index 99cb9d1..00bd77f 100644
--- a/packages/excorporate/excorporate.texi
+++ b/packages/excorporate/excorporate.texi
@@ -43,10 +43,10 @@ and modified without restriction.
 Excorporate provides Exchange Web Services (EWS) support for Emacs.
 
 If the Exchange server you access is configured to provide EWS
-support, then there's a 76% chance that Excorporate will enable you to
-retrieve your calendar entries from the comfort of Emacs.
+support, then there's an 83% chance that Excorporate will enable you
+to retrieve your calendar entries from the comfort of Emacs.
 
-The 24% failure rate is because accessing -- in particular,
+The 17% failure rate is because accessing -- in particular,
 authenticating against -- an Exchange server can be challenging.
 
 Known to fail are Kerberos/GSSAPI authentication and accessing the
diff --git a/packages/ggtags/README.rst b/packages/ggtags/README.rst
index eda0427..2f5d982 100644
--- a/packages/ggtags/README.rst
+++ b/packages/ggtags/README.rst
@@ -8,9 +8,8 @@ list-packages``) and is also available on `MELPA
 
 The goal is to make working with GNU Global in Emacs as effortlessly
 and intuitively as possible and to integrate tightly with standard
-emacs packages. ``ggtags.el`` is tested in emacs 24.1, 24.2, 24.3,
-24.4 and trunk. Patches, feature requests and bug reports are welcome.
-Thanks.
+emacs packages. ``ggtags.el`` is tested in Emacs 24 and 25. Patches,
+feature requests and bug reports are welcome. Thanks.
 
 Features
 ~~~~~~~~
@@ -30,7 +29,8 @@ Features
 #. Highlight (definition) tag at point.
 #. Abbreviated display of file names.
 #. Support all Global search backends: ``grep``, ``idutils`` etc.
-#. Support `exuberant ctags <http://ctags.sourceforge.net/>`_ backend.
+#. Support `exuberant ctags <http://ctags.sourceforge.net/>`_ and
+   ``pygments`` backend.
 #. Support all Global's output formats: ``grep``, ``ctags-x``,
    ``cscope`` etc.
 #. Support projects on remote hosts (e.g. via ``tramp``).
@@ -114,8 +114,8 @@ directory. The mode line will display the directory name 
next to the
 buffer name. If point is at a valid definition tag, it is underlined.
 
 ``ggtags`` is similar to the standard ``etags`` package. For example
-these keys ``M-.``, ``M-,``, ``M-*`` and ``C-M-.`` should work as
-expected in ``ggtags-mode``.
+these keys ``M-.``, ``M-,`` and ``C-M-.`` should work as expected in
+``ggtags-mode``.
 
 The following search commands are available:
 
@@ -213,10 +213,10 @@ turned on to facilitate locating the right match.
 
 ``RET``
 
-   Found the right match so exit navigation mode. Resumable by ``M-,``
-   (``tags-loop-continue``).
+   Found the right match so exit navigation mode. Resumable by
+   ``M-x tags-loop-continue``.
 
-``M-*``
+``M-,`` (``M-*`` if Emacs < 25)
 
    Abort and go back to the location where the search was started.
 
@@ -227,8 +227,9 @@ Commands are available from the ``Ggtags`` menu in 
``ggtags-mode``.
 
 ggtags-prev-mark
 
-   Move to the previously (older) visited location. Unlike ``M-*``
-   this doesn't delete the location from the tag ring.
+   Move to the previously (older) visited location. Unlike ``M-,``
+   (``M-*`` if Emacs < 25) this doesn't delete the location from the
+   tag ring.
 
 ggtags-next-mark
 
@@ -313,6 +314,17 @@ Integration with other packages
 NEWS
 ~~~~
 
+[2016-10-02 Sun] 0.8.12
++++++++++++++++++++++++
+
+#. Work with Emacs 25.
+#. ``ggtags-navigation-mode`` is more discreet in displaying lighter
+   when ``ggtags-enable-navigation-keys`` is set to nil.
+#. ``ggtags-make-project`` tries harder to find TAG files respecting
+   ``GTAGSDBPATH``.
+#. Fix error "Selecting deleted buffer"
+   (`#89 <https://github.com/leoliu/ggtags/issues/89>`_).
+   
 [2015-12-15 Tue] 0.8.11
 +++++++++++++++++++++++
 
@@ -378,7 +390,7 @@ NEWS
 [2014-04-12 Sat] 0.8.3
 ++++++++++++++++++++++
 
-#. Tweak mode-line ligter in ``ggtags-navigation-mode``.
+#. Tweak mode-line lighter in ``ggtags-navigation-mode``.
 
 [2014-04-05 Sat] 0.8.2
 ++++++++++++++++++++++
diff --git a/packages/ggtags/ggtags.el b/packages/ggtags/ggtags.el
index aefe3af..b3172fb 100644
--- a/packages/ggtags/ggtags.el
+++ b/packages/ggtags/ggtags.el
@@ -1,9 +1,9 @@
 ;;; ggtags.el --- emacs frontend to GNU Global source code tagging system  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2016  Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <address@hidden>
-;; Version: 0.8.11
+;; Version: 0.8.12
 ;; Keywords: tools, convenience
 ;; Created: 2013-01-29
 ;; URL: https://github.com/leoliu/ggtags
@@ -30,17 +30,21 @@
 ;; Usage:
 ;;
 ;; `ggtags' is similar to the standard `etags' package. These keys
-;; `M-.', `M-,', `M-*' and `C-M-.' should work as expected in
-;; `ggtags-mode'. See the README in https://github.com/leoliu/ggtags
-;; for more details.
+;; `M-.', `M-,' and `C-M-.' should work as expected in `ggtags-mode'.
+;; See the README in https://github.com/leoliu/ggtags for more
+;; details.
 ;;
 ;; All commands are available from the `Ggtags' menu in `ggtags-mode'.
 
-;;; NEWS 0.8.11 (2015-12-15):
+;;; NEWS 0.8.12 (2016-10-02):
 
-;; - `ggtags-highlight-tag-delay' is renamed to `ggtags-highlight-tag'
-;; - Tag highlighting can be disabled by setting
-;;   `ggtags-highlight-tag' to nil.
+;; - Work with Emacs 25
+;; - `ggtags-navigation-mode' is more discreet in displaying lighter
+;;   when `ggtags-enable-navigation-keys' is set to nil
+;; - `ggtags-make-project' tries harder to find TAG files respecting
+;;   `GTAGSDBPATH'
+;; - Fix error "Selecting deleted buffer"
+;;   https://github.com/leoliu/ggtags/issues/89
 ;;
 ;; See full NEWS on https://github.com/leoliu/ggtags#news
 
@@ -91,7 +95,14 @@
   (or (fboundp 'read-only-mode)         ;24.3
       (defalias 'read-only-mode 'toggle-read-only))
   (or (fboundp 'register-read-with-preview) ;24.4
-      (defalias 'register-read-with-preview 'read-char)))
+      (defalias 'register-read-with-preview 'read-char))
+  (or (boundp 'xref--marker-ring)       ;25.1
+      (defvaralias 'xref--marker-ring 'find-tag-marker-ring))
+  (or (fboundp 'xref-push-marker-stack) ;25.1
+      (defun xref-push-marker-stack (&optional m)
+        (ring-insert xref--marker-ring (or m (point-marker)))))
+  (or (fboundp 'xref-pop-marker-stack)
+      (defalias 'xref-pop-marker-stack 'pop-tag-mark)))
 
 (defgroup ggtags nil
   "GNU Global source code tagging system."
@@ -465,32 +476,36 @@ Set to nil to disable tag highlighting."
 
 (defun ggtags-make-project (root)
   (cl-check-type root string)
-  (pcase (nthcdr 5 (file-attributes (expand-file-name "GTAGS" root)))
-    (`(,mtime ,_ ,tag-size . ,_)
-     (let* ((default-directory (file-name-as-directory root))
-            (rtags-size (nth 7 (file-attributes "GRTAGS")))
-            (has-refs
-             (when rtags-size
-               (and (or (> rtags-size (* 32 1024))
-                        (with-demoted-errors "ggtags-make-project: %S"
-                          (not (equal "" (ggtags-process-string "global" 
"-crs")))))
-                    'has-refs)))
-            ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1518
-            (has-path-style
-             (and (ggtags-process-succeed-p "global" "--path-style" "shorter" 
"--help")
-                  'has-path-style))
-            ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1542
-            (has-color (and (ggtags-process-succeed-p "global" "--color" 
"--help")
-                            'has-color)))
-       (puthash default-directory
-                (ggtags-project--make :root default-directory
-                                      :tag-size tag-size
-                                      :has-refs has-refs
-                                      :has-path-style has-path-style
-                                      :has-color has-color
-                                      :mtime (float-time mtime)
-                                      :timestamp (float-time))
-                ggtags-projects)))))
+  (let* ((default-directory (file-name-as-directory root))
+         ;; NOTE: use of GTAGSDBPATH is not recommended. -- GLOBAL(1)
+         ;; ROOT and DB can be different directories due to GTAGSDBPATH.
+         (dbdir (concat (file-remote-p root)
+                        (ggtags-process-string "global" "-p"))))
+    (pcase (nthcdr 5 (file-attributes (expand-file-name "GTAGS" dbdir)))
+      (`(,mtime ,_ ,tag-size . ,_)
+       (let* ((rtags-size (nth 7 (file-attributes (expand-file-name "GRTAGS" 
dbdir))))
+              (has-refs
+               (when rtags-size
+                 (and (or (> rtags-size (* 32 1024))
+                          (with-demoted-errors "ggtags-make-project: %S"
+                            (not (equal "" (ggtags-process-string "global" 
"-crs")))))
+                      'has-refs)))
+              ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1518
+              (has-path-style
+               (and (ggtags-process-succeed-p "global" "--path-style" 
"shorter" "--help")
+                    'has-path-style))
+              ;; http://thread.gmane.org/gmane.comp.gnu.global.bugs/1542
+              (has-color (and (ggtags-process-succeed-p "global" "--color" 
"--help")
+                              'has-color)))
+         (puthash default-directory
+                  (ggtags-project--make :root default-directory
+                                        :tag-size tag-size
+                                        :has-refs has-refs
+                                        :has-path-style has-path-style
+                                        :has-color has-color
+                                        :mtime (float-time mtime)
+                                        :timestamp (float-time))
+                  ggtags-projects))))))
 
 (defun ggtags-project-expired-p (project)
   (or (< (ggtags-project-timestamp project) 0)
@@ -924,7 +939,7 @@ blocking emacs."
 (defun ggtags-global-save-start-marker ()
   (when (markerp ggtags-global-start-marker)
     (setq ggtags-tag-ring-index nil)
-    (ring-insert find-tag-marker-ring ggtags-global-start-marker)
+    (xref-push-marker-stack ggtags-global-start-marker)
     (setq ggtags-global-start-marker t)))
 
 (defun ggtags-global-start (command &optional directory)
@@ -1362,17 +1377,16 @@ Use \\[jump-to-register] to restore the search session."
 (defun ggtags-next-mark (&optional arg)
   "Move to the next (newer) mark in the tag marker ring."
   (interactive)
-  (and (ring-empty-p find-tag-marker-ring) (user-error "Tag ring empty"))
+  (and (ring-empty-p xref--marker-ring) (user-error "Tag ring empty"))
   (setq ggtags-tag-ring-index
         ;; Note `ring-minus1' gets newer item.
         (funcall (if arg #'ring-plus1 #'ring-minus1)
                  (or ggtags-tag-ring-index
-                     (progn
-                       (ring-insert find-tag-marker-ring (point-marker))
-                       0))
-                 (ring-length find-tag-marker-ring)))
-  (let ((m (ring-ref find-tag-marker-ring ggtags-tag-ring-index))
-        (i (- (ring-length find-tag-marker-ring) ggtags-tag-ring-index)))
+                     (progn (xref-push-marker-stack)
+                            0))
+                 (ring-length xref--marker-ring)))
+  (let ((m (ring-ref xref--marker-ring ggtags-tag-ring-index))
+        (i (- (ring-length xref--marker-ring) ggtags-tag-ring-index)))
     (ggtags-echo "%d%s marker%s" i (pcase (mod i 10)
                                      ;; ` required for 24.1 and 24.2
                                      (`1 "st")
@@ -1407,7 +1421,7 @@ commands `next-error' and `previous-error'.
 
 \\{ggtags-view-tag-history-mode-map}"
   (interactive)
-  (and (ring-empty-p find-tag-marker-ring)
+  (and (ring-empty-p xref--marker-ring)
        (user-error "Tag ring empty"))
   (let ((split-window-preferred-function ggtags-split-window-function)
         (inhibit-read-only t))
@@ -1419,8 +1433,8 @@ commands `next-error' and `previous-error'.
     (setq tabulated-list-entries
           ;; Use a function so that revert can work properly.
           (lambda ()
-            (let ((counter (ring-length find-tag-marker-ring))
-                  (elements (or (ring-elements find-tag-marker-ring)
+            (let ((counter (ring-length xref--marker-ring))
+                  (elements (or (ring-elements xref--marker-ring)
                                 (user-error "Tag ring empty")))
                   (action (lambda (_button) (next-error 0)))
                   (get-line (lambda (m)
@@ -1677,11 +1691,18 @@ ggtags: history match invalid, jump to first match 
instead")
             'compilation-message)))
         ;; There are multiple matches so pop up the buffer.
         (and ggtags-navigation-mode (ggtags-global--display-buffer))
-      ;; For the `compilation-auto-jump' in idle timer to run.
-      ;; See also: http://debbugs.gnu.org/13829
-      (sit-for 0)
+      ;; Manually run the `compilation-auto-jump' timer. Hackish but
+      ;; everything else seems unreliable. See:
+      ;;
+      ;; - http://debbugs.gnu.org/13829
+      ;; - http://debbugs.gnu.org/23987
+      ;; - https://github.com/leoliu/ggtags/issues/89
+      ;;
+      (pcase (cl-find 'compilation-auto-jump timer-list :key #'timer--function)
+        (`nil )
+        (timer (timer-event-handler timer)))
       (ggtags-navigation-mode -1)
-      (ggtags-navigation-mode-cleanup buf 0)))))
+      (ggtags-navigation-mode-cleanup buf t)))))
 
 (defvar ggtags-global-mode-font-lock-keywords
   '(("^Global \\(exited 
abnormally\\|interrupt\\|killed\\|terminated\\)\\(?:.*with code 
\\([0-9]+\\)\\)?.*"
@@ -1749,7 +1770,8 @@ ggtags: history match invalid, jump to first match 
instead")
     (define-key map "\M-o" 'ggtags-navigation-visible-mode)
     (define-key map [return] 'ggtags-navigation-mode-done)
     (define-key map "\r" 'ggtags-navigation-mode-done)
-    (define-key map [remap pop-tag-mark] 'ggtags-navigation-mode-abort)
+    (define-key map [remap pop-tag-mark] 'ggtags-navigation-mode-abort) ;Emacs 
24
+    (define-key map [remap xref-pop-marker-stack] 
'ggtags-navigation-mode-abort)
     map))
 
 (defvar ggtags-mode-map-alist
@@ -1804,7 +1826,7 @@ ggtags: history match invalid, jump to first match 
instead")
             (goto-char (match-beginning 0))
           (goto-char orig))))))
 
-(defun ggtags-navigation-mode-cleanup (&optional buf time)
+(defun ggtags-navigation-mode-cleanup (&optional buf kill)
   (let ((buf (or buf ggtags-global-last-buffer)))
     (and (buffer-live-p buf)
          (with-current-buffer buf
@@ -1813,7 +1835,7 @@ ggtags: history match invalid, jump to first match 
instead")
            (when (and (derived-mode-p 'ggtags-global-mode)
                       (get-buffer-window))
              (quit-windows-on (current-buffer)))
-           (and time (run-with-idle-timer time nil #'kill-buffer buf))))))
+           (and kill (kill-buffer buf))))))
 
 (defun ggtags-navigation-mode-done ()
   (interactive)
@@ -1826,13 +1848,13 @@ ggtags: history match invalid, jump to first match 
instead")
   "Abort navigation and return to where the search was started."
   (interactive)
   (ggtags-navigation-mode -1)
-  (ggtags-navigation-mode-cleanup nil 0)
+  (ggtags-navigation-mode-cleanup nil t)
   ;; Run after (ggtags-navigation-mode -1) or
   ;; ggtags-global-start-marker might not have been saved.
   (when (and ggtags-global-start-marker
              (not (markerp ggtags-global-start-marker)))
     (setq ggtags-global-start-marker nil)
-    (pop-tag-mark)))
+    (xref-pop-marker-stack)))
 
 (defun ggtags-navigation-next-file (n)
   (interactive "p")
@@ -1941,7 +1963,12 @@ ggtags: history match invalid, jump to first match 
instead")
   "Ligher for `ggtags-navigation-mode'; set to nil to disable it.")
 
 (define-minor-mode ggtags-navigation-mode nil
-  :lighter ggtags-navigation-mode-lighter
+  ;; If `ggtags-enable-navigation-keys' is set to nil only display the
+  ;; lighter in `ggtags-mode' buffers.
+  ;; See https://github.com/leoliu/ggtags/issues/124
+  :lighter (:eval (and (or ggtags-enable-navigation-keys
+                           ggtags-mode)
+                       ggtags-navigation-mode-lighter))
   :global t
   (if ggtags-navigation-mode
       (progn
@@ -2136,7 +2163,7 @@ When finished invoke CALLBACK in BUFFER with process exit 
status."
     (define-key menu [view-tag]
       '(menu-item "View tag history" ggtags-view-tag-history))
     (define-key menu [pop-mark]
-      '(menu-item "Pop mark" pop-tag-mark
+      '(menu-item "Pop mark" xref-pop-marker-stack
                   :help "Pop to previous mark and destroy it"))
     (define-key menu [next-mark]
       '(menu-item "Next mark" ggtags-next-mark))
@@ -2168,6 +2195,8 @@ When finished invoke CALLBACK in BUFFER with process exit 
status."
       '(menu-item "Show definition" ggtags-show-definition))
     (define-key menu [find-reference]
       '(menu-item "Find reference" ggtags-find-reference))
+    ;; TODO: bind `find-tag-continue' to `M-*' after dropping support
+    ;; for emacs < 25.
     (define-key menu [find-tag-continue]
       '(menu-item "Continue find tag" tags-loop-continue))
     (define-key menu [find-tag]
diff --git a/packages/highlight-escape-sequences/README.md 
b/packages/highlight-escape-sequences/README.md
new file mode 100644
index 0000000..cd91176
--- /dev/null
+++ b/packages/highlight-escape-sequences/README.md
@@ -0,0 +1,15 @@
+Highlight Escape Sequences
+----
+
+![screenie](highlight-escape-sequences.png)
+
+Look inside for instructions.
+
+The theme on the screenshot is
+[espresso](https://github.com/dgutov/espresso-theme), with the
+following addition:
+
+```
+(put 'hes-escape-backslash-face 'face-alias 'font-lock-builtin-face)
+(put 'hes-escape-sequence-face 'face-alias 'font-lock-builtin-face)
+```
diff --git a/packages/highlight-escape-sequences/highlight-escape-sequences.el 
b/packages/highlight-escape-sequences/highlight-escape-sequences.el
new file mode 100644
index 0000000..e829ab3
--- /dev/null
+++ b/packages/highlight-escape-sequences/highlight-escape-sequences.el
@@ -0,0 +1,250 @@
+;;; highlight-escape-sequences.el --- Highlight escape sequences -*- 
lexical-binding: t -*-
+
+;; Copyright (C) 2013, 2015, 2016  Free Software Foundation, Inc.
+
+;; Author:   Dmitry Gutov <address@hidden>
+;;     Pavel Matcula <address@hidden>
+;; URL:      https://github.com/dgutov/highlight-escape-sequences
+;; Keywords: convenience
+;; Version:  0.3
+
+;; This file is part of GNU Emacs.
+
+;; This file 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.
+
+;; This file 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/>.
+
+;;; Commentary:
+
+;; This global minor mode highlights escape sequences in strings and
+;; other kinds of literals with `hes-escape-sequence-face' and with
+;; `hes-escape-backslash-face'. They inherit from faces
+;; `font-lock-regexp-grouping-construct' and
+;; `font-lock-regexp-grouping-backslash' by default, respectively.
+
+;; It currently supports `ruby-mode', `emacs-lisp-mode', JS escape
+;; sequences in both popular modes, C escapes is `c-mode', `c++-mode'
+;; and `objc-mode', and Java escapes in `java-mode' and `clojure-mode'.
+
+;; To enable it elsewhere, customize `hes-mode-alist'.
+
+;; Put this in the init file:
+;;
+;; (hes-mode)
+
+;;; Code:
+
+(defgroup hes-mode nil
+  "Highlight escape sequences."
+  :group 'convenience)
+
+(defface hes-escape-backslash-face
+  '((default :inherit font-lock-regexp-grouping-backslash))
+  "Face to highlight an escape backslash.")
+
+(defface hes-escape-sequence-face
+  '((default :inherit font-lock-regexp-grouping-construct))
+  "Face to highlight an escape sequence.")
+
+(defconst hes-common-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 2 xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     (any "\"\'\\bfnrtv"))))))
+  "Regexp to match the most common escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x00 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by one of \"\'\\bfnrtv.")
+
+(defconst hes-c/c++/objc-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (1+ xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     (and ?U (repeat 8 xdigit))
+                     (any "\"\'\?\\abfnrtv"))))))
+  "Regexp to match C/C++/ObjC escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x0 to \\xF..),
+- unicodes (\\u0000 to \\uFFFF, \\U00000000 to \\UFFFFFFFF),
+- and backslash followed by one of \"\'\?\\abfnrtv.")
+
+(defconst hes-java-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?u (repeat 4 xdigit))
+                     (any "\"\'\\bfnrt"))))))
+  "Regexp to match Java escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by one of \"\'\\bfnrt.")
+
+(defconst hes-js-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 2 xdigit))
+                     (and ?u (repeat 4 xdigit))
+                     ;; (any "\"\'\\bfnrtv")
+                     not-newline))))) ;; deprecated
+  "Regexp to match JavaScript escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x00 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- and backslash followed by anything else.")
+
+(defconst hes-ruby-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or (repeat 1 3 (in "0-7"))
+                     (and ?x (repeat 1 2 xdigit))
+                     (and ?u
+                          (or (repeat 4 xdigit)
+                              (and ?{
+                                   (repeat 1 6 xdigit)
+                                   (0+ (1+ space)
+                                       (repeat 1 6 xdigit))
+                                   ?})))
+                     not-newline)))))
+  "Regexp to match Ruby escape sequences.
+
+Currently handles:
+- octals (\\0 to \\777),
+- hexadecimals (\\x0 to \\xFF),
+- unicodes (\\u0000 to \\uFFFF),
+- unicodes in the \\u{} form,
+- and backslash followed by anything else.
+
+Currently doesn't handle \\C-, \\M-, etc.")
+
+(defconst hes-ruby-escape-sequence-keywords
+  `((,hes-ruby-escape-sequence-re
+     (0 (let* ((state (syntax-ppss))
+               (term (nth 3 state)))
+          (when (or (and (eq term ?')
+                         (member (match-string 2) '("\\" "'")))
+                    (if (fboundp 'ruby-syntax-expansion-allowed-p)
+                        (ruby-syntax-expansion-allowed-p state)
+                      (memq term '(?\" ?/ ?\n ?` t))))
+            ;; TODO: Switch to `add-face-text-property' when we're
+            ;; fine with only supporting Emacs 24.4 and up.
+            (font-lock-prepend-text-property (match-beginning 1) (match-end 1)
+                                             'face 'hes-escape-backslash-face)
+            (font-lock-prepend-text-property (match-beginning 2) (match-end 2)
+                                             'face 'hes-escape-sequence-face)
+            nil))
+        prepend))))
+
+(defconst hes-elisp-escape-sequence-re
+  (rx (submatch
+       (and ?\\ (submatch
+                 (or
+                  (and ?u (repeat 4 xdigit))
+                  (and ?U ?0 ?0 (repeat 6 xdigit))
+                  (and ?x (+ xdigit)) ;; variable number hex digits
+                  (+ (in "0-7"))      ;; variable number octal digits
+                  not-newline)))))
+
+  "Regexp to match Emacs Lisp escape sequences.
+
+Currently handles:
+- unicodes (\\uNNNN and \\U00NNNNNN)
+- hexadecimal (\\x...) and octal (\\0-7), variable number of digits
+- backslash followed by anything else.")
+
+(defun hes-make-simple-escape-sequence-keywords(re)
+  `((,re
+     (1 (when (nth 3 (syntax-ppss))
+          'hes-escape-backslash-face)
+        prepend)
+     (2 (when (nth 3 (syntax-ppss))
+          'hes-escape-sequence-face)
+        prepend))))
+
+(defcustom hes-mode-alist
+  `((c-mode          . ,hes-c/c++/objc-escape-sequence-re)
+    (c++-mode        . ,hes-c/c++/objc-escape-sequence-re)
+    (objc-mode       . ,hes-c/c++/objc-escape-sequence-re)
+    (java-mode       . ,hes-java-escape-sequence-re)
+    (clojure-mode    . ,hes-java-escape-sequence-re)
+    (js-mode         . ,hes-js-escape-sequence-re)
+    (js2-mode        . ,hes-js-escape-sequence-re)
+    (ruby-mode       . ,hes-ruby-escape-sequence-keywords)
+    (emacs-lisp-mode . ,hes-elisp-escape-sequence-re))
+  "Alist of regexps or `font-lock-keywords' elements for major modes."
+  :type '(repeat function)
+  :set (lambda (symbol value)
+         (if (bound-and-true-p hes-mode)
+             (progn
+               (hes-mode -1)
+               (set-default symbol value)
+               (hes-mode 1))
+           (set-default symbol value))))
+
+;;;###autoload
+(defun turn-on-hes-mode()
+  "Turn on highlighting of escape sequences."
+  (interactive)
+  (dolist (mode hes-mode-alist)
+    (if (atom mode)
+        (font-lock-add-keywords
+         mode
+         (hes-make-simple-escape-sequence-keywords 
hes-common-escape-sequence-re)
+         'append)
+      (when (stringp (cdr mode))
+        (font-lock-add-keywords
+         (car mode)
+         (hes-make-simple-escape-sequence-keywords (cdr mode))
+         'append))
+      (when (listp (cdr mode))
+        (font-lock-add-keywords (car mode) (cdr mode) 'append)))))
+
+;;;###autoload
+(defun turn-off-hes-mode()
+  "Turn off highlighting of escape sequences"
+  (interactive)
+  (dolist (mode hes-mode-alist)
+    (if (atom mode)
+        (font-lock-remove-keywords
+         mode
+         (hes-make-simple-escape-sequence-keywords 
hes-common-escape-sequence-re))
+      (when (stringp (cdr mode))
+        (font-lock-remove-keywords
+         (car mode)
+         (hes-make-simple-escape-sequence-keywords (cdr mode))))
+      (when (listp (cdr mode))
+        (font-lock-remove-keywords (car mode) (cdr mode))))))
+
+;;;###autoload
+(define-minor-mode hes-mode
+  "Toggle highlighting of escape sequences."
+  :lighter "" :global t
+  (if hes-mode
+      (turn-on-hes-mode)
+    (turn-off-hes-mode)))
+
+(provide 'highlight-escape-sequences)
+
+;;; highlight-escape-sequences.el ends here
diff --git a/packages/highlight-escape-sequences/highlight-escape-sequences.png 
b/packages/highlight-escape-sequences/highlight-escape-sequences.png
new file mode 100644
index 0000000..6f0f1de
Binary files /dev/null and 
b/packages/highlight-escape-sequences/highlight-escape-sequences.png differ
diff --git a/packages/metar/metar.el b/packages/metar/metar.el
index b6989ea..570e6b1 100644
--- a/packages/metar/metar.el
+++ b/packages/metar/metar.el
@@ -83,7 +83,7 @@
                             (const :tag "Degree Kelvin" degK)
                             (const :tag "Degree Fahrenheit" degF)))))
 
-(defcustom metar-stations-info-url "http://weather.noaa.gov/data/nsd_bbsss.txt";
+(defcustom metar-stations-info-url 
"http://tgftp.nws.noaa.gov/data/nsd_cccc.txt";
   "URL to use for retrieving station meta information."
   :group 'metar
   :type 'string)
@@ -117,23 +117,21 @@ If this variable is nil, the information is retrieved 
from the Internet."
                              (split-string entry ";"))
                            (split-string (buffer-string) "\n")))))
        (setq metar-stations nil)
-       (while data
-         (when (and (nth 7 (car data)) (nth 8 (car data))
-                    (not (string= (nth 2 (car data)) "----")))
+       (dolist (entry data)
+         (when (and (nth 7 entry) (nth 8 entry)
+                    (not (string= (nth 0 entry) "----")))
            (setq metar-stations
                  (append
-                  (let ((item (car data)))
-                    (list
-                     (list (cons 'code (nth 2 item))
-                           (cons 'name (nth 3 item))
-                           (cons 'country (nth 5 item))
-                           (cons 'latitude
-                                 (metar-station-convert-dms-to-deg (nth 7 
item)))
-                           (cons 'longitude
-                                 (metar-station-convert-dms-to-deg (nth 8 
item)))
-                           (cons 'altitude (string-to-number (nth 12 item))))))
-                  metar-stations)))
-         (setq data (cdr data)))
+                  (list
+                    (list (cons 'code (nth 0 entry))
+                          (cons 'name (nth 3 entry))
+                          (cons 'country (nth 5 entry))
+                          (cons 'latitude
+                                (metar-station-convert-dms-to-deg (nth 7 
entry)))
+                          (cons 'longitude
+                                (metar-station-convert-dms-to-deg (nth 8 
entry)))
+                          (cons 'altitude (string-to-number (nth 11 entry)))))
+                  metar-stations))))
        ;; (unless metar-timer
        ;;   (setq metar-timer
        ;;      (run-with-timer 600 nil (lambda () (setq metar-stations nil)))))
@@ -281,7 +279,7 @@ It must have the signature of `math-convert-units', which 
is the default."
                                                  pure))))
 
 (defcustom metar-url
-  "http://weather.noaa.gov/pub/data/observations/metar/stations/%s.TXT";
+  "http://tgftp.nws.noaa.gov/data/observations/metar/stations/%s.TXT";
   "URL used to fetch station specific information.
 %s is replaced with the 4 letter station code."
   :group 'metar
diff --git a/packages/nameless/nameless.el b/packages/nameless/nameless.el
index 3f21756..eede973 100644
--- a/packages/nameless/nameless.el
+++ b/packages/nameless/nameless.el
@@ -5,7 +5,7 @@
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: https://github.com/Malabarba/nameless
 ;; Keywords: convenience, lisp
-;; Version: 1.0.1
+;; Version: 1.0.2
 ;; Package-Requires: ((emacs "24.4"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -229,7 +229,9 @@ configured, or if `nameless-current-name' is nil."
         (user-error "No name for current buffer, see 
`nameless-current-name'")))))
 
 (defun nameless-insert-name-or-self-insert (&optional self-insert)
-  "Insert the name of current package, with a hyphen."
+  "Insert the name of current package, with a hyphen.
+If point is in an argument list, or if we're typing an escaped
+character, insert the current character literally instead."
   (interactive "P")
   (let ((l (point)))
     (call-interactively #'self-insert-command)
diff --git a/packages/parsec/.gitignore b/packages/parsec/.gitignore
new file mode 100644
index 0000000..4206e73
--- /dev/null
+++ b/packages/parsec/.gitignore
@@ -0,0 +1,3 @@
+*.hs
+*.hi
+*.o
diff --git a/packages/parsec/README.org b/packages/parsec/README.org
new file mode 100644
index 0000000..53d08db
--- /dev/null
+++ b/packages/parsec/README.org
@@ -0,0 +1,378 @@
+#+TITLE: parsec.el
+
+A parser combinator library for Emacs Lisp similar to Haskell's Parsec library.
+
+* Overview
+
+This work is based on [[https://github.com/jwiegley/][John Wiegley]]'s 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]]. The original 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]] is awesome,
+but I found following problems when I tried to use it:
+
+- It only contains a very limited set of combinators
+- Some of its functions (combinators) have different behaviors than their
+  Haskell counterparts
+- It can't show error messages when parsing fails
+
+So I decided to make a new library on top of it. This library, however, 
contains
+most of the parser combinators in =Text.Parsec.Combinator=, which should be
+enough in most use cases. Of course more combinators can be added if necessary!
+Most of the parser combinators have the same behavior as their Haskell
+counterparts. =parsec.el= also comes with a simple error handling mechanism so
+that it can display an error message showing how the parser fails.
+
+So we can
+
+- use these parser combinators to write parsers easily from scratch in Emacs
+  Lisp like what we can do in Haskell
+- port existing Haskell program using Parsec to its equivalent Emacs Lisp
+  program easily
+
+* Parsing Functions & Parser Combinators
+
+  We compare the functions and macros defined in this library with their 
Haskell
+  counterparts, assuming you're already familiar with Haskell's Parsec. If you
+  don't have any experience with parser combinators, look at the docstrings of
+  these functions and macros and try them to see the results! They are really
+  easy to learn and use!
+
+  The *Usage* column for each function/combinator in the following tables is
+  much simplified. Check the docstring of the function/combinator to see the
+  full description.
+
+** Basic Parsing Functions
+   These parsing functions are used as the basic building block for a parser. 
By
+   default, their return value is a *string*.
+
+  | parsec.el              | Haskell's Parsec | Usage                          
                       |
+  
|------------------------+------------------+-------------------------------------------------------|
+  | parsec-ch              | char             | parse a character              
                       |
+  | parsec-any-ch          | anyChar          | parse an arbitrary character   
                       |
+  | parsec-satisfy         | satisfy          | parse a character satisfying a 
predicate              |
+  | parsec-newline         | newline          | parse '\n'                     
                       |
+  | parsec-crlf            | crlf             | parse '\r\n'                   
                       |
+  | parsec-eol             | eol              | parse newline or CRLF          
                       |
+  | parsec-eof, parsec-eob | eof              | parse end of file              
                       |
+  | parsec-eol-or-eof      | *N/A*            | parse EOL or EOL               
                       |
+  | parsec-re              | *N/A*            | parse using a regular 
expression                      |
+  | parsec-one-of          | oneOf            | parse one of the characters    
                       |
+  | parsec-none-of         | noneOf           | parse any character other than 
the supplied ones      |
+  | parsec-str             | *N/A*            | parse a string but consume 
input only when successful |
+  | parsec-string          | string           | parse a string and consume 
input for partial matches  |
+  | parsec-num             | *N/A*            | parse a number                 
                       |
+  | parsec-letter          | letter           | parse a letter                 
                       |
+  | parsec-digit           | digit            | parse a digit                  
                       |
+
+  Note:
+  - =parsec-str= and =parsec-string= are different. =parsec-string= behaves the
+    same as =string= in Haskell, and =parsec-str= is more like combining
+    =string= and =try= in Haskell. Personally I found =parsec-str= easier to 
use
+    because =parsec-str= is "atomic", which is similar to =parsec-ch=.
+  - Use the power of regular expressions provided by =parsec-re= and simplify 
the parser!
+
+** Parser Combinators
+   These combinators can be used to combine different parsers.
+
+  | parsec.el                 | Haskell's Parsec | Usage                       
                                 |
+  
|---------------------------+------------------+--------------------------------------------------------------|
+  | parsec-or                 | choice           | try the parsers until one 
succeeds                           |
+  | parsec-try                | try              | try parser and consume no 
input when an error occurs         |
+  | parsec-lookahead          | lookahead        | try parser and consume no 
input when successful              |
+  | parsec-peek               | try && lookahead | try parser without 
comsuming any input                       |
+  | parsec-peek-p             | try && lookahead | same as parsec-peek except 
the return value for failure      |
+  | parsec-with-error-message | <?> (similar)    | use the new error message 
when an error occurs               |
+  | parsec-many               | many             | apply the parser zero or 
more times                          |
+  | parsec-many1              | many1            | apply the parser one or 
more times                           |
+  | parsec-many-till          | manyTill         | apply parser zero or more 
times until end succeeds           |
+  | parsec-until              | *N/A*            | parse until end succeeds    
                                 |
+  | parsec-not-followed-by    | notFollowedBy    | succeed when the parser 
fails                                |
+  | parsec-endby              | endby            | apply parser zero or more 
times, separated and ended by end  |
+  | parsec-sepby              | sepby            | apply parser zero or more 
times, separated by sep            |
+  | parsec-between            | between          | apply parser between open 
and close                          |
+  | parsec-count              | count            | apply parser n times        
                                 |
+  | parsec-option             | option           | apply parser, if it fails, 
return opt                        |
+  | parsec-optional           | *N/A*            | apply parser zero or one 
time and return the result          |
+  | parsec-optional*          | optional         | apply parser zero or one 
time and discard the result         |
+  | parsec-optional-maybe     | optionMaybe      | apply parser zero or one 
time and return the result in Maybe |
+
+  Note:
+  - =parsec-or= can also be used to replace =<|>=.
+  - =parsec-with-error-message= is slightly different from =<?>=. It will
+    replace the error message even when the input is consumed.
+  - By default, =parsec-many-till= behaves as Haskell's =manyTill=. However,
+    =parsec-many-till= and =parsec-until= can accept an optional argument to
+    specify which part(s) to be returned. You can use =:both= or =:end= as the
+    optional argument to change the default behavior. See the docstrings for
+    more information.
+
+** Parser Utilities
+   These utilities can be used together with parser combinators to build a
+   parser and ease the translation process if you're trying to port an existing
+   Haskell program.
+
+  | parsec.el                        | Haskell's Parsec | Usage                
                                   |
+  
|----------------------------------+------------------+---------------------------------------------------------|
+  | parsec-and                       | do block         | try all parsers and 
return the last result              |
+  | parsec-return                    | do block         | try all parsers and 
return the first result             |
+  | parsec-ensure                    | *N/A*            | quit the parsing 
when an error occurs                   |
+  | parsec-ensure-with-error-message | *N/A*            | quit the parsing 
when an error occurs with new message  |
+  | parsec-collect                   | sequence         | try all parsers and 
collect the results into a list     |
+  | parsec-collect*                  | *N/A*            | try all parsers and 
collect non-nil results into a list |
+  | parsec-start                     | parse            | entry point          
                                   |
+  | parsec-parse                     | parse            | entry point (same as 
parsec-start)                      |
+  | parsec-with-input                | parse            | perform parsers on 
input                                |
+  | parsec-from-maybe                | fromMaybe        | retrieve value from 
Maybe                               |
+  | parsec-maybe-p                   | *N/A*            | is a Maybe value or 
not                                 |
+  | parsec-query                     | *N/A*            | change the parser's 
return value                        |
+
+** Variants that Return a String
+
+   By default, the macros/functions that return multiple values will put the
+   values into a list. These macros/functions are:
+   - =parsec-many=
+   - =parsec-many1=
+   - =parsec-many-till=
+   - =parsec-until=
+   - =parsec-count=
+   - =parsec-collect= and =parsec-collect*=
+
+   They all have a variant that returns a string by concatenating the results 
in
+   the list:
+   - =parsec-many-as-string= or =parsec-many-s=
+   - =parsec-many1-as-string= or =parsec-many1-s=
+   - =parsec-many-till-as-string= or =parsec-many-till-s=
+   - =parsec-until-as-string= or =parsec-until-s=
+   - =parsec-collect-as-string= or =parsec-collect-s=
+   - =parsec-count-as-string= or =parsec-count-s=
+
+   The =*-s= and =*-as-string= variants are the same, except the =*-s= variants
+   have a shorter name. Using these =*-s= functions are recommended if you're
+   dealing with strings very frequently in your code. These variants accept the
+   same arguments and have the same behavior as their original counterpart that
+   returns a list. The only difference is the return value.
+* Code Examples
+  Some very simple examples are given here. You can see many code examples in
+  the test files in this GitHub repo.
+
+  The following code extract the "hello" from the comment:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "/* hello */"
+    (parsec-string "/*")
+    (parsec-many-till-as-string (parsec-any-ch)
+                                (parsec-try
+                                 (parsec-string "*/"))))
+  #+END_SRC
+
+  The following Haskell program does a similar thing:
+  #+BEGIN_SRC haskell
+  import           Text.Parsec
+
+  main :: IO ()
+  main = print $ parse p "" "/* hello */"
+    where
+      p = do string "/*"
+             manyTill anyChar (try (string "*/"))
+  #+END_SRC
+
+  The following code returns the "aeiou" before "end":
+  #+BEGIN_SRC elisp
+  (parsec-with-input "if aeiou end"
+    (parsec-str "if ")
+    (parsec-return
+        (parsec-many-as-string (parsec-one-of ?a ?e ?i ?o ?u))
+      (parsec-str " end")))
+  #+END_SRC
+
+* Write a Parser: a Simple CSV Parser
+  You can find the code in =examples/simple-csv-parser.el=. The code is based
+  on the Haskell code in 
[[http://book.realworldhaskell.org/read/using-parsec.html][Using Parsec]].
+
+  An end-of-line should be a string =\n=. We use =(parsec-str "\n")= to parse 
it
+  (Note that since =\n= is also one character, =(parsec-ch ?\n)= also works).
+  Some files may not contain a newline at the end, but we can view end-of-file
+  as the end-of-line for the last line, and use =parsec-eof= (or =parsec-eob=)
+  to parse the end-of-file. We use =parsec-or= to combine these two 
combinators:
+  #+BEGIN_SRC elisp
+  (defun s-csv-eol ()
+    (parsec-or (parsec-str "\n")
+               (parsec-eof)))
+  #+END_SRC
+
+  A CSV file contains many lines and ends with an end-of-file. Use
+  =parsec-return= to return the result of the first parser as the result.
+  #+BEGIN_SRC elisp
+  (defun s-csv-file ()
+    (parsec-return (parsec-many (s-csv-line))
+      (parsec-eof)))
+  #+END_SRC
+
+  A CSV line contains many CSV cells and ends with an end-of-line, and we
+  should return the cells as the results:
+  #+BEGIN_SRC elisp
+  (defun s-csv-line ()
+    (parsec-return (s-csv-cells)
+      (s-csv-eol)))
+  #+END_SRC
+
+  CSV cells is a list, containing the first cell and the remaining cells:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cells ()
+    (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+  #+END_SRC
+
+  A CSV cell consists any character that is not =,= or =\n=, and we use the
+  =parsec-many-as-string= variant to return the whole content as a string
+  instead of a list of single-character strings:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cell-content ()
+    (parsec-many-as-string (parsec-none-of ?, ?\n)))
+  #+END_SRC
+
+  For the remaining cells: if followed by a comma =,=, we try to parse more csv
+  cells. Otherwise, we should return the =nil=:
+  #+BEGIN_SRC elisp
+  (defun s-csv-remaining-cells ()
+    (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+  #+END_SRC
+
+  OK. Our parser is almost done. To begin parsing the content in buffer =foo=,
+  you need to wrap the parser inside =parsec-start= (or =parsec-parse=):
+  #+BEGIN_SRC elisp
+  (with-current-buffer "foo"
+    (goto-char (point-min))
+    (parsec-parse
+     (s-csv-file)))
+  #+END_SRC
+
+  If you want to parse a string instead, we provide a simple wrapper macro
+  =parsec-with-input=, and you feed a string as the input and put arbitraty
+  parsers inside the macro body. =parsec-start= or =parsec-parse= is not 
needed.
+  #+BEGIN_SRC elisp
+  (parsec-with-input "a1,b1,c1\na2,b2,c2"
+    (s-csv-file))
+  #+END_SRC
+
+  The above code returns:
+  #+BEGIN_SRC elisp
+  (("a1" "b1" "c1") ("a2" "b2" "c2"))
+  #+END_SRC
+
+  Note that if we replace =parsec-many-as-string= with =parsec-many= in
+  =s-csv-cell-content=:
+  #+BEGIN_SRC elisp
+  (defun s-csv-cell-content ()
+    (parsec-many (parsec-none-of ?, ?\n)))
+  #+END_SRC
+
+  The result would be:
+  #+BEGIN_SRC elisp
+  ((("a" "1") ("b" "1") ("c" "1")) (("a" "2") ("b" "2") ("c" "2")))
+  #+END_SRC
+
+* More Parser Examples
+  I translate some Haskell Parsec examples into Emacs Lisp using =parsec.el=.
+  You can see from these examples that it is very easy to write parsers using
+  =parsec.el=, and if you know haskell, you can see that basically I just
+  translate the Haskell into Emacs Lisp one by one because most of them are 
just
+  the same!
+
+  You can find five examples under the =examples/= directory.
+
+  Three of the examples are taken from the chapter 
[[http://book.realworldhaskell.org/read/using-parsec.html][Using Parsec]] in 
the book of
+  [[http://book.realworldhaskell.org/read/][Real World Haskell]]:
+  - =simple-csv-parser.el=: a simple csv parser with no support for quoted
+    cells, as explained in previous section.
+  - =full-csv-parser.el=: a full csv parser
+  - =url-str-parser.el=: parser parameters in URL
+
+  =pjson.el= is a translation of Haskell's 
[[https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html][json
 library using Parsec]].
+
+  =scheme.el= is a much simplified Scheme parser based on 
[[https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/][Write 
Yourself a
+  Scheme in 48 Hours]].
+
+  They're really simple but you can see how this library works!
+
+* Change the Return Values using =parsec-query=
+  Parsing has side-effects such as forwarding the current point. In the 
original
+  [[https://github.com/jwiegley/emacs-pl][emacs-pl]], you can specify some 
optional arguments to some parsing functions
+  (=pl-ch=, =pl-re= etc.) to change the return values. In =parsec.el=, these
+  functions don't have such a behavior. Instead, we provide a unified interface
+  =parsec-query=, which accepts any parser, and changes the return value of the
+  parser.
+
+  You can speicify following arguments:
+  #+BEGIN_EXAMPLE
+  :beg      --> return the point before applying the PARSER
+  :end      --> return the point after applying the PARSER
+  :nil      --> return nil
+  :groups N --> return Nth group for `parsec-re'."
+  #+END_EXAMPLE
+
+  So instead of returning "b" as the result, the following code returns 2:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "ab"
+    (parsec-ch ?a)
+    (parsec-query (parsec-ch ?b) :beg))
+  #+END_SRC
+
+  Returning a point means that you can also incorporate =parsec.el= with Emacs
+  Lisp functions that can operate on points/regions, such as =goto-char= and
+  =kill-region=.
+
+  =:group= can be specified when using =parsec-re=:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "ab"
+    (parsec-query (parsec-re "\\(a\\)\\(b\\)") :group 2))
+  #+END_SRC
+
+  The above code will return "b" instead of "ab".
+* Error Messages
+
+  =parsec.el= implements a simple error handling mechanism. When an error
+  happens, it will show how the parser fails.
+
+  For example, the following code fails:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "aac"
+    (parsec-count 2 (parsec-ch ?a))
+    (parsec-ch ?b))
+  #+END_SRC
+
+  The return value is:
+  #+BEGIN_SRC elisp
+  (parsec-error . "Found \"c\" -> Expected \"b\"")
+  #+END_SRC
+
+  This also works when parser combinators fail:
+  #+BEGIN_SRC elisp
+  (parsec-with-input "a"
+    (parsec-or (parsec-ch ?b)
+               (parsec-ch ?c)))
+  #+END_SRC
+
+  The return value is:
+  #+BEGIN_SRC elisp
+  (parsec-error . "None of the parsers succeeds:
+       Found \"a\" -> Expected \"c\"
+       Found \"a\" -> Expected \"b\"")
+  #+END_SRC
+
+  If an error occurs, the return value is a cons cell that contains the error
+  message in its =cdr=. Compared to Haskell's Parsec, it's really simple, but 
at
+  least the error message could tell us some information. Yeah, not perfect but
+  usable.
+
+  To test whether a parser returns an error, use =parsec-error-p=. If it 
returns
+  an error, you can use =parsec-error-str= to retrieve the error message as a
+  string.
+
+  You can decide what to do based on the return value of a parser:
+  #+BEGIN_SRC elisp
+  (let ((res (parsec-with-input "hello"
+               (parsec-str "world"))))
+    (if (parsec-error-p res)
+        (message "Parser failed:\n%s" (parsec-error-str res))
+      (message "Parser succeeded by returning %s" res)))
+  #+END_SRC
+
+* Acknowledgement
+  - Daan Leijen for Haskell's Parsec
+  - [[https://github.com/jwiegley/][John Wiegley]] for 
[[https://github.com/jwiegley/emacs-pl][emacs-pl]]
diff --git a/packages/parsec/examples/.nosearch 
b/packages/parsec/examples/.nosearch
new file mode 100644
index 0000000..e69de29
diff --git a/packages/parsec/examples/full-csv-parser-tests.el 
b/packages/parsec/examples/full-csv-parser-tests.el
new file mode 100644
index 0000000..fdf4c5e
--- /dev/null
+++ b/packages/parsec/examples/full-csv-parser-tests.el
@@ -0,0 +1,51 @@
+;;; full-csv-parser-tests.el --- Tests for full-csv-parser  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'full-csv-parser)
+
+(ert-deftest test-full-csv ()
+  (should
+   (equal
+    (parse-csv "\"a,1,s\",b,\r\nd,e,f")
+    '(("a,1,s" "b" "")
+      ("d" "e" "f"))))
+  (should
+   (equal
+    (parse-csv "\"e\"\",f")
+    (parsec-error-new-2 "\"" "`EOF'")))
+  (should
+   (equal
+    (parse-csv "\"a,1,\r\n")
+    (parsec-error-new-2 "\"" "`EOF'")))
+  (should
+   (equal
+    (parse-csv "\"a,1,\",b,\r\nd,,f")
+    '(("a,1," "b" "")
+      ("d" "" "f")))))
+
+(provide 'full-csv-parser-tests)
+;;; full-csv-parser-tests.el ends here
diff --git a/packages/parsec/examples/full-csv-parser.el 
b/packages/parsec/examples/full-csv-parser.el
new file mode 100644
index 0000000..156fbd9
--- /dev/null
+++ b/packages/parsec/examples/full-csv-parser.el
@@ -0,0 +1,61 @@
+;;; full-csv-parser.el --- Sample csv parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+(defun csv-file ()
+  (parsec-start
+   (parsec-return (parsec-endby (csv-line) (csv-eol))
+     (parsec-eob))))
+
+(defun csv-line ()
+  (parsec-sepby (csv-cell) (parsec-ch ?,)))
+
+(defun csv-cell ()
+  (parsec-or (csv-quoted-cell) (parsec-many-as-string
+                                (parsec-none-of ?, ?\r ?\n))))
+
+(defun csv-quoted-cell ()
+  (parsec-and (parsec-ch ?\")
+              (parsec-return (parsec-many-as-string (csv-quoted-char))
+                (parsec-ch ?\"))))
+
+(defun csv-quoted-char ()
+  (parsec-or (parsec-re "[^\"]")
+             (parsec-and (parsec-str "\"\"")
+                         "\"")))
+
+(defun csv-eol ()
+  (parsec-or (parsec-str "\n\r")
+             (parsec-str "\r\n")
+             (parsec-str "\n")
+             (parsec-str "\r")
+             (parsec-eob)))
+
+(defun parse-csv (input)
+  (parsec-with-input input
+    (csv-file)))
+
+(provide 'full-csv-parser)
+;;; full-csv-parser.el ends here
diff --git a/packages/parsec/examples/pjson-tests.el 
b/packages/parsec/examples/pjson-tests.el
new file mode 100644
index 0000000..7c7f6ed
--- /dev/null
+++ b/packages/parsec/examples/pjson-tests.el
@@ -0,0 +1,102 @@
+;;; pjson-tests.el --- Test for parsec json parser   -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'pjson)
+
+(ert-deftest test-pjson-number ()
+  (should
+   (equal
+    (parsec-with-input "123"
+      (pjson-number))
+    123)))
+
+(ert-deftest test-pjson-boolean ()
+  (should
+   (equal
+    (parsec-with-input "false"
+      (pjson-boolean))
+    nil)))
+
+(ert-deftest test-pjson-null ()
+  (should
+   (equal
+    (parsec-with-input "null"
+      (pjson-null))
+    nil)))
+
+(ert-deftest test-pjson-array ()
+  (should
+   (equal
+    (parsec-with-input "[1,true,1,\"abc\",[1],null)"
+      (pjson-array))
+    (parsec-error-new-2 "]" ")")))
+  (should
+   (equal
+    (parsec-with-input "[1,true,1,\"abc\",[1],null]"
+      (pjson-array))
+    (vector 1 t 1 "abc"
+            (vector 1)
+            nil))))
+(ert-deftest test-pjson-string ()
+  (should
+   (equal
+    (parsec-with-input "\"asdf\""
+      (pjson-string))
+    "asdf")))
+
+(ert-deftest test-pjson-object ()
+  (should
+   (equal
+    (parsec-with-input "{\"a\" :1, \"b\":2, \"c\":[1,true] }"
+      (pjson-object))
+    '(("a" . 1)
+      ("b" . 2)
+      ("c" .
+       [1 t])))))
+
+(ert-deftest test-pjson-jvalue ()
+  (should
+   (equal
+    (parsec-with-input "[false]" (pjson-jvalue))
+    (vector nil))))
+
+(ert-deftest test-pjson-parse ()
+  (should
+   (equal
+    (pjson-parse "{\"a\" :1, \"b\":2, \"c\":[1,{\"d\":null}]}")
+    '(("a" . 1)
+      ("b" . 2)
+      ("c" .
+       [1
+        (("d"))]))))
+  (should
+   (equal
+    (pjson-parse  "{\"a\" :1, \"b\":2, [{ \"c\":[1,true] }]}")
+    (parsec-error-new-2 "\"" "["))))
+
+(provide 'pjson-tests)
+;;; pjson-tests.el ends here
diff --git a/packages/parsec/examples/pjson.el 
b/packages/parsec/examples/pjson.el
new file mode 100644
index 0000000..f34f4d9
--- /dev/null
+++ b/packages/parsec/examples/pjson.el
@@ -0,0 +1,124 @@
+;;; pjson.el --- JSON parser using parsec.el         -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: 
https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html
+
+;;; Code:
+
+(defvar pjson-special-chars
+  '((?\" . ?\")
+    (?\\ . ?\\)
+    (?/ . ?/)
+    (?b . ?\b)
+    (?f . ?\f)
+    (?n . ?\n)
+    (?r . ?\r)
+    (?t . ?\t))
+  "Characters which are escaped in JSON, with their elisp counterparts.")
+
+(defsubst pjson-spaces ()
+  (parsec-many-as-string
+   (parsec-re "[[:space:]\r\n]")))
+
+(defmacro pjson-tok (parser)
+  `(parsec-return ,parser
+     (pjson-spaces)))
+
+(defun pjson-value ()
+  (parsec-and
+    (pjson-spaces)
+    (pjson-jvaule)))
+
+(defun pjson-jvalue ()
+  (parsec-or (pjson-null)
+             (pjson-boolean)
+             (pjson-number)
+             (pjson-string)
+             (pjson-array)
+             (pjson-object)))
+
+(defsubst pjson-null ()
+  (parsec-and
+    (pjson-tok (parsec-str "null"))
+    nil))
+
+(defsubst pjson-boolean ()
+  (parsec-or (parsec-and
+               (pjson-tok (parsec-str "true"))
+               t)
+             (parsec-and
+               (pjson-tok (parsec-str "false"))
+               nil)))
+
+(defsubst pjson-array ()
+  (apply #'vector
+         (parsec-between (pjson-tok (parsec-ch ?\[))
+                         (pjson-tok (parsec-ch ?\]))
+                         (parsec-sepby
+                          (pjson-jvalue)
+                          (pjson-tok (parsec-ch ?,))))))
+
+(defun pjson-char ()
+  (parsec-or
+   (parsec-and (parsec-ch ?\\) (pjson-esc))
+   (parsec-none-of ?\" ?\\)))
+
+(defun pjson-esc ()
+  (parsec-or
+   (assoc-default
+    (parsec-satisfy (lambda (x) (assq x pjson-special-chars)))
+    pjson-special-chars)
+   (parsec-and (parsec-ch ?u)
+               (pjson-uni))))
+
+(defun pjson-uni ()
+  (format "%c" (string-to-number
+                (parsec-re "[0-9a-zA-z]\\{4\\}")
+                16)))
+
+(defsubst pjson-string ()
+  (parsec-between (pjson-tok (parsec-ch ?\"))
+                  (pjson-tok (parsec-ch ?\"))
+                  (parsec-many-as-string (pjson-char))))
+
+(defun pjson-field ()
+  (cons (parsec-return (pjson-string)
+          (pjson-tok (parsec-ch ?:)))
+        (pjson-jvalue)))
+
+(defun pjson-object ()
+  (parsec-between (pjson-tok (parsec-ch ?\{))
+                  (pjson-tok (parsec-ch ?\}))
+                  (parsec-sepby
+                   (pjson-field)
+                   (pjson-tok (parsec-ch ?,)))))
+
+(defun pjson-number ()
+  (pjson-tok (string-to-number
+              (parsec-re 
"\\+?\\([0-9]+\\)\\(\\.[0-9]+\\)?\\([Ee][+-]?[0-9]+\\)?"))))
+
+(defun pjson-parse (input)
+  (parsec-with-input input
+    (pjson-object)))
+
+(provide 'pjson)
+;;; pjson.el ends here
diff --git a/packages/parsec/examples/scheme-tests.el 
b/packages/parsec/examples/scheme-tests.el
new file mode 100644
index 0000000..9b30ff2
--- /dev/null
+++ b/packages/parsec/examples/scheme-tests.el
@@ -0,0 +1,88 @@
+;;; scheme-tests.el --- Tests for scheme parser      -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'scheme)
+
+(ert-deftest test-scheme-number ()
+  (should
+   (equal (scheme-read "25")
+          (scheme-number 25))))
+
+(ert-deftest test-scheme-string ()
+  (should
+   (equal
+    (scheme-read "\"This is a string\"")
+    "This is a string")))
+
+(ert-deftest test-scheme-list ()
+  (should
+   (equal
+    (scheme-read "(symbol)")
+    '(List
+      (Atom . "symbol"))))
+  (should
+   (equal
+    (scheme-read "(a test)")
+    '(List
+      (Atom . "a")
+      (Atom . "test")))))
+
+(ert-deftest test-scheme-dotted-list ()
+  (should
+   (equal
+    (scheme-read "(a . test)")
+    '(DottedList
+      ((Atom . "a"))
+      Atom . "test"))))
+
+(ert-deftest test-scheme-nested ()
+  (should
+   (equal
+    (scheme-read "(a (nested) test)")
+    '(List
+      (Atom . "a")
+      (List
+       (Atom . "nested"))
+      (Atom . "test")))))
+
+(ert-deftest test-scheme-quoted ()
+  (should
+   (equal
+    (scheme-read "(a '(quoted (dotted . list)) test)")
+    '(List
+      (Atom . "a")
+      (List
+       (Atom . "quote")
+       (List
+        (Atom . "quoted")
+        (DottedList
+         ((Atom . "dotted"))
+         Atom . "list")))
+      (Atom . "test")))))
+
+(provide 'scheme-tests)
+;;; scheme-tests.el ends here
diff --git a/packages/parsec/examples/scheme.el 
b/packages/parsec/examples/scheme.el
new file mode 100644
index 0000000..7d33953
--- /dev/null
+++ b/packages/parsec/examples/scheme.el
@@ -0,0 +1,108 @@
+;;; scheme.el --- Scheme parser using parsec.el      -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/
+
+;;; Code:
+
+(defsubst scheme-bool (value)
+  (cons 'Bool value))
+
+(defsubst scheme-true ()
+  (scheme-bool 'True))
+
+(defsubst scheme-false ()
+  (scheme-bool 'False))
+
+(defsubst scheme-atom (atom)
+  (cons 'Atom atom))
+
+(defsubst scheme-number (number)
+  (cons 'Number number))
+
+(defsubst scheme-list (&rest values)
+  (cons 'List values))
+
+(defsubst scheme-dotted-list (head tail)
+  (cons 'DottedList (cons head tail)))
+
+(defsubst scheme-symbol ()
+  (parsec-re "[$!#%&|*+/:<=>address@hidden"))
+
+(defsubst scheme-spaces ()
+  (parsec-many (parsec-ch ? )))
+
+(defun scheme-parse-string ()
+  (parsec-and (parsec-ch ?\")
+              (parsec-return (parsec-many-as-string (parsec-none-of ?\"))
+                (parsec-ch ?\"))))
+
+(defun scheme-parse-atom ()
+  (let (first rest atom)
+    (parsec-and (setq first (parsec-or (parsec-letter) (scheme-symbol)))
+                (setq rest (parsec-many (parsec-or (parsec-letter)
+                                                   (parsec-digit)
+                                                   (scheme-symbol)))))
+    (setq atom (parsec-list-to-string (cons first rest)))
+    (cond
+     ((string= atom "#t") (scheme-true))
+     ((string= atom "#f") (scheme-false))
+     (t (scheme-atom atom)))))
+
+(defun scheme-parse-number ()
+  (scheme-number
+   (string-to-number (parsec-many1-as-string (parsec-digit)))))
+
+(defun scheme-parse-list ()
+  (apply #'scheme-list (parsec-sepby (scheme-parse-expr) (scheme-spaces))))
+
+(defun scheme-parse-dotted-list ()
+  (scheme-dotted-list (parsec-endby (scheme-parse-expr) (scheme-spaces))
+                      (parsec-and
+                        (parsec-ch ?.)
+                        (scheme-spaces)
+                        (scheme-parse-expr))))
+
+(defun scheme-parse-quoted ()
+  (parsec-and
+    (parsec-ch ?\')
+    (scheme-list (scheme-atom "quote") (scheme-parse-expr))))
+
+(defun scheme-parse-expr ()
+  (parsec-or (scheme-parse-atom)
+             (scheme-parse-string)
+             (scheme-parse-number)
+             (scheme-parse-quoted)
+             (parsec-between
+              (parsec-ch ?\()
+              (parsec-ch ?\))
+              (parsec-or
+               (parsec-try
+                (scheme-parse-list))
+               (scheme-parse-dotted-list)))))
+
+(defun scheme-read (expr)
+  (parsec-with-input expr
+    (scheme-parse-expr)))
+
+(provide 'scheme)
+;;; scheme.el ends here
diff --git a/packages/parsec/examples/simple-csv-parser-tests.el 
b/packages/parsec/examples/simple-csv-parser-tests.el
new file mode 100644
index 0000000..9ae5063
--- /dev/null
+++ b/packages/parsec/examples/simple-csv-parser-tests.el
@@ -0,0 +1,39 @@
+;;; simple-csv-parser-tests.el --- Tests for simple csv parser  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'simple-csv-parser)
+
+(ert-deftest test-simple-csv ()
+  (should
+   (equal
+    (s-parse-csv "a1s,b,d,e,f\na,,c,d,\n")
+    '(("a1s" "b" "d" "e" "f")
+      ("a" "" "c" "d" "")))))
+
+
+(provide 'simple-csv-parser-tests)
+;;; simple-csv-parser-tests.el ends here
diff --git a/packages/parsec/examples/simple-csv-parser.el 
b/packages/parsec/examples/simple-csv-parser.el
new file mode 100644
index 0000000..af9d286
--- /dev/null
+++ b/packages/parsec/examples/simple-csv-parser.el
@@ -0,0 +1,55 @@
+;;; simple-csv-parser.el --- Simple CSV parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+(require 'parsec)
+
+(defun s-csv-file ()
+  (parsec-return (parsec-many (s-csv-line))
+    (parsec-eof)))
+
+(defun s-csv-line ()
+  (parsec-return (s-csv-cells)
+    (s-csv-eol)))
+
+(defun s-csv-eol ()
+  (parsec-or (parsec-str "\n")
+             (parsec-eof)))
+
+(defun s-csv-cells ()
+  (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+
+(defun s-csv-cell-content ()
+  (parsec-many-as-string (parsec-none-of ?, ?\n)))
+
+(defun s-csv-remaining-cells ()
+  (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+
+(defun s-parse-csv (input)
+  (parsec-with-input input
+    (s-csv-file)))
+
+(provide 'simple-csv-parser)
+;;; simple-csv-parser.el ends here
diff --git a/packages/parsec/examples/url-str-parser-tests.el 
b/packages/parsec/examples/url-str-parser-tests.el
new file mode 100644
index 0000000..2444c8c
--- /dev/null
+++ b/packages/parsec/examples/url-str-parser-tests.el
@@ -0,0 +1,48 @@
+;;; url-str-parser-tests.el --- Tests for url-str-parser  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'url-str-parser)
+
+(ert-deftest test-url-str ()
+  (should
+   (equal
+    (url-str-parse "foo=bar&a%21=b+c")
+    '(("foo" Just . "bar")
+      ("a!" Just . "b c"))))
+  (should
+   (equal
+    (url-str-parse "foo=&a%21=b+c")
+    '(("foo" Just . "")
+      ("a!" Just . "b c"))))
+  (should
+   (equal
+    (url-str-parse "foo&a%21=b+c")
+    '(("foo" . Nothing)
+      ("a!" Just . "b c")))))
+
+(provide 'url-str-parser-tests)
+;;; url-str-parser-tests.el ends here
diff --git a/packages/parsec/examples/url-str-parser.el 
b/packages/parsec/examples/url-str-parser.el
new file mode 100644
index 0000000..9c39c3f
--- /dev/null
+++ b/packages/parsec/examples/url-str-parser.el
@@ -0,0 +1,56 @@
+;;; url-str-parser.el --- URL-encoded query string parser using parsec.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ref: http://book.realworldhaskell.org/read/using-parsec.html
+
+;;; Code:
+
+
+(defun url-str-query ()
+  (parsec-sepby (url-str-pair) (parsec-ch ?&)))
+
+(defun url-str-pair ()
+  (cons
+   (parsec-many1-as-string (url-str-char))
+   (parsec-optional-maybe
+    (parsec-and (parsec-ch ?=) (parsec-many-as-string (url-str-char))))))
+
+(defun url-str-char ()
+  (parsec-or (parsec-re "[a-zA-z0-9$_.!*'(),-]")
+             (parsec-and (parsec-ch ?+) " ")
+             (url-str-hex)))
+
+(defun url-str-hex ()
+  (parsec-and
+   (parsec-ch ?%)
+   (format "%c"
+           (string-to-number (format "%s%s"
+                                     (parsec-re "[0-9a-zA-z]")
+                                     (parsec-re "[0-9a-zA-z]"))
+                             16))))
+
+(defun url-str-parse (input)
+  (parsec-with-input input
+    (url-str-query)))
+
+(provide 'url-str-parser)
+;;; url-str-parser.el ends here
diff --git a/packages/parsec/parsec-tests.el b/packages/parsec/parsec-tests.el
new file mode 100644
index 0000000..359fcb7
--- /dev/null
+++ b/packages/parsec/parsec-tests.el
@@ -0,0 +1,481 @@
+;;; parsec-tests.el --- Tests for parsec.el          -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Keywords:
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'parsec)
+
+(ert-deftest test-parsec-ch ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-ch ?b))
+    "b"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-query (parsec-ch ?a) :beg))
+    1)))
+
+(ert-deftest test-parsec-satisfy ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-satisfy (lambda (c) (char-equal c ?b))))
+    "b"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-ch ?a)
+      (parsec-query (parsec-satisfy (lambda (c) (char-equal c ?b))) :end))
+    3)))
+
+(ert-deftest test-parsec-eol ()
+  (should
+   (equal
+    (parsec-with-input "\na"
+      (parsec-newline)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-crlf)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-eol)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\na"
+      (parsec-eol)
+      (parsec-ch ?a))
+    "a"))
+  (should
+   (equal
+    (parsec-with-input "\ra"
+      (parsec-eol)
+      (parsech-ch ?a))
+    (parsec-error-new-2 "\n" "a"))))
+
+(ert-deftest test-parsec-eof ()
+  (should
+   (equal
+    (parsec-with-input "\r\na"
+      (parsec-eol)
+      (parsec-ch ?a)
+      (parsec-eof))
+    nil)))
+
+(ert-deftest test-parsec-re ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-query
+       (parsec-re "\\(a\\)\\(bc\\)")
+       :group 2))
+    "bc")))
+
+(ert-deftest test-parsec-make-alternatives ()
+  (should
+   (equal
+    (parsec-make-alternatives '(?-))
+    "-"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?- ?\] ?a ?^))
+    "]a^-"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?- ?^))
+    "-^"))
+  (should
+   (equal
+    (parsec-make-alternatives '(?^ ?\"))
+    "\"^")))
+
+(ert-deftest test-parsec-one-of ()
+  (should
+   (equal
+    (parsec-with-input "^]-"
+      (parsec-many-as-string (parsec-one-of ?^ ?\] ?-)))
+    "^]-"))
+  (should
+   (equal
+    (parsec-with-input "^-"
+      (parsec-many-as-string (parsec-one-of ?^ ?-)))
+    "^-")))
+
+(ert-deftest test-parsec-none-of ()
+  (should
+   (equal
+    (parsec-with-input "-[]"
+      (parsec-none-of ?\] ?^)
+      (parsec-one-of ?\[ ?\])
+      (parsec-none-of ?- ?^))
+    "]")))
+
+(ert-deftest test-parsec-str ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-str "abc"))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-str "ac")
+                 (parsec-ch ?a)))
+    "a")))
+
+(ert-deftest test-parsec-string ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-string "abc"))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-string "ac")
+                 (parsec-ch ?a)))
+    (parsec-error-new-2 "c" "b")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-try (parsec-string "ac"))
+                 (parsec-ch ?a)))
+    "a")))
+
+(ert-deftest test-parsec-or ()
+  (should
+   (equal
+    (parsec-with-input "1"
+      (parsec-or (parsec-letter)
+                 (parsec-digit)))
+    "1"))
+  (should
+   (equal
+    (parsec-with-input "124"
+      (parsec-or (parsec-string "13")
+                 (parsec-ch ?1)))
+    (parsec-error-new-2 "3" "2")))
+  (should
+   (equal
+    (parsec-with-input "124"
+      (parsec-or (parsec-str "13")
+                 (parsec-ch ?1)))
+    "1")))
+
+(ert-deftest test-parsec-collect-optional ()
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-and
+         (parsec-ch ?a)
+         (parsec-str "bc"))
+       (parsec-optional (parsec-ch ?-))
+       (parsec-and
+         (parsec-return (parsec-str "de")
+           (parsec-ch ?f)))))
+    "bc-de"))
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-and
+         (parsec-ch ?a)
+         (parsec-str "bc"))
+       (parsec-optional (parsec-ch ?-))
+       (parsec-and
+         (parsec-return (parsec-str "de")
+           (parsec-ch ?f)))))
+    "bcde")))
+
+(ert-deftest test-parsec-try ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-or (parsec-try (parsec-string "abd"))
+                 (parsec-str "abc")))
+    "abc")))
+
+(ert-deftest test-parsec-lookahead ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-lookahead (parsec-str "abc"))
+      (point))
+    (point-min)))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-start
+       (parsec-lookahead
+        (parsec-and
+          (parsec-ch ?a)
+          (parsec-ch ?c))))
+      (point))
+    (1+ (point-min))))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-start
+       (parsec-try
+        (parsec-lookahead
+         (parsec-and
+           (parsec-ch ?a)
+           (parsec-ch ?c)))))
+      (point))
+    (point-min))))
+
+(ert-deftest test-parsec-error-handles ()
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-with-error-message "foo"
+        (parsec-str "abd")))
+    (parsec-error-new "foo")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-with-error-message "foo"
+        (parsec-str "abc")))
+    "abc"))
+  (should
+   (equal
+    (condition-case err
+        (parsec-with-input "abc"
+          (parsec-ensure-with-error-message "foo"
+            (parsec-str "abd")))
+      (error (cdr err)))
+    '("foo")))
+  (should
+   (equal
+    (condition-case err
+        (parsec-with-input "abc"
+          (parsec-ensure-with-error-message "foo"
+            (parsec-str "abc")))
+      (error (cdr err)))
+    "abc")))
+
+(ert-deftest test-parsec-many ()
+  (should
+   (equal
+    (parsec-with-input "aaaaab"
+      (parsec-collect-as-string
+       (parsec-many-as-string (parsec-ch ?a))
+       (parsec-many-as-string (parsec-ch ?c))
+       (parsec-many1-as-string (parsec-ch ?b))))
+    "aaaaab"))
+  (should
+   (equal
+    (parsec-with-input "aaaaab"
+      (parsec-collect-as-string
+       (parsec-many-as-string (parsec-ch ?a))
+       (parsec-many-as-string (parsec-ch ?c))
+       (parsec-many1-as-string (parsec-ch ?b))
+       (parsec-many1-as-string (parsec-ch ?c))))
+    (parsec-error-new-2 "c" "`EOF'")))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-string "ab")))
+    (parsec-error-new-2 "b" "a")))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-try (parsec-string "ab")))
+      (parsec-str "aa"))
+    "aa"))
+  (should
+   (equal
+    (parsec-with-input "abababaa"
+      (parsec-many1-as-string (parsec-str "ab"))
+      (parsec-str "aa"))
+    "aa")))
+
+
+(ert-deftest test-parsec-till ()
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d)))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d) :both))
+    '("abc" . "d")))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?d) :end))
+    "d"))
+  (should
+   (equal
+    (parsec-with-input "abcd"
+      (parsec-with-error-message "eof"
+        (parsec-many-till-as-string (parsec-any-ch) (parsec-ch ?e))))
+    (parsec-error-new "eof")))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-until-as-string (parsec-ch ?c)))
+    "ab"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-until-as-string (parsec-ch ?c) :end))
+    "c"))
+  (should
+   (equal
+    (parsec-with-input "abc"
+      (parsec-query (parsec-until-as-string (parsec-ch ?c)) :beg))
+    1)))
+
+(ert-deftest test-parsec-not-followed-by ()
+  (should
+   (equal
+    (parsec-with-input "abd"
+      (parsec-collect*
+       (parsec-str "ab")
+       (parsec-not-followed-by (parsec-ch ?c))
+       (parsec-ch ?d)))
+    '("ab" "d")))
+  (should
+   (equal
+    (parsec-with-input "abd"
+      (parsec-collect*
+       (parsec-str "ab")
+       (parsec-or (parsec-not-followed-by (parsec-ch ?d))
+                  (parsec-not-followed-by (parsec-ch ?c)))
+       (parsec-ch ?d)))
+    '("ab" "d"))))
+
+(ert-deftest test-parsec-endby ()
+  (should
+   (equal
+    (parsec-with-input "abc\ndef"
+      (parsec-endby (parsec-many-as-string (parsec-letter))
+                    (parsec-eol-or-eof)))
+    '("abc" "def"))))
+
+(ert-deftest test-parsec-sepby ()
+  (should
+   (equal
+    (parsec-with-input "ab,cd,ef"
+      (parsec-sepby (parsec-many-as-string (parsec-re "[^,]"))
+                    (parsec-ch ?,)))
+    '("ab" "cd" "ef"))))
+
+(ert-deftest test-parsec-between ()
+  (should
+   (equal
+    (parsec-with-input "{abc}"
+      (parsec-between
+       (parsec-ch ?\{) (parsec-ch ?\})
+       (parsec-or
+        (parsec-str "ac")
+        (parsec-many-as-string (parsec-letter)))))
+    "abc"))
+  (should
+   (equal
+    (parsec-with-input "{abc}"
+      (parsec-between
+       (parsec-ch ?\{) (parsec-ch ?\})
+       (parsec-or
+        (parsec-string "ac")
+        (parsec-many-as-string (parsec-letter)))))
+    (parsec-error-new-2 "c" "b"))))
+
+(ert-deftest test-parsec-count ()
+  (should
+   (equal
+    (parsec-with-input "aaaab"
+      (parsec-return (parsec-count-as-string 3 (parsec-ch ?a))
+        (parsec-many1 (parsec-one-of ?a ?b))))
+    "aaa")))
+
+(ert-deftest test-parsec-option ()
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-string "ac")))
+    (parsec-error-new-2 "c" "b")))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-str "ac")))
+    "opt"))
+  (should
+   (equal
+    (parsec-with-input "ab"
+      (parsec-option "opt" (parsec-string "ab")))
+    "ab")))
+
+(ert-deftest test-parsec-optional ()
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-optional (parsec-ch ?-))
+       (parsec-str "def")))
+    "abcdef"))
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-optional (parsec-ch ?-))
+       (parsec-str "def")))
+    "abc-def"))
+  (should
+   (equal
+    (parsec-with-input "abcdef"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-from-maybe (parsec-optional-maybe (parsec-ch ?-)))
+       (parsec-str "def")))
+    "abcdef"))
+  (should
+   (equal
+    (parsec-with-input "abc-def"
+      (parsec-collect-as-string
+       (parsec-str "abc")
+       (parsec-from-maybe (parsec-optional-maybe (parsec-ch ?-)))
+       (parsec-str "def")))
+    "abc-def")))
+
+(provide 'parsec-tests)
+;;; parsec-tests.el ends here
diff --git a/packages/parsec/parsec.el b/packages/parsec/parsec.el
new file mode 100644
index 0000000..3432e3d
--- /dev/null
+++ b/packages/parsec/parsec.el
@@ -0,0 +1,1042 @@
+;;; parsec.el --- Parser combinator library  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016  Free Software Foundation, Inc.
+
+;; Author: Junpeng Qiu <address@hidden>
+;; Maintainer: Junpeng Qiu <address@hidden>
+;; URL: https://github.com/cute-jumper/parsec.el
+;; Version: 0.1.3
+;; Package-Requires: ((emacs "24") (cl-lib "0.5"))
+;; Keywords: extensions
+
+;; This program 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.
+
+;; 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 program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;                              _____________
+
+;;                                PARSEC.EL
+
+;;                               Junpeng Qiu
+;;                              _____________
+
+
+;; Table of Contents
+;; _________________
+
+;; 1 Overview
+;; 2 Parsing Functions & Parser Combinators
+;; .. 2.1 Basic Parsing Functions
+;; .. 2.2 Parser Combinators
+;; .. 2.3 Parser Utilities
+;; .. 2.4 Variants that Return a String
+;; 3 Code Examples
+;; 4 Write a Parser: a Simple CSV Parser
+;; 5 More Parser Examples
+;; 6 Change the Return Values using `parsec-query'
+;; 7 Error Messages
+;; 8 Acknowledgement
+
+
+;; A parser combinator library for Emacs Lisp similar to Haskell's Parsec
+;; library.
+
+
+;; 1 Overview
+;; ==========
+
+;;   This work is based on [John Wiegley]'s [emacs-pl]. The original
+;;   [emacs-pl] is awesome, but I found following problems when I tried to
+;;   use it:
+
+;;   - It only contains a very limited set of combinators
+;;   - Some of its functions (combinators) have different behaviors than
+;;     their Haskell counterparts
+;;   - It can't show error messages when parsing fails
+
+;;   So I decided to make a new library on top of it. This library,
+;;   however, contains most of the parser combinators in
+;;   `Text.Parsec.Combinator', which should be enough in most use cases. Of
+;;   course more combinators can be added if necessary! Most of the parser
+;;   combinators have the same behavior as their Haskell counterparts.
+;;   `parsec.el' also comes with a simple error handling mechanism so that
+;;   it can display an error message showing how the parser fails.
+
+;;   So we can
+
+;;   - use these parser combinators to write parsers easily from scratch in
+;;     Emacs Lisp like what we can do in Haskell
+;;   - port existing Haskell program using Parsec to its equivalent Emacs
+;;     Lisp program easily
+
+
+;; [John Wiegley] https://github.com/jwiegley/
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+
+;; 2 Parsing Functions & Parser Combinators
+;; ========================================
+
+;;   We compare the functions and macros defined in this library with their
+;;   Haskell counterparts, assuming you're already familiar with Haskell's
+;;   Parsec. If you don't have any experience with parser combinators, look
+;;   at the docstrings of these functions and macros and try them to see
+;;   the results! They are really easy to learn and use!
+
+;;   The *Usage* column for each function/combinator in the following
+;;   tables is much simplified. Check the docstring of the
+;;   function/combinator to see the full description.
+
+
+;; 2.1 Basic Parsing Functions
+;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+;;   These parsing functions are used as the basic building block for a
+;;   parser. By default, their return value is a *string*.
+
+;;    parsec.el               Haskell's Parsec  Usage
+;;   
-------------------------------------------------------------------------------------------------
+;;    parsec-ch               char              parse a character
+;;    parsec-any-ch           anyChar           parse an arbitrary character
+;;    parsec-satisfy          satisfy           parse a character satisfying a 
predicate
+;;    parsec-newline          newline           parse '\n'
+;;    parsec-crlf             crlf              parse '\r\n'
+;;    parsec-eol              eol               parse newline or CRLF
+;;    parsec-eof, parsec-eob  eof               parse end of file
+;;    parsec-eol-or-eof       *N/A*             parse EOL or EOL
+;;    parsec-re               *N/A*             parse using a regular 
expression
+;;    parsec-one-of           oneOf             parse one of the characters
+;;    parsec-none-of          noneOf            parse any character other than 
the supplied ones
+;;    parsec-str              *N/A*             parse a string but consume 
input only when successful
+;;    parsec-string           string            parse a string and consume 
input for partial matches
+;;    parsec-num              *N/A*             parse a number
+;;    parsec-letter           letter            parse a letter
+;;    parsec-digit            digit             parse a digit
+
+;;   Note:
+;;   - `parsec-str' and `parsec-string' are different. `parsec-string'
+;;     behaves the same as `string' in Haskell, and `parsec-str' is more
+;;     like combining `string' and `try' in Haskell. Personally I found
+;;     `parsec-str' easier to use because `parsec-str' is "atomic", which
+;;     is similar to `parsec-ch'.
+;;   - Use the power of regular expressions provided by `parsec-re' and
+;;     simplify the parser!
+
+
+;; 2.2 Parser Combinators
+;; ~~~~~~~~~~~~~~~~~~~~~~
+
+;;   These combinators can be used to combine different parsers.
+
+;;    parsec.el                  Haskell's Parsec  Usage
+;;   
-----------------------------------------------------------------------------------------------------------
+;;    parsec-or                  choice            try the parsers until one 
succeeds
+;;    parsec-try                 try               try parser and consume no 
input when an error occurs
+;;    parsec-lookahead           lookahead         try parser and consume no 
input when successful
+;;    parsec-peek                try && lookahead  try parser without 
comsuming any input
+;;    parsec-peek-p              try && lookahead  same as parsec-peek except 
the return value for failure
+;;    parsec-with-error-message  <?> (similar)     use the new error message 
when an error occurs
+;;    parsec-many                many              apply the parser zero or 
more times
+;;    parsec-many1               many1             apply the parser one or 
more times
+;;    parsec-many-till           manyTill          apply parser zero or more 
times until end succeeds
+;;    parsec-until               *N/A*             parse until end succeeds
+;;    parsec-not-followed-by     notFollowedBy     succeed when the parser 
fails
+;;    parsec-endby               endby             apply parser zero or more 
times, separated and ended by end
+;;    parsec-sepby               sepby             apply parser zero or more 
times, separated by sep
+;;    parsec-between             between           apply parser between open 
and close
+;;    parsec-count               count             apply parser n times
+;;    parsec-option              option            apply parser, if it fails, 
return opt
+;;    parsec-optional            *N/A*             apply parser zero or one 
time and return the result
+;;    parsec-optional*           optional          apply parser zero or one 
time and discard the result
+;;    parsec-optional-maybe      optionMaybe       apply parser zero or one 
time and return the result in Maybe
+
+;;   Note:
+;;   - `parsec-or' can also be used to replace `<|>'.
+;;   - `parsec-with-error-message' is slightly different from `<?>'. It
+;;     will replace the error message even when the input is consumed.
+;;   - By default, `parsec-many-till' behaves as Haskell's `manyTill'.
+;;     However, `parsec-many-till' and `parsec-until' can accept an
+;;     optional argument to specify which part(s) to be returned. You can
+;;     use `:both' or `:end' as the optional argument to change the default
+;;     behavior. See the docstrings for more information.
+
+
+;; 2.3 Parser Utilities
+;; ~~~~~~~~~~~~~~~~~~~~
+
+;;   These utilities can be used together with parser combinators to build
+;;   a parser and ease the translation process if you're trying to port an
+;;   existing Haskell program.
+
+;;    parsec.el                         Haskell's Parsec  Usage
+;;   
-------------------------------------------------------------------------------------------------------------
+;;    parsec-and                        do block          try all parsers and 
return the last result
+;;    parsec-return                     do block          try all parsers and 
return the first result
+;;    parsec-ensure                     *N/A*             quit the parsing 
when an error occurs
+;;    parsec-ensure-with-error-message  *N/A*             quit the parsing 
when an error occurs with new message
+;;    parsec-collect                    sequence          try all parsers and 
collect the results into a list
+;;    parsec-collect*                   *N/A*             try all parsers and 
collect non-nil results into a list
+;;    parsec-start                      parse             entry point
+;;    parsec-parse                      parse             entry point (same as 
parsec-start)
+;;    parsec-with-input                 parse             perform parsers on 
input
+;;    parsec-from-maybe                 fromMaybe         retrieve value from 
Maybe
+;;    parsec-maybe-p                    *N/A*             is a Maybe value or 
not
+;;    parsec-query                      *N/A*             change the parser's 
return value
+
+
+;; 2.4 Variants that Return a String
+;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+;;   By default, the macros/functions that return multiple values will put
+;;   the values into a list. These macros/functions are:
+;;   - `parsec-many'
+;;   - `parsec-many1'
+;;   - `parsec-many-till'
+;;   - `parsec-until'
+;;   - `parsec-count'
+;;   - `parsec-collect' and `parsec-collect*'
+
+;;   They all have a variant that returns a string by concatenating the
+;;   results in the list:
+;;   - `parsec-many-as-string' or `parsec-many-s'
+;;   - `parsec-many1-as-string' or `parsec-many1-s'
+;;   - `parsec-many-till-as-string' or `parsec-many-till-s'
+;;   - `parsec-until-as-string' or `parsec-until-s'
+;;   - `parsec-collect-as-string' or `parsec-collect-s'
+;;   - `parsec-count-as-string' or `parsec-count-s'
+
+;;   The `*-s' and `*-as-string' variants are the same, except the `*-s'
+;;   variants have a shorter name. Using these `*-s' functions are
+;;   recommended if you're dealing with strings very frequently in your
+;;   code. These variants accept the same arguments and have the same
+;;   behavior as their original counterpart that returns a list. The only
+;;   difference is the return value.
+
+
+;; 3 Code Examples
+;; ===============
+
+;;   Some very simple examples are given here. You can see many code
+;;   examples in the test files in this GitHub repo.
+
+;;   The following code extract the "hello" from the comment:
+;;   ,----
+;;   | (parsec-with-input "/* hello */"
+;;   |   (parsec-string "/*")
+;;   |   (parsec-many-till-as-string (parsec-any-ch)
+;;   |                               (parsec-try
+;;   |                                (parsec-string "*/"))))
+;;   `----
+
+;;   The following Haskell program does a similar thing:
+;;   ,----
+;;   | import           Text.Parsec
+;;   |
+;;   | main :: IO ()
+;;   | main = print $ parse p "" "/* hello */"
+;;   |   where
+;;   |     p = do string "/*"
+;;   |            manyTill anyChar (try (string "*/"))
+;;   `----
+
+;;   The following code returns the "aeiou" before "end":
+;;   ,----
+;;   | (parsec-with-input "if aeiou end"
+;;   |   (parsec-str "if ")
+;;   |   (parsec-return
+;;   |       (parsec-many-as-string (parsec-one-of ?a ?e ?i ?o ?u))
+;;   |     (parsec-str " end")))
+;;   `----
+
+
+;; 4 Write a Parser: a Simple CSV Parser
+;; =====================================
+
+;;   You can find the code in `examples/simple-csv-parser.el'. The code is
+;;   based on the Haskell code in [Using Parsec].
+
+;;   An end-of-line should be a string `\n'. We use `(parsec-str "\n")' to
+;;   parse it (Note that since `\n' is also one character, `(parsec-ch
+;;   ?\n)' also works). Some files may not contain a newline at the end,
+;;   but we can view end-of-file as the end-of-line for the last line, and
+;;   use `parsec-eof' (or `parsec-eob') to parse the end-of-file. We use
+;;   `parsec-or' to combine these two combinators:
+;;   ,----
+;;   | (defun s-csv-eol ()
+;;   |   (parsec-or (parsec-str "\n")
+;;   |              (parsec-eof)))
+;;   `----
+
+;;   A CSV file contains many lines and ends with an end-of-file. Use
+;;   `parsec-return' to return the result of the first parser as the
+;;   result.
+;;   ,----
+;;   | (defun s-csv-file ()
+;;   |   (parsec-return (parsec-many (s-csv-line))
+;;   |     (parsec-eof)))
+;;   `----
+
+;;   A CSV line contains many CSV cells and ends with an end-of-line, and
+;;   we should return the cells as the results:
+;;   ,----
+;;   | (defun s-csv-line ()
+;;   |   (parsec-return (s-csv-cells)
+;;   |     (s-csv-eol)))
+;;   `----
+
+;;   CSV cells is a list, containing the first cell and the remaining
+;;   cells:
+;;   ,----
+;;   | (defun s-csv-cells ()
+;;   |   (cons (s-csv-cell-content) (s-csv-remaining-cells)))
+;;   `----
+
+;;   A CSV cell consists any character that is not =,= or `\n', and we use
+;;   the `parsec-many-as-string' variant to return the whole content as a
+;;   string instead of a list of single-character strings:
+;;   ,----
+;;   | (defun s-csv-cell-content ()
+;;   |   (parsec-many-as-string (parsec-none-of ?, ?\n)))
+;;   `----
+
+;;   For the remaining cells: if followed by a comma =,=, we try to parse
+;;   more csv cells. Otherwise, we should return the `nil':
+;;   ,----
+;;   | (defun s-csv-remaining-cells ()
+;;   |   (parsec-or (parsec-and (parsec-ch ?,) (s-csv-cells)) nil))
+;;   `----
+
+;;   OK. Our parser is almost done. To begin parsing the content in buffer
+;;   `foo', you need to wrap the parser inside `parsec-start' (or
+;;   `parsec-parse'):
+;;   ,----
+;;   | (with-current-buffer "foo"
+;;   |   (goto-char (point-min))
+;;   |   (parsec-parse
+;;   |    (s-csv-file)))
+;;   `----
+
+;;   If you want to parse a string instead, we provide a simple wrapper
+;;   macro `parsec-with-input', and you feed a string as the input and put
+;;   arbitraty parsers inside the macro body. `parsec-start' or
+;;   `parsec-parse' is not needed.
+;;   ,----
+;;   | (parsec-with-input "a1,b1,c1\na2,b2,c2"
+;;   |   (s-csv-file))
+;;   `----
+
+;;   The above code returns:
+;;   ,----
+;;   | (("a1" "b1" "c1") ("a2" "b2" "c2"))
+;;   `----
+
+;;   Note that if we replace `parsec-many-as-string' with `parsec-many' in
+;;   `s-csv-cell-content':
+;;   ,----
+;;   | (defun s-csv-cell-content ()
+;;   |   (parsec-many (parsec-none-of ?, ?\n)))
+;;   `----
+
+;;   The result would be:
+;;   ,----
+;;   | ((("a" "1") ("b" "1") ("c" "1")) (("a" "2") ("b" "2") ("c" "2")))
+;;   `----
+
+
+;; [Using Parsec] http://book.realworldhaskell.org/read/using-parsec.html
+
+
+;; 5 More Parser Examples
+;; ======================
+
+;;   I translate some Haskell Parsec examples into Emacs Lisp using
+;;   `parsec.el'. You can see from these examples that it is very easy to
+;;   write parsers using `parsec.el', and if you know haskell, you can see
+;;   that basically I just translate the Haskell into Emacs Lisp one by one
+;;   because most of them are just the same!
+
+;;   You can find five examples under the `examples/' directory.
+
+;;   Three of the examples are taken from the chapter [Using Parsec] in the
+;;   book of [Real World Haskell]:
+;;   - `simple-csv-parser.el': a simple csv parser with no support for
+;;     quoted cells, as explained in previous section.
+;;   - `full-csv-parser.el': a full csv parser
+;;   - `url-str-parser.el': parser parameters in URL
+
+;;   `pjson.el' is a translation of Haskell's [json library using Parsec].
+
+;;   `scheme.el' is a much simplified Scheme parser based on [Write
+;;   Yourself a Scheme in 48 Hours].
+
+;;   They're really simple but you can see how this library works!
+
+
+;; [Using Parsec] http://book.realworldhaskell.org/read/using-parsec.html
+
+;; [Real World Haskell] http://book.realworldhaskell.org/read/
+
+;; [json library using Parsec]
+;; 
https://hackage.haskell.org/package/json-0.9.1/docs/src/Text-JSON-Parsec.html
+
+;; [Write Yourself a Scheme in 48 Hours]
+;; https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/
+
+
+;; 6 Change the Return Values using `parsec-query'
+;; ===============================================
+
+;;   Parsing has side-effects such as forwarding the current point. In the
+;;   original [emacs-pl], you can specify some optional arguments to some
+;;   parsing functions (`pl-ch', `pl-re' etc.) to change the return values.
+;;   In `parsec.el', these functions don't have such a behavior. Instead,
+;;   we provide a unified interface `parsec-query', which accepts any
+;;   parser, and changes the return value of the parser.
+
+;;   You can speicify following arguments:
+;;   ,----
+;;   | :beg      --> return the point before applying the PARSER
+;;   | :end      --> return the point after applying the PARSER
+;;   | :nil      --> return nil
+;;   | :groups N --> return Nth group for `parsec-re'."
+;;   `----
+
+;;   So instead of returning "b" as the result, the following code returns
+;;   2:
+;;   ,----
+;;   | (parsec-with-input "ab"
+;;   |   (parsec-ch ?a)
+;;   |   (parsec-query (parsec-ch ?b) :beg))
+;;   `----
+
+;;   Returning a point means that you can also incorporate `parsec.el' with
+;;   Emacs Lisp functions that can operate on points/regions, such as
+;;   `goto-char' and `kill-region'.
+
+;;   `:group' can be specified when using `parsec-re':
+;;   ,----
+;;   | (parsec-with-input "ab"
+;;   |   (parsec-query (parsec-re "\\(a\\)\\(b\\)") :group 2))
+;;   `----
+
+;;   The above code will return "b" instead of "ab".
+
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+
+;; 7 Error Messages
+;; ================
+
+;;   `parsec.el' implements a simple error handling mechanism. When an
+;;   error happens, it will show how the parser fails.
+
+;;   For example, the following code fails:
+;;   ,----
+;;   | (parsec-with-input "aac"
+;;   |   (parsec-count 2 (parsec-ch ?a))
+;;   |   (parsec-ch ?b))
+;;   `----
+
+;;   The return value is:
+;;   ,----
+;;   | (parsec-error . "Found \"c\" -> Expected \"b\"")
+;;   `----
+
+;;   This also works when parser combinators fail:
+;;   ,----
+;;   | (parsec-with-input "a"
+;;   |   (parsec-or (parsec-ch ?b)
+;;   |              (parsec-ch ?c)))
+;;   `----
+
+;;   The return value is:
+;;   ,----
+;;   | (parsec-error . "None of the parsers succeeds:
+;;   |       Found \"a\" -> Expected \"c\"
+;;   |       Found \"a\" -> Expected \"b\"")
+;;   `----
+
+;;   If an error occurs, the return value is a cons cell that contains the
+;;   error message in its `cdr'. Compared to Haskell's Parsec, it's really
+;;   simple, but at least the error message could tell us some information.
+;;   Yeah, not perfect but usable.
+
+;;   To test whether a parser returns an error, use `parsec-error-p'. If it
+;;   returns an error, you can use `parsec-error-str' to retrieve the error
+;;   message as a string.
+
+;;   You can decide what to do based on the return value of a parser:
+;;   ,----
+;;   | (let ((res (parsec-with-input "hello"
+;;   |              (parsec-str "world"))))
+;;   |   (if (parsec-error-p res)
+;;   |       (message "Parser failed:\n%s" (parsec-error-str res))
+;;   |     (message "Parser succeeded by returning %s" res)))
+;;   `----
+
+
+;; 8 Acknowledgement
+;; =================
+
+;;   - Daan Leijen for Haskell's Parsec
+;;   - [John Wiegley] for [emacs-pl]
+
+
+;; [John Wiegley] https://github.com/jwiegley/
+
+;; [emacs-pl] https://github.com/jwiegley/emacs-pl
+
+;;; Code:
+
+(require 'cl-lib)
+
+(defgroup parsec nil
+  "Parser combinators for Emacs Lisp"
+  :group 'development)
+
+(defvar parsec-last-error-message nil)
+
+(defun parsec-eof-or-char-as-string ()
+  (let ((c (char-after)))
+    (if c
+        (char-to-string c)
+      "`EOF'")))
+
+(defun parsec-error-new (msg)
+  (cons 'parsec-error msg))
+
+(defun parsec-error-new-2 (expected found)
+  (parsec-error-new (format "Found \"%s\" -> Expected \"%s\""
+                            found expected)))
+
+(defun parsec-error-p (obj)
+  (and (consp obj)
+       (eq (car obj) 'parsec-error)))
+
+(defalias 'parsec-error-str 'cdr)
+
+(defsubst parsec-throw (msg)
+  (throw 'parsec-failed msg))
+
+(defun parsec-stop (&rest args)
+  (parsec-throw
+   (setq parsec-last-error-message
+         (let ((msg (plist-get args :message))
+               (expected (plist-get args :expected))
+               (found (plist-get args :found)))
+           (when (or (stringp msg)
+                     (and (stringp expected)
+                          (stringp found)))
+             (if (stringp msg)
+                 (parsec-error-new msg)
+               (parsec-error-new-2 expected found)))))))
+
+(defun parsec-ch (ch)
+  "Parse a character CH."
+  (let ((next-char (char-after)))
+    (if (and (not (eobp))
+             (char-equal next-char ch))
+        (progn (forward-char 1)
+               (char-to-string ch))
+      (parsec-stop :expected (char-to-string ch)
+                   :found (parsec-eof-or-char-as-string)))))
+
+(defun parsec-any-ch ()
+  "Parse any character."
+  (if (not (eobp))
+      (prog1 (char-to-string (char-after))
+        (forward-char))
+    (parsec-stop :expected "any char"
+                 :found (parsec-eof-or-char-as-string))))
+
+(defun parsec-satisfy (pred)
+  "Parse any character that satisfies the predicate PRED."
+  (let ((next-char (char-after)))
+    (if (and (not (eobp))
+             (funcall pred next-char))
+        (progn (forward-char 1)
+               (char-to-string next-char))
+      (parsec-stop :expected (format "%s" pred)
+                   :found (parsec-eof-or-char-as-string)))))
+
+(defun parsec-re (regexp)
+  "Parse the input matching the regular expression REGEXP."
+  (if (looking-at regexp)
+      (progn (goto-char (match-end 0))
+             (match-string 0))
+    (parsec-stop :expected regexp
+                 :found (parsec-eof-or-char-as-string))))
+
+(defun parsec-make-alternatives (chars)
+  (let ((regex-head "")
+        (regex-str "")
+        (regex-end "")
+        contains-caret-p)
+    (dolist (c chars)
+      (cond
+       ((char-equal c ?\]) (setq regex-head "]"))
+       ((char-equal c ?-) (setq regex-end "-"))
+       ((char-equal c ?^) (setq contains-caret-p t))
+       (t (setq regex-str (concat regex-str (char-to-string c))))))
+    (when contains-caret-p
+      (if (and
+           (string-equal regex-end "-")
+           (string-equal regex-head "")
+           (string-equal regex-str ""))
+          (setq regex-end "-^")
+        (setq regex-str (concat regex-str "^"))))
+    (concat regex-head regex-str regex-end)))
+
+(defun parsec-one-of (&rest chars)
+  "Succeed if the current character is in the supplied list of CHARS.
+Return the parsed character.
+
+>  (parsec-one-of ?a ?e ?i ?o ?u)
+
+Note this function is just a wrapper of `parsec-re'.  For complicated use 
cases,
+consider using `parsec-re' instead."
+  (parsec-re (format "[%s]" (parsec-make-alternatives chars))))
+
+(defun parsec-none-of (&rest chars)
+  "Succeed if the current character not in the supplied list of CHARS.
+Return the parsed character.
+
+>  (parsec-none-of ?a ?e ?i ?o ?u)
+
+Note this function is just a wrapper of `parsec-re'.  For complicated use 
cases,
+consider using `parsec-re' instead."
+  (parsec-re (format "[^%s]" (parsec-make-alternatives chars))))
+
+(defsubst parsec-str (str)
+  "Parse STR and only consume the input for an exact match.
+Return the parsed string.
+
+Note this function's behavior is different from the `string'
+function of Haskll's Parsec.  Use `parsec-string' if you want the
+same behavior as in Haskell."
+  (parsec-re (regexp-quote str)))
+
+(defsubst parsec-string (str)
+  "Parse STR and consume the input even for a partial match.
+Return the parsed string.
+
+It is equivalent to calling `parsec-ch' multiples times so the
+input will be consumed if the parser fails in the middle of the
+STR.  This function has the same behavior as the `string' function
+of Haskell's Parsec.  See also `parsec-str'."
+  (mapc (lambda (c) (parsec-ch c)) str))
+
+(defsubst parsec-num (num)
+  "Parse the number NUM and return the parsed number as a string."
+  (parsec-re (regexp-quote (number-to-string num))))
+
+(defsubst parsec-letter ()
+  "Parse any English letter."
+  (parsec-re "[a-zA-Z]"))
+
+(defsubst parsec-digit ()
+  "Parse any digit."
+  (parsec-re "[0-9]"))
+
+(defmacro parsec-or (&rest parsers)
+  "Try the PARSERS one by one.
+If the current parser succeeds, return its results.  If the
+current parser fails without consuming any input, try the next
+parser if available.  This combinator fails if the current parser
+fails after consuming some input or there is no more parsers."
+  (let ((parser-sym (make-symbol "parser"))
+        (error-sym (make-symbol "err"))
+        (error-str-list-sym (make-symbol "err-list")))
+    `(let (,error-str-list-sym ,parser-sym ,error-sym)
+       (catch 'parsec-failed-or
+         ,@(mapcar
+            (lambda (parser)
+              `(parsec-protect-atom parsec-or
+                 (parsec-start
+                  (throw 'parsec-failed-or
+                         (parsec-eavesdrop-error ,error-sym
+                             (parsec-make-atom parsec-or ,parser)
+                           (push (parsec-error-str ,error-sym) 
,error-str-list-sym))))))
+            parsers)
+         (parsec-stop
+          :message
+          (replace-regexp-in-string
+           "\n" "\n\t"
+           (concat "None of the parsers succeeds:\n"
+                   (mapconcat #'identity ,error-str-list-sym "\n"))))))))
+
+(defalias 'parsec-and 'progn
+  "Eval BODY sequentially and return the result of the last parser.
+This combinator fails if one of the parsers fails.")
+
+(defalias 'parsec-return 'prog1
+  "Eval FIRST and BODY sequentially and return the results of the first parser.
+This combinator fails if one of the parsers fails.")
+
+(defalias 'parsec-collect 'list
+  "Collect the results of all the parsers OBJECTS into a list.")
+
+(defun parsec-collect* (&rest args)
+  "Collect the non-nil results of all the parsers ARGS into a list."
+  (delq nil (apply #'parsec-collect args)))
+
+(defmacro parsec-collect-as-string (&rest forms)
+  "Collect the results of all the parsers FORMS as a string."
+  `(parsec-list-to-string (parsec-collect ,@forms)))
+
+(defalias 'parsec-collect-s 'parsec-collect-as-string)
+
+(defmacro parsec-start (&rest forms)
+  "Eval the parsers FORMS and return the results or a `parsec-error'.
+This combinator should be used at the top level as the entry
+point of your parsing program."
+  `(catch 'parsec-failed ,@forms))
+
+(defalias 'parsec-parse 'parsec-start)
+
+(defmacro parsec-try (parser)
+  "Try PARSER, and pretend that no input is consumed when an error occurs."
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (error-sym (make-symbol "err")))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-eavesdrop-error ,error-sym
+           (parsec-and ,parser)
+         (goto-char ,orig-pt-sym)))))
+
+(defmacro parsec-lookahead (parser)
+  "Try PARSER, and pretend that no input is consumed when it succeeds."
+  (let ((orig-pt-sym (make-symbol "orig-pt")))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-return ,parser
+         (goto-char ,orig-pt-sym)))))
+
+(defsubst parsec--atom-tag (name)
+  (intern (format "parsec-failed-at-half-%s" name)))
+
+(defmacro parsec-protect-atom (name parser)
+  "This must be used together with `parsec-make-atom'."
+  (declare (indent 1))
+  (let ((tag (parsec--atom-tag name)))
+    `(catch 'parsec-failed-protect-atom
+       (parsec-throw (catch ',tag
+                       (throw 'parsec-failed-protect-atom ,parser))))))
+
+(defmacro parsec-make-atom (name parser)
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (error-sym (make-symbol "err"))
+        (tag (parsec--atom-tag name)))
+    `(let ((,orig-pt-sym (point)))
+       (parsec-eavesdrop-error ,error-sym
+           ,parser
+         (unless (= (point) ,orig-pt-sym)
+           (throw ',tag ,error-sym))))))
+
+(defmacro parsec-eavesdrop-error (error-sym parser &rest handler)
+  (declare (indent 2))
+  `(catch 'parsec-failed-eavesdrop-error
+     (let ((,error-sym (parsec-start
+                        (throw 'parsec-failed-eavesdrop-error ,parser))))
+       ,@handler
+       (parsec-throw ,error-sym))))
+
+(defmacro parsec-with-error-message (msg &rest forms)
+  "Use MSG as the error message if an error occurs when Evaling the FORMS."
+  (declare (indent 1))
+  `(parsec-eavesdrop-error _
+       (parsec-and ,@forms)
+     (parsec-throw (parsec-error-new ,msg))))
+
+(defmacro parsec-ensure (&rest forms)
+  "Exit the program immediately if FORMS fail."
+  (let ((error-sym (make-symbol "err")))
+    `(parsec-eavesdrop-error ,error-sym
+         (parsec-and ,@forms)
+       (error "%s" (parsec-error-str ,error-sym)))))
+
+(defmacro parsec-ensure-with-error-message (msg &rest forms)
+  "Exit the program immediately with MSG if FORMS fail."
+  (declare (indent 1))
+  `(parsec-ensure
+    (parsec-with-error-message ,msg
+      (parsec-and ,@forms))))
+
+(defmacro parsec-many (parser)
+  "Apply the PARSER zero or more times and return a list of the results."
+  (let ((res-sym (make-symbol "results")))
+    `(let (,res-sym)
+       (parsec-protect-atom parsec-many
+         (parsec-start
+          (while (not (eobp))
+            (push (parsec-make-atom parsec-many ,parser) ,res-sym))))
+       (nreverse ,res-sym))))
+
+(defmacro parsec-many1 (parser)
+  "Apply the PARSER one or more times and return a list of the results."
+  `(cons ,parser (parsec-many ,parser)))
+
+(defsubst parsec-list-to-string (l)
+  (if (stringp l)
+      l
+    (mapconcat #'identity l "")))
+
+(defmacro parsec-many-as-string (parser)
+  "Apply the PARSER zero or more times and return the results as a string."
+  `(mapconcat #'identity (parsec-many ,parser) ""))
+
+(defalias 'parsec-many-s 'parsec-many-as-string)
+
+(defmacro parsec-many1-as-string (parser)
+  "Apply the PARSER one or more times and return the results as a string."
+  `(mapconcat #'identity (parsec-many1 ,parser) ""))
+
+(defalias 'parsec-many1-s 'parsec-many1-as-string)
+
+(defmacro parsec-many-till (parser end &optional type)
+  "Apply PARSER zero or more times until END succeeds.
+The return value is determined by TYPE.  If TYPE is `:both', return
+the cons `(many . end)'.  If TYPE is `:end', return the result of END.
+In other cases, return the result of PARSER.
+
+Used to scan comments:
+
+> (parsec-and
+>   (parsec-str \"<--\")
+>   (parsec-many-till (parsec-any-ch) (parsec-str \"-->\")))"
+
+  (let ((res-sym (make-symbol "results"))
+        (end-res-sym (make-symbol "end-result")))
+    `(let ((,res-sym nil) ,end-res-sym)
+       (setq ,end-res-sym
+             (catch 'parsec-failed-many-till
+               (while t
+                 (parsec-or (throw 'parsec-failed-many-till ,end)
+                            (push ,parser ,res-sym)))))
+       (setq ,res-sym (nreverse ,res-sym))
+       ,(cond
+         ((eq type :both) `(cons ,res-sym ,end-res-sym))
+         ((eq type :end) end-res-sym)
+         (t res-sym)))))
+
+(defmacro parsec-many-till-as-string (parser end &optional type)
+  "Apply PARSER zero or more times until END succeeds.
+Return the result of PARSER or END as a string.  TYPE has the same
+meaning as `parsec-many-till'."
+  (let ((res-sym (make-symbol "results")))
+    (cond
+     ((eq type :both)
+      `(let ((,res-sym (parsec-many-till ,parser ,end ,type)))
+         (cons (parsec-list-to-string (car ,res-sym))
+               (parsec-list-to-string (cdr ,res-sym)))))
+     (t
+      `(parsec-list-to-string (parsec-many-till ,parser ,end ,type))))))
+
+(defalias 'parsec-many-till-s 'parsec-many-till-as-string)
+
+(defmacro parsec-until (parser &optional type)
+  "Parse any characters until PARSER succeeds.
+TYPE has the same meaning as `parsec-many-till'."
+  `(parsec-many-till (parsec-any-ch) ,parser ,type))
+
+(defmacro parsec-until-as-string (parser &optional type)
+  "Parse any characters until PARSER succeeds.
+Return the result of either part as a string.  TYPE has the same
+meaning as `parsec-many-till'."
+  `(parsec-many-till-as-string (parsec-any-ch) ,parser ,type))
+
+(defalias 'parsec-until-s 'parsec-until-as-string)
+
+(defmacro parsec-not-followed-by (parser)
+  "Succeed only when PARSER fails.  Consume no input."
+  (let ((res-sym (make-symbol "results")))
+    `(catch 'parsec-failed-not-followed-by-out
+       (parsec-try
+        (let ((,res-sym
+               (catch 'parsec-failed-not-followed-by-in
+                 (throw 'parsec-failed-not-followed-by-out
+                        (parsec-or (throw 'parsec-failed-not-followed-by-in 
(parsec-try ,parser))
+                                   nil)))))
+          (parsec-stop :message (format "Unexpected followed by: %s" 
,res-sym)))))))
+
+(defmacro parsec-endby (parser end)
+  "Parse zero or more occurrences of PARSER, separated and ended by END.
+Return a list of values returned by PARSER."
+  `(parsec-many (parsec-return ,parser
+                  ,end)))
+
+(defmacro parsec-sepby (parser separator)
+  "Parse zero or more occurrences of PARSER, separated by SEPARATOR.
+Return a list of values returned by PARSER."
+  `(parsec-or
+    (cons ,parser (parsec-many (parsec-and ,separator ,parser)))
+    nil))
+
+(defmacro parsec-between (open close parser)
+  "Parse OPEN, followed by PARSER and CLOSE.
+Return the value returned by PARSER."
+  `(parsec-and
+     ,open
+     (parsec-return ,parser
+       ,close)))
+
+(defmacro parsec-count (n parser)
+  "Parse N occurrences of PARSER.
+Return a list of N values returned by PARSER."
+  (let ((res-sym (make-symbol "results")))
+    `(let (,res-sym)
+       (dotimes (_ ,n ,res-sym)
+         (push ,parser ,res-sym)))))
+
+(defmacro parsec-count-as-string (n parser)
+  "Parse N occurrences of PARSER.
+Return the N values returned by PARSER as a string."
+  `(parsec-list-to-string (parsec-count ,n ,parser)))
+
+(defalias 'parsec-count-s 'parsec-count-as-string)
+
+(defmacro parsec-option (opt parser)
+  "Try to apply PARSER and return OPT if PARSER fails without comsuming input."
+  `(parsec-or ,parser ,opt))
+
+(defmacro parsec-optional (parser)
+  "Apply PARSER zero or one time.  Fail if PARSER fails after consuming input.
+Return the result of PARSER or nil.
+
+Note this combinator doesn't discard the result of PARSER so it is
+different from the `optional' function of Haskell's Parsec.  If
+you want the Haskell's behavior, use `parsec-optional*'."
+  `(parsec-or ,parser nil))
+
+(defmacro parsec-optional* (parser)
+  "Apply PARSER zero or one time and discard the result.
+Fail if PARSER fails after consuming input.
+
+This combinator has the same behavior as the `optional' function of
+Haskell's Parsec."
+  `(parsec-and ,parser nil))
+
+(defmacro parsec-peek (parser)
+  "Apply PARSER without consuming any input.
+When PARSER succeeds, the result of the PARSER is returned.
+Otherwise, the return value is an error.  Use `parsec-error-p' on
+the return value to see whether the PARSER fails or not.  Use
+`parsec-peek-p' if you want nil to be returned when PARSER fails.
+
+This is a shortcut of combining `parsec-start', `parsec-try' and
+`parsec-lookahead'.  Since arbitrary parser is allowed, this
+function can be viewed as a more powerful version of `looking-at'
+in Emacs Lisp."
+  `(parsec-start
+    (parsec-try
+     (parsec-lookahead ,parser))))
+
+(defmacro parsec-peek-p (parser)
+  "Same as `parsec-peek' except a nil is returned when the PARSER fails."
+  (let ((res-sym (make-symbol "res")))
+    `(let ((,res-sym (parsec-peek ,parser)))
+       (unless (parsec-error-p ,res-sym)
+         ,res-sym))))
+
+(defmacro parsec-query (parser &rest args)
+  "Get an alternative return value of the PARSER specified by the ARGS.
+
+The args can be in the following forms:
+
+    :beg      --> return the point before applying the PARSER
+    :end      --> return the point after applying the PARSER
+    :nil      --> return nil
+    :groups N --> return Nth group for `parsec-re'."
+  (let ((orig-pt-sym (make-symbol "orig-pt"))
+        (res-sym (make-symbol "results")))
+    `(let ((,orig-pt-sym (point))
+           (,res-sym ,parser))
+       ,(cond
+         ((memq :beg args) orig-pt-sym)
+         ((memq :end args) '(point))
+         ((memq :nil args) nil)
+         ((and (memq :group args)
+               (consp parser)
+               (eq (car parser) 'parsec-re))
+          (let ((group
+                 (cl-loop named outer for arg on args
+                          when (eq (car arg) :group) do
+                          (cl-return-from outer (cadr arg)))))
+            (if (and group (integerp group))
+                `(match-string ,group)
+              (error "Invalid query :group %s" group))))
+         (t res-sym)))))
+
+(defsubst parsec-just (x) (cons 'Just x))
+
+(defconst parsec-nothing 'Nothing)
+
+(defun parsec-maybe-p (x)
+  (or (eq x parsec-nothing)
+      (and
+       (consp x)
+       (eq (car x) 'Just))))
+
+(defun parsec-from-maybe (x)
+  "Retrieve the value from Maybe monad X.
+If X is `(Just . p)', return p. Otherwise return nil."
+  (and (consp x)
+       (eq (car x) 'Just)
+       (cdr x)))
+
+(defmacro parsec-optional-maybe (parser)
+  "Apply PARSER zero or one time and return the value in a Maybe monad.
+If PARSER fails without consuming any input, return `parsec-nothing'.
+Otherwise, return `(Just . p)' where p is the result of PARSER."
+  (let ((res-sym (make-symbol "result")))
+    `(let ((,res-sym (parsec-optional ,parser)))
+       (if ,res-sym
+           (parsec-just ,res-sym)
+         parsec-nothing))))
+
+(defun parsec-newline ()
+  "Parse a newline character \"\\n\"."
+  (parsec-ch ?\n))
+
+(defun parsec-crlf ()
+  "Parse a carriage return (\'\\r\') followed by a newline \"\\n\"."
+  (parsec-and (parsec-ch ?\r) (parsec-ch ?\n)))
+
+(defun parsec-eol ()
+  "Parse a newline or a CRLF and return \"\\n\"."
+  (parsec-or (parsec-newline) (parsec-crlf)))
+
+(defun parsec-eob ()
+  "Indicate the end of file (buffer)."
+  (unless (eobp)
+    (parsec-stop :expected "`EOF'"
+                 :found (parsec-eof-or-char-as-string))))
+
+(defalias 'parsec-eof 'parsec-eob)
+
+(defun parsec-eol-or-eof ()
+  "Indicate either eol or eof."
+  (parsec-or (parsec-eol) (parsec-eof)))
+
+(defmacro parsec-with-input (input &rest parsers)
+  "With INPUT, start parsing by applying PARSERS sequentially."
+  (declare (indent 1))
+  `(with-temp-buffer
+     (insert ,input)
+     (goto-char (point-min))
+     (parsec-start
+      ,@parsers)))
+
+(provide 'parsec)
+;;; parsec.el ends here
diff --git a/packages/seq/seq-24.el b/packages/seq/seq-24.el
index 04688d3..3f9cd88 100644
--- a/packages/seq/seq-24.el
+++ b/packages/seq/seq-24.el
@@ -371,6 +371,13 @@ SEQUENCE must be a sequence of numbers or markers."
 SEQUENCE must be a sequence of numbers or markers."
   (apply #'max (seq-into sequence 'list)))
 
+(defun seq-random-elt (sequence)
+  "Return a random element from SEQUENCE.
+Signal an error if SEQUENCE is empty."
+  (if (seq-empty-p sequence)
+      (error "Sequence cannot be empty")
+    (seq-elt sequence (random (seq-length sequence)))))
+
 (defun seq--drop-list (list n)
   "Return a list from LIST without its first N elements.
 This is an optimization for lists in `seq-drop'."
diff --git a/packages/seq/seq-25.el b/packages/seq/seq-25.el
index a497f70..c2268dd 100644
--- a/packages/seq/seq-25.el
+++ b/packages/seq/seq-25.el
@@ -91,7 +91,7 @@ given, and the match does not fail."
 
 ARGS can also include the `&rest' marker followed by a variable
 name to be bound to the rest of SEQUENCE."
-  (declare (indent 2) (debug t))
+  (declare (indent 2) (debug (sexp form body)))
   `(pcase-let ((,(seq--make-pcase-patterns args) ,sequence))
      ,@body))
 
@@ -494,5 +494,12 @@ SEQUENCE must be a sequence of numbers or markers."
 If no element is found, return nil."
   (ignore-errors (seq-elt sequence n))))
 
+(cl-defgeneric seq-random-elt (sequence)
+  "Return a random element from SEQUENCE.
+Signal an error if SEQUENCE is empty."
+  (if (seq-empty-p sequence)
+      (error "Sequence cannot be empty")
+    (seq-elt sequence (random (seq-length sequence)))))
+
 (provide 'seq-25)
 ;;; seq-25.el ends here
diff --git a/packages/seq/seq.el b/packages/seq/seq.el
index 9f96ec8..6bbb307 100644
--- a/packages/seq/seq.el
+++ b/packages/seq/seq.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: sequences
-;; Version: 2.16
+;; Version: 2.19
 ;; Package: seq
 
 ;; Maintainer: address@hidden
diff --git a/packages/seq/tests/seq-tests.el b/packages/seq/tests/seq-tests.el
index cf3da78..5d729b1 100644
--- a/packages/seq/tests/seq-tests.el
+++ b/packages/seq/tests/seq-tests.el
@@ -350,5 +350,20 @@ Evaluate BODY for each created sequence.
     (should (equal (seq-sort-by #'seq-length #'> seq)
                    ["xxx" "xx" "x"]))))
 
+(ert-deftest test-seq-random-elt-take-all ()
+  (let ((seq '(a b c d e))
+        (elts '()))
+    (should (= 0 (length elts)))
+    (dotimes (_ 1000)
+      (let ((random-elt (seq-random-elt seq)))
+        (add-to-list 'elts
+                     random-elt)))
+    (should (= 5 (length elts)))))
+
+(ert-deftest test-seq-random-elt-signal-on-empty ()
+  (should-error (seq-random-elt nil))
+  (should-error (seq-random-elt []))
+  (should-error (seq-random-elt "")))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here
diff --git a/packages/sml-mode/sml-mode.el b/packages/sml-mode/sml-mode.el
index f4adf11..dc51c99 100644
--- a/packages/sml-mode/sml-mode.el
+++ b/packages/sml-mode/sml-mode.el
@@ -556,7 +556,6 @@ Regexp match data 0 points to the chars."
     (`(:before . "withtype") 0)
     (`(:before . "d=")
      (cond
-      ((smie-rule-parent-p "fun") 2)
       ((smie-rule-parent-p "datatype") (if (smie-rule-bolp) 2))
       ((smie-rule-parent-p "structure" "signature" "functor") 0)))
     ;; Indent an expression starting with "local" as if it were starting
diff --git a/packages/sml-mode/testcases.sml b/packages/sml-mode/testcases.sml
index 4ed3312..7ed53f7 100644
--- a/packages/sml-mode/testcases.sml
+++ b/packages/sml-mode/testcases.sml
@@ -1,4 +1,4 @@
-(* Copyright 1999,2004,2007,2010-2012,2014 Stefan Monnier <address@hidden> *)
+(* Copyright 1999,2004,2007,2010-2016 Stefan Monnier <address@hidden> *)
 
 (* sml-mode here treats the second `=' as an equal op because it
  * thinks it's seeing something like "... type t = (s.t = ...)".  FIXME!  *)
@@ -71,6 +71,11 @@ type node' = node
 type obj = t
 end
 
+fun test1 None =
+    4
+  | test1 (Some x) =
+    5
+
 datatype exp_node
   = Let of varpat_t list * rhs_t * exp_t
   | Do of simpleexp_t * exp_t
diff --git a/packages/sotlisp/sotlisp.el b/packages/sotlisp/sotlisp.el
index 2ceb382..792fe1d 100644
--- a/packages/sotlisp/sotlisp.el
+++ b/packages/sotlisp/sotlisp.el
@@ -6,7 +6,7 @@
 ;; URL: https://github.com/Malabarba/speed-of-thought-lisp
 ;; Keywords: convenience, lisp
 ;; Package-Requires: ((emacs "24.1"))
-;; Version: 1.5.2
+;; Version: 1.6.2
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -81,6 +81,7 @@
 ;;   (with-temp-buffer (insert text))
 
 ;;; Code:
+(require 'skeleton)
 
 ;;; Predicates
 (defun sotlisp--auto-paired-p ()
@@ -101,7 +102,7 @@ Specially, avoids matching inside argument lists."
        (not (sotlisp--looking-back 
"(\\(defun\\s-+.*\\|\\(lambda\\|dolist\\|dotimes\\)\\s-+\\)("))
        (save-excursion
          (forward-char -1)
-         (condition-case er
+         (condition-case nil
              (progn
                (backward-up-list)
                (forward-sexp -1)
@@ -203,8 +204,14 @@ See `sotlisp-define-function-abbrev'."
     (skip-chars-backward (rx alnum))
     (let* ((name (buffer-substring (point) r))
            (expansion (gethash name sotlisp--function-table)))
-      (if (not expansion)
-          (progn (goto-char r) nil)
+      (cond
+       ((not expansion) (progn (goto-char r) nil))
+       ((consp expansion)
+        (delete-region (point) r)
+        (let ((skeleton-end-newline nil))
+          (skeleton-insert (cons "" expansion)))
+        t)
+       ((stringp expansion)
         (delete-region (point) r)
         (if (sotlisp--function-quote-p)
             ;; After #' use the simple expansion.
@@ -214,7 +221,7 @@ See `sotlisp-define-function-abbrev'."
           (when (string-match "\\$" expansion)
             (setq sotlisp--needs-moving t)))
         ;; Must be last.
-        (sotlisp--post-expansion-cleanup)))))
+        (sotlisp--post-expansion-cleanup))))))
 
 (put 'sotlisp--expand-function 'no-self-insert t)
 
@@ -295,12 +302,12 @@ The space char is not included.  Any \"$\" are also 
removed."
     ("jos" . "just-one-space")
     ("jr" . "json-read$")
     ("jtr" . "jump-to-register ")
-    ("k" . "kbd \"$\"")
+    ("k" . ("kbd " (format "%S" (key-description (read-key-sequence-vector 
"Key: ")))))
     ("kb" . "kill-buffer")
     ("kn" . "kill-new ")
     ("kp" . "keywordp ")
     ("l" . "lambda ($)")
-    ("la" . "looking-at \"$\"")
+    ("la" . ("looking-at \"" - "\""))
     ("lap" . "looking-at-p \"$\"")
     ("lb" . "looking-back \"$\"")
     ("lbp" . "line-beginning-position")
diff --git a/packages/spinner/spinner.el b/packages/spinner/spinner.el
index 24e9cea..da75a8f 100644
--- a/packages/spinner/spinner.el
+++ b/packages/spinner/spinner.el
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2015 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <address@hidden>
-;; Version: 1.7.1
+;; Version: 1.7.3
 ;; URL: https://github.com/Malabarba/spinner.el
 ;; Keywords: processes mode-line
 
@@ -183,7 +183,7 @@ own spinner animations."
   (frames (spinner--type-to-frames type))
   (counter 0)
   (fps (or frames-per-second spinner-frames-per-second))
-  (timer (timer-create) :read-only)
+  (timer (timer-create))
   (active-p nil)
   (buffer (when buffer-local
             (if (bufferp buffer-local)
diff --git a/packages/stream/stream.el b/packages/stream/stream.el
index ef19918..afb739f 100644
--- a/packages/stream/stream.el
+++ b/packages/stream/stream.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: stream, laziness, sequences
-;; Version: 2.2.2
+;; Version: 2.2.3
 ;; Package-Requires: ((emacs "25"))
 ;; Package: stream
 
@@ -110,7 +110,7 @@ SEQ can be a list, vector or string."
 (cl-defmethod stream ((buffer buffer) &optional pos)
   "Return a stream of the characters of the buffer BUFFER.
 BUFFER may be a buffer or a string (buffer name).
-The sequence starts at POS if non-nil, 1 otherwise."
+The sequence starts at POS if non-nil, `point-min' otherwise."
   (with-current-buffer buffer
     (unless pos (setq pos (point-min)))
     (if (>= pos (point-max))
@@ -166,11 +166,12 @@ range is infinite."
   (list stream--identifier (thunk-delay nil)))
 
 (defun stream-empty-p (stream)
-  "Return non-nil is STREAM is empty, nil otherwise."
+  "Return non-nil if STREAM is empty, nil otherwise."
   (null (thunk-force (cadr stream))))
 
 (defun stream-first (stream)
-  "Return the first element of STREAM."
+  "Return the first element of STREAM.
+Return nil if STREAM is empty."
   (car (thunk-force (cadr stream))))
 
 (defun stream-rest (stream)
@@ -273,12 +274,13 @@ stream will simply be accordingly shorter, or even 
empty)."
 
 (cl-defmethod seq-take ((stream stream) n)
   "Return a stream of the first N elements of STREAM."
-  (if (or (zerop n)
-          (stream-empty-p stream))
-      (stream-empty)
-    (stream-cons
-     (stream-first stream)
-     (seq-take (stream-rest stream) (1- n)))))
+  (stream-make
+   (if (or (zerop n)
+           (stream-empty-p stream))
+       nil
+     (cons
+      (stream-first stream)
+      (seq-take (stream-rest stream) (1- n))))))
 
 (cl-defmethod seq-drop ((stream stream) n)
   "Return a stream of STREAM without its first N elements."
@@ -327,16 +329,14 @@ kind of nonlocal exit."
 
 (cl-defmethod seq-filter (pred (stream stream))
   "Return a stream of the elements for which (PRED element) is non-nil in 
STREAM."
-  (if (stream-empty-p stream)
-      stream
-    (stream-make
-     (while (not (or (stream-empty-p stream)
-                     (funcall pred (stream-first stream))))
-       (setq stream (stream-rest stream)))
-     (if (stream-empty-p stream)
-         nil
-       (cons (stream-first stream)
-             (seq-filter pred (stream-rest stream)))))))
+  (stream-make
+   (while (not (or (stream-empty-p stream)
+                   (funcall pred (stream-first stream))))
+     (setq stream (stream-rest stream)))
+   (if (stream-empty-p stream)
+       nil
+     (cons (stream-first stream)
+           (seq-filter pred (stream-rest stream))))))
 
 (defmacro stream-delay (expr)
   "Return a new stream to be obtained by evaluating EXPR.
diff --git a/packages/url-http-ntlm/url-http-ntlm.el 
b/packages/url-http-ntlm/url-http-ntlm.el
index 58622ad..841dc6c 100644
--- a/packages/url-http-ntlm/url-http-ntlm.el
+++ b/packages/url-http-ntlm/url-http-ntlm.el
@@ -4,10 +4,10 @@
 
 ;; Author: Tom Schutzer-Weissmann <address@hidden>
 ;; Maintainer: Thomas Fitzsimmons <address@hidden>
-;; Version: 2.0.2
+;; Version: 2.0.3
 ;; Keywords: comm, data, processes, hypermedia
 ;; Homepage: https://code.google.com/p/url-http-ntlm/
-;; Package-Requires: ((cl-lib "0.5") (ntlm "2.0.0"))
+;; Package-Requires: ((cl-lib "0.5") (ntlm "2.1.0"))
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -148,16 +148,9 @@ request to the host in URL's server slot."
 
 (defun url-http-ntlm--get-stage (args)
   "Determine what stage of the NTLM handshake we are at.
-PROMPT and ARGS come from `url-ntlm-auth''s caller,
-`url-get-authentication'.  Their meaning depends on the current
-implementation - this function is well and truly coupled.
-
-`url-get-authentication' calls `url-ntlm-auth' once when checking
-what authentication schemes are supported (PROMPT and ARGS are
-nil), and then twice for every stage of the handshake: the first
-time PROMPT is nil, the second, t; ARGS contains the server
-response's \"WWW-Authenticate\" header, munged by
-`url-parse-args'."
+ARGS comes from `url-ntlm-auth''s caller,
+`url-get-authentication'.  Its meaning depends on the current
+implementation -- this function is well and truly coupled."
   (cl-declare (special url-http-extra-headers))
   (let* ((response-rxp    "^NTLM TlRMTVNTUAADAAA")
         (challenge-rxp    "^TLRMTVNTUAACAAA")
@@ -275,36 +268,47 @@ two-step process, this function expects to be called 
twice, first
 to generate the NTLM type 1 message (request), then to respond to
 the server's type 2 message (challenge) with a suitable response.
 
-PROMPT, OVERWRITE, and REALM are ignored.
+url-get-authentication' calls `url-ntlm-auth' once when checking
+what authentication schemes are supported (PROMPT and ARGS are
+nil), and then twice for every stage of the handshake: the first
+time PROMPT is nil, the second, t; ARGS contains the server
+response's \"WWW-Authenticate\" header, munged by
+`url-parse-args'.
+
+If PROMPT is not t then this function just returns nil.  This is
+to avoid calculating responses twice.
+
+OVERWRITE and REALM are ignored.
 
 ARGS is expected to contain the WWW-Authentication header from
 the server's last response.  These are used by
 `url-http-get-stage' to determine what stage we are at."
-  (url-http-ntlm--ensure-keepalive)
-  (let* ((user-url (url-http-ntlm--ensure-user url))
-        (stage (url-http-ntlm--get-stage args)))
-    (url-debug 'url-http-ntlm "Stage: %s" stage)
-    (cl-case stage
-      ;; NTLM Type 1 message: the request
-      (:request
-       (url-http-ntlm--detect-loop user-url)
-       (cl-destructuring-bind (&optional key hash)
-          (url-http-ntlm--authorization user-url nil realm)
-        (when (cl-third key)
-          (url-http-ntlm--string
-           (ntlm-build-auth-request (cl-second key) (cl-third key))))))
-      ;; NTLM Type 3 message: the response
-      (:response
-       (url-http-ntlm--detect-loop user-url)
-       (let ((challenge (url-http-ntlm--get-challenge)))
-        (cl-destructuring-bind (key hash)
+  (when (eq prompt t)
+    (url-http-ntlm--ensure-keepalive)
+    (let* ((user-url (url-http-ntlm--ensure-user url))
+          (stage (url-http-ntlm--get-stage args)))
+      (url-debug 'url-http-ntlm "Stage: %s" stage)
+      (cl-case stage
+       ;; NTLM Type 1 message: the request
+       (:request
+        (url-http-ntlm--detect-loop user-url)
+        (cl-destructuring-bind (&optional key hash)
             (url-http-ntlm--authorization user-url nil realm)
-          (url-http-ntlm--string
-           (ntlm-build-auth-response challenge
-                                     (cl-second key)
-                                     hash)))))
-      (:error
-       (url-http-ntlm--authorization user-url :clear)))))
+          (when (cl-third key)
+            (url-http-ntlm--string
+           (ntlm-build-auth-request (cl-second key) (cl-third key))))))
+       ;; NTLM Type 3 message: the response
+       (:response
+        (url-http-ntlm--detect-loop user-url)
+        (let ((challenge (url-http-ntlm--get-challenge)))
+          (cl-destructuring-bind (key hash)
+              (url-http-ntlm--authorization user-url nil realm)
+            (url-http-ntlm--string
+             (ntlm-build-auth-response challenge
+                                       (cl-second key)
+                                       hash)))))
+       (:error
+        (url-http-ntlm--authorization user-url :clear))))))
 
 
 ;;; Register `url-ntlm-auth' HTTP authentication method.
diff --git a/packages/validate/validate.el b/packages/validate/validate.el
index 7ca4b0a..f2dcc23 100644
--- a/packages/validate/validate.el
+++ b/packages/validate/validate.el
@@ -4,8 +4,8 @@
 
 ;; Author: Artur Malabarba <address@hidden>
 ;; Keywords: lisp
-;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
-;; Version: 0.5
+;; Package-Requires: ((emacs "24.1") (cl-lib "0.5") (seq "2.16"))
+;; Version: 1.0.2
 
 ;;; Commentary:
 ;;
@@ -96,7 +96,7 @@ If they don't match, return an explanation."
                         ((wtype 'list))
                         (t (let ((subschema (car args)))
                              (seq-some (lambda (v) (validate--check v 
subschema)) value)))))
-               ((const function-item variable-item) (unless (eq value (car 
args))
+               ((const function-item variable-item) (unless (equal value (car 
args))
                                                       "not the expected 
value"))
                (file (cond ((wtype 'string))
                            ((file-exists-p value) nil)
@@ -165,7 +165,7 @@ indicate a failure."
   (let ((report (validate--check value schema)))
     (if report
         (unless noerror
-          (user-error report))
+          (user-error "%s" report))
       value)))
 
 ;;;###autoload
diff --git a/packages/wisi/NEWS b/packages/wisi/NEWS
index 4a9f690..06470ae 100644
--- a/packages/wisi/NEWS
+++ b/packages/wisi/NEWS
@@ -7,7 +7,13 @@ Please send wisi bug reports to address@hidden, with
 'wisi' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* wisi 1.1.4
+31 Oct 2016
+
+** wisi-validate-cache takes optional error-on-fail arg.
+
 * wisi 1.1.3
+26 Jul 2016
 
 ** improve use of quotes in doc strings.
 
diff --git a/packages/wisi/README b/packages/wisi/README
index 3c27c32..82ee858 100644
--- a/packages/wisi/README
+++ b/packages/wisi/README
@@ -1,4 +1,4 @@
-Emacs wisi package 1.1.3
+Emacs wisi package 1.1.4
 
 The wisi package provides utilities for using generalized LALR parsers
 to do indentation and navigation. See ada-mode for an example of its
diff --git a/packages/wisi/wisi.el b/packages/wisi/wisi.el
index 7b7f55e..5a3569a 100644
--- a/packages/wisi/wisi.el
+++ b/packages/wisi/wisi.el
@@ -7,9 +7,9 @@
 ;; Keywords: parser
 ;;  indentation
 ;;  navigation
-;; Version: 1.1.3
+;; Version: 1.1.4
 ;; package-requires: ((cl-lib "0.4") (emacs "24.2"))
-;; URL: http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html
+;; URL: http://www.nongnu.org/ada-mode/wisi/wisi.html
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -680,7 +680,7 @@ If accessing cache at a marker for a token as set by 
`wisi-cache-tokens', POS mu
 (defvar wisi-post-parse-succeed-hook nil
   "Hook run after parse succeeds.")
 
-(defun wisi-validate-cache (pos)
+(defun wisi-validate-cache (pos &optional error-on-fail)
   "Ensure cached data is valid at least up to POS in current buffer."
   (let ((msg (when (> wisi-debug 0) (format "wisi: parsing %s:%d ..." 
(buffer-name) (line-number-at-pos pos)))))
     ;; If wisi-cache-max = pos, then there is no cache at pos; need parse
@@ -722,14 +722,18 @@ If accessing cache at a marker for a token as set by 
`wisi-cache-tokens', POS mu
          ))
       (if wisi-parse-error-msg
          ;; error
-         (when (> wisi-debug 0)
+         (cond
+          ((> wisi-debug 0)
            (message "%s error" msg)
            (wisi-goto-error)
-           (error wisi-parse-error-msg))
+           (error wisi-parse-error-msg)))
        ;; no msg; success
        (when (> wisi-debug 0)
          (message "%s done" msg)))
-      )))
+      )
+    (when (and error-on-fail (not (>= wisi-cache-max pos)))
+      (error "parse failed"))
+    ))
 
 (defun wisi-fontify-region (_begin end)
   "For `jit-lock-functions'."
@@ -1265,7 +1269,7 @@ If LIMIT (a buffer position) is reached, throw an error."
   "If not at a cached token, move forward to next
 cache. Otherwise move to cache-next, or next cache if nil.
 Return cache found."
-  (wisi-validate-cache (point-max)) ;; ensure there is a next cache to move to
+  (wisi-validate-cache (point-max) t) ;; ensure there is a next cache to move 
to
   (let ((cache (wisi-get-cache (point))))
     (if cache
        (let ((next (wisi-cache-next cache)))
@@ -1281,7 +1285,7 @@ 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))
+  (wisi-validate-cache (point) t)
   (let ((cache (wisi-get-cache (point))))
     (if cache
        (let ((prev (wisi-cache-prev cache)))
@@ -1331,7 +1335,7 @@ Return start cache."
   "Move point to token at start of statement point is in or after.
 Return start cache."
   (interactive)
-  (wisi-validate-cache (point))
+  (wisi-validate-cache (point) t)
   (let ((cache (wisi-get-cache (point))))
     (unless cache
       (setq cache (wisi-backward-cache)))
@@ -1340,7 +1344,7 @@ Return start cache."
 (defun wisi-goto-statement-end ()
   "Move point to token at end of statement point is in or before."
   (interactive)
-  (wisi-validate-cache (point))
+  (wisi-validate-cache (point) t)
   (let ((cache (or (wisi-get-cache (point))
                   (wisi-forward-cache))))
     (when (wisi-cache-end cache)
@@ -1409,7 +1413,7 @@ of CACHE with class statement-start or block-start."
 
 (defun wisi-indent-statement ()
   "Indent region given by `wisi-goto-start' on cache at or before point, then 
wisi-cache-end."
-  (wisi-validate-cache (point))
+  (wisi-validate-cache (point) t)
 
   (save-excursion
     (let ((cache (or (wisi-get-cache (point))
@@ -1493,7 +1497,7 @@ correct. Must leave point at indentation of current 
line.")
   (interactive)
   (syntax-propertize (point-max))
   (wisi-invalidate-cache)
-  (wisi-validate-cache (point-max)))
+  (wisi-validate-cache (point-max)) t)
 
 (defun wisi-lex-buffer ()
   (interactive)
diff --git a/packages/yasnippet/.travis.yml b/packages/yasnippet/.travis.yml
index 72aa314..b43d358 100644
--- a/packages/yasnippet/.travis.yml
+++ b/packages/yasnippet/.travis.yml
@@ -16,6 +16,7 @@ install:
   - export PATH=/tmp/emacs/bin:${PATH}
   - if ! emacs -Q --batch --eval "(require 'cl-lib)" ; then
         curl -Lo cl-lib.el http://elpa.gnu.org/packages/cl-lib-0.5.el ;
+        export warnings="'(not cl-functions)" ;
     fi
   - if ! emacs -Q --batch --eval "(require 'ert)" ; then
         curl -LO 
https://raw.githubusercontent.com/ohler/ert/c619b56c5bc6a866e33787489545b87d79973205/lisp/emacs-lisp/ert.el
 &&
@@ -26,3 +27,9 @@ install:
 script:
   - rake compile
   - rake tests
+
+notifications:
+  email:
+    # Default is change, but that includes a new branch's 1st success.
+    on_success: never
+    on_failure: always # The default.
diff --git a/packages/yasnippet/CONTRIBUTING.md 
b/packages/yasnippet/CONTRIBUTING.md
index 7e2ce47..81c0a1f 100644
--- a/packages/yasnippet/CONTRIBUTING.md
+++ b/packages/yasnippet/CONTRIBUTING.md
@@ -26,4 +26,4 @@ there is no separate Changelog file.
 For trivial changes, a message consisting of just the changelog entry
 (the `* foo.el ...` part) is fine.
 
-[bugnote]: 
https://github.com/capitaomorte/yasnippet#important-note-regarding-bug-reporting
+[bugnote]: 
https://github.com/joaotavora/yasnippet#important-note-regarding-bug-reporting
diff --git a/packages/yasnippet/NEWS b/packages/yasnippet/NEWS
index 7f4dec6..6e6629d 100644
--- a/packages/yasnippet/NEWS
+++ b/packages/yasnippet/NEWS
@@ -4,6 +4,52 @@ Copyright (C) 2016 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
+
+* 0.11.0 (Oct 26, 2016)
+** Changes and New Features
+
+*** Modifying buffer in backquoted expressions is deprecated!
+Backquoted expressions should only return a string that will be
+inserted.  Snippets which modify the buffer as a side-effect will now
+trigger a warning.
+
+*** The verbosity levels for messages have been adjusted.
+While the default verbosity level was increased by 1 (it was only
+lower before due to a bug), several messages now only print at the
+level 4, so the overall effect should be less messages by default.
+
+*** Saving and loading snippets has been streamlined.  Saving the
+snippet to a file will now automatically load it.  Additionally, the
+buffer will be renamed from "*new snippet*" to whatever the snippet is
+named.  See also Github #718, #733, and #734.
+
+*** `yas-escape-text' no longer signals an error when given nil.
+
+*** `yas-describe-tables' is split into simpler commands.
+**** `yas-describe-tables' takes a prefix arg to show non-active tables.
+**** New command `yas-describe-tables-by-namehash' shows table by namehash.
+
+*** Use the region contents as the snippet body of new snippets.
+
+*** The dependency on `cl' is removed.
+Yasnippet now only requires `cl-lib'.
+
+** Fixed Bugs
+
+*** Fix field navigation (tabbing) in the backwards direction.
+See Github #722
+
+*** Add support for deprecated yas/ symbols in `yas-define-menu'.
+It was left out by accident.  This support is conditional on
+`yas-alias-to-yas/prefix-p', just like other obsolete yas/ bindings.
+
+*** Fix overriding of snippet by a new snippet with same uuid.
+See Github #714.
+
+*** Fix handling of snippets with 2 mirros on the same line.
+See Github #712.
+
+
 * 0.10.0 (June 11th, 2016)
 
 ** Changes and New Features
@@ -114,7 +160,7 @@ good enough.  See issue #497.
 
 *** Documentation rewritten in org-mode and updated.
 A tremendous effort by Noam Postavsky.  Hopefully easier to maintain
-and navigate.  Available at <http://capitaomorte.github.io/yasnippet>.
+and navigate.  Available at <http://joaotavora.github.io/yasnippet>.
 
 *** Snippets are now maintained in their own repo.
 Snippets live in Andrea Crotti's
@@ -122,7 +168,7 @@ Snippets live in Andrea Crotti's
 for more details.
 
 *** Textmate snippet importer moved to separate `yasmate' repo.
-URL is <https://github.com/capitaomorte/yasmate>.  See README.md for
+URL is <https://github.com/joaotavora/yasmate>.  See README.md for
 more details.
 
 *** `yas-snippet-dirs' now allows symbols as aliases to directories.
diff --git a/packages/yasnippet/README.mdown b/packages/yasnippet/README.mdown
index a3062ea..f4e0594 100644
--- a/packages/yasnippet/README.mdown
+++ b/packages/yasnippet/README.mdown
@@ -20,7 +20,7 @@ YASnippet. Watch [a demo on YouTube][youtube-demo].
 Clone this repository somewhere
 
     $ cd ~/.emacs.d/plugins
-    $ git clone --recursive https://github.com/capitaomorte/yasnippet
+    $ git clone --recursive https://github.com/joaotavora/yasnippet
 
 Add the following in your `.emacs` file:
 
@@ -117,14 +117,14 @@ a way to reproduce the problem exactly like it happened 
to you.
 To do this, we need to rule out interference from external factors
 like other Emacs extensions or your own customisations.
 
-Here's an example report that "sandboxes" an Emacs session just for 
+Here's an example report that "sandboxes" an Emacs session just for
 reproducing a bug.
 
 ```
 $ emacs --version
 Emacs 24.3
 $ cd /tmp/
-$ git clone https://github.com/capitaomorte/yasnippet.git yasnippet-bug
+$ git clone https://github.com/joaotavora/yasnippet.git yasnippet-bug
 $ cd yasnippet-bug
 $ git log -1 --oneline
 6053db0 Closes #527: Unbreak case where yas-fallback-behaviour is a list
@@ -138,11 +138,11 @@ OR
 When loading yasnippet I see "Error: failed to frobnicate"!
 ```
 
-Using `emacs -Q` or temporarily moving your `.emacs` init file to the side 
+Using `emacs -Q` or temporarily moving your `.emacs` init file to the side
 is another way to achieve good reproducibility.
 
 Here's a
-[another example](https://github.com/capitaomorte/yasnippet/issues/318)
+[another example](https://github.com/joaotavora/yasnippet/issues/318)
 of a bug report. It has everything needed for a successful analysis
 and speedy resolution.
 
@@ -162,10 +162,10 @@ request).
 Finally, thank you very much for using YASnippet!
 
 [docs]: http://joaotavora.github.io/yasnippet/
-[issues]: https://github.com/capitaomorte/yasnippet/issues
+[issues]: https://github.com/joaotavora/yasnippet/issues
 [googlecode tracker]: http://code.google.com/p/yasnippet/issues/list
 [forum]: http://groups.google.com/group/smart-snippet
 [melpa]: http://melpa.milkbox.net/
-[yasmate]: http://github.com/capitaomorte/yasmate
+[yasmate]: http://github.com/joaotavora/yasmate
 [textmate-to-yas.el]: https://github.com/mattfidler/textmate-to-yas.el
 [yasnippet-snippets]: http://github.com/AndreaCrotti/yasnippet-snippets
diff --git a/packages/yasnippet/Rakefile b/packages/yasnippet/Rakefile
index f88237b..48a2086 100644
--- a/packages/yasnippet/Rakefile
+++ b/packages/yasnippet/Rakefile
@@ -98,8 +98,12 @@ end
 desc "Compile yasnippet.el into yasnippet.elc"
 
 rule '.elc' => '.el' do |t|
+  set_warnings = ""
+  if ENV['warnings']
+    set_warnings = " --eval \"(setq byte-compile-warnings 
#{ENV['warnings']})\""
+  end
   sh "#{$EMACS} --batch -L . --eval \"(setq byte-compile-error-on-warn t)\"" +
-     " -f batch-byte-compile #{t.source}"
+     "#{set_warnings} -f batch-byte-compile #{t.source}"
 end
 task :compile => FileList["yasnippet.el"].ext('elc')
 
diff --git a/packages/yasnippet/doc/index.org b/packages/yasnippet/doc/index.org
index f99b3f7..c5e0be3 100644
--- a/packages/yasnippet/doc/index.org
+++ b/packages/yasnippet/doc/index.org
@@ -3,7 +3,7 @@
 
 The YASnippet documentation has been split into separate parts:
 
-0. 
[[https://github.com/capitaomorte/yasnippet/blob/master/README.mdown][README]]
+0. [[https://github.com/joaotavora/yasnippet/blob/master/README.mdown][README]]
 
    Contains an introduction, installation instructions and other important
    notes.
diff --git a/packages/yasnippet/doc/nav-menu.html.inc 
b/packages/yasnippet/doc/nav-menu.html.inc
index b31ec94..2a3f0a1 100644
--- a/packages/yasnippet/doc/nav-menu.html.inc
+++ b/packages/yasnippet/doc/nav-menu.html.inc
@@ -1,7 +1,7 @@
 <nav>
   <ul class="center">
     <li> <a href="index.html">Overview</a>
-    <li> <a 
href="https://github.com/capitaomorte/yasnippet/blob/master/README.mdown";>
+    <li> <a 
href="https://github.com/joaotavora/yasnippet/blob/master/README.mdown";>
         Intro and Tutorial</a>
     <li class="center">Snippet
       <ul>
diff --git a/packages/yasnippet/doc/snippet-development.org 
b/packages/yasnippet/doc/snippet-development.org
index 4fd293d..ffe648c 100644
--- a/packages/yasnippet/doc/snippet-development.org
+++ b/packages/yasnippet/doc/snippet-development.org
@@ -209,7 +209,7 @@ back-quotes (=`=). The lisp forms are evaluated when the 
snippet is
 being expanded. The evaluation is done in the same buffer as the
 snippet being expanded.
 
-Here's an example for c-mode` to calculate the header file guard
+Here's an example for c-mode to calculate the header file guard
 dynamically:
 
 #+BEGIN_SRC snippet
@@ -235,6 +235,27 @@ to "wrap" the selected region inside your recently 
inserted snippet.
 Alternatively, you can also customize the variable
 [[sym:yas-wrap-around-region][=yas-wrap-around-region=]] to =t= which will do 
this automatically.
 
+*** Note: backquote expressions should not modify the buffer
+
+Please note that the lisp forms in backquotes should *not* modify the
+buffer, doing so will trigger a warning.  For example, instead of
+doing
+
+#+BEGIN_SRC snippet
+  Timestamp: `(insert (current-time-string))`
+#+END_SRC
+
+do this:
+#+BEGIN_SRC snippet
+  Timestamp: `(current-time-string)`
+#+END_SRC
+
+The warning may be suppressed with the following code in your init file:
+#+BEGIN_SRC emacs-lisp
+  (add-to-list 'warning-suppress-types '(yasnippet backquote-change))
+#+END_SRC
+
+
 ** Tab stop fields
 
 Tab stops are fields that you can navigate back and forth by =TAB= and
diff --git a/packages/yasnippet/doc/snippet-expansion.org 
b/packages/yasnippet/doc/snippet-expansion.org
index f57df95..4bd133b 100644
--- a/packages/yasnippet/doc/snippet-expansion.org
+++ b/packages/yasnippet/doc/snippet-expansion.org
@@ -193,11 +193,11 @@ block or a string (e.g. in =python-mode=).
 
 If you use the =# condition := directive (see
 [[./snippet-development.org][Writing Snippets]]) you could just specify
-the condition for =if= to be =(not (python-in-string/comment))=. But how
+the condition for =if= to be =(not (python-syntax-comment-or-string-p))=. But 
how
 about =while=, =for=, etc. ? Writing the same condition for all the
 snippets is just boring. So has a buffer local variable
 [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]]. You can set 
this variable to
-=(not (python-in-string/comment))= in =python-mode-hook=.
+=(not (python-syntax-comment-or-string-p))= in =python-mode-hook=.
 
 Then, what if you really want some particular snippet to expand even
 inside a comment? Set 
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] like this
@@ -206,7 +206,7 @@ inside a comment? Set 
[[sym:yas-buffer-local-condition][=yas-buffer-local-condit
   (add-hook 'python-mode-hook
             (lambda ()
               (setq yas-buffer-local-condition
-                    '(if (python-in-string/comment)
+                    '(if (python-syntax-comment-or-string-p)
                          '(require-snippet-condition . force-in-comment)
                        t))))
 #+END_SRC
diff --git a/packages/yasnippet/yasnippet-tests.el 
b/packages/yasnippet/yasnippet-tests.el
index 47b6e1f..6b7a91a 100644
--- a/packages/yasnippet/yasnippet-tests.el
+++ b/packages/yasnippet/yasnippet-tests.el
@@ -27,7 +27,7 @@
 (require 'yasnippet)
 (require 'ert)
 (require 'ert-x)
-(require 'cl)
+(require 'cl-lib)
 
 
 ;;; Snippet mechanics
@@ -38,14 +38,17 @@
 (ert-deftest field-navigation ()
   (with-temp-buffer
     (yas-minor-mode 1)
-    (yas-expand-snippet "${1:brother} from another ${2:mother}")
+    (yas-expand-snippet "${1:brother} from ${2:another} ${3:mother}")
     (should (string= (yas--buffer-contents)
                      "brother from another mother"))
-
     (should (looking-at "brother"))
     (ert-simulate-command '(yas-next-field-or-maybe-expand))
+    (should (looking-at "another"))
+    (ert-simulate-command '(yas-next-field-or-maybe-expand))
     (should (looking-at "mother"))
     (ert-simulate-command '(yas-prev-field))
+    (should (looking-at "another"))
+    (ert-simulate-command '(yas-prev-field))
     (should (looking-at "brother"))))
 
 (ert-deftest simple-mirror ()
@@ -227,13 +230,32 @@ end" (buffer-string)))
 No indent$>
 end" (buffer-string)))))
 
+(ert-deftest single-line-multi-mirror-indentation ()
+  "Make sure not to indent with multiple mirrors per line."
+  ;; See also Github issue #712.
+  (with-temp-buffer
+    (text-mode)
+    (yas-minor-mode 1)
+    (yas-expand-snippet "${1:XXXXX} --------
+$1   ---------------- $1 ----
+$1   ------------------------")
+    (should (string= (yas--buffer-contents) "XXXXX --------
+XXXXX   ---------------- XXXXX ----
+XXXXX   ------------------------"))))
+
+(ert-deftest indent-mirrors-on-update ()
+  "Check that mirrors are always kept indented."
+  (with-temp-buffer
+    (ruby-mode)
+    (yas-minor-mode 1)
+    (yas-expand-snippet "def $1\n$1\nend")
+    (yas-mock-insert "xxx")
+    ;; Assuming 2 space indent.
+    (should (string= "def xxx\n  xxx\nend" (buffer-string)))))
 
-(ert-deftest navigate-a-snippet-with-multiline-mirrors-issue-665 ()
-  "In issue 665, a multi-line mirror is attempted.
 
-Indentation doesn't (yet) happen on these mirrors, but let this
-test guard against any misnavigations that might be introduced by
-an incorrect implementation of mirror auto-indentation"
+(ert-deftest snippet-with-multiline-mirrors-issue-665 ()
+  "In issue 665, a multi-line mirror is attempted."
   (with-temp-buffer
     (ruby-mode)
     (yas-minor-mode 1)
@@ -246,8 +268,9 @@ mapconcat #'(lambda (arg)
     (ert-simulate-command '(yas-next-field))
     (let ((expected (mapconcat #'identity
                                '("@bla = bla"
-                                 "[[:blank:address@hidden = ble"
-                                 "[[:blank:address@hidden = bli")
+                                 ;; assume ruby is always indented to 2 spaces
+                                 "  @ble = ble"
+                                 "  @bli = bli")
                                "\n")))
       (should (looking-at expected))
       (yas-mock-insert "blo")
@@ -503,48 +526,16 @@ TODO: correct this bug!"
 
 ;;; Loading
 ;;;
-(defun yas--call-with-temporary-redefinitions (function
-                                               &rest 
function-names-and-overriding-functions)
-  (let* ((overrides (remove-if-not #'(lambda (fdef)
-                                       (fboundp (first fdef)))
-                                   function-names-and-overriding-functions))
-         (definition-names (mapcar #'first overrides))
-         (overriding-functions (mapcar #'second overrides))
-         (saved-functions (mapcar #'symbol-function definition-names)))
-    ;; saving all definitions before overriding anything ensures FDEFINITION
-    ;; errors don't cause accidental permanent redefinitions.
-    ;;
-    (cl-labels ((set-fdefinitions (names functions)
-                                  (loop for name in names
-                                        for fn in functions
-                                        do (fset name fn))))
-      (set-fdefinitions definition-names overriding-functions)
-      (unwind-protect (funcall function)
-       (set-fdefinitions definition-names saved-functions)))))
-
-(defmacro yas--with-temporary-redefinitions (fdefinitions &rest body)
-  ;; "Temporarily (but globally) redefine each function in FDEFINITIONS.
-  ;; E.g.: (yas--with-temporary-redefinitions ((foo (x) ...)
-  ;;                                           (bar (x) ...))
-  ;;         ;; code that eventually calls foo, bar of (setf foo)
-  ;;         ...)"
-  ;; FIXME: This is hideous!  Better use defadvice (or at least letf).
-  `(yas--call-with-temporary-redefinitions
-    (lambda () ,@body)
-    ,@(mapcar #'(lambda (thingy)
-                  `(list ',(first thingy)
-                         (lambda ,@(rest thingy))))
-              fdefinitions)))
 
 (defmacro yas-with-overriden-buffer-list (&rest body)
   (let ((saved-sym (make-symbol "yas--buffer-list")))
     `(let ((,saved-sym (symbol-function 'buffer-list)))
-       (yas--with-temporary-redefinitions
-           ((buffer-list ()
-                         (remove-if #'(lambda (buf)
-                                        (with-current-buffer buf
-                                          (eq major-mode 
'lisp-interaction-mode)))
-                                    (funcall ,saved-sym))))
+       (cl-letf (((symbol-function 'buffer-list)
+                  (lambda ()
+                    (cl-remove-if (lambda (buf)
+                                    (with-current-buffer buf
+                                      (eq major-mode 'lisp-interaction-mode)))
+                                  (funcall ,saved-sym)))))
          ,@body))))
 
 
@@ -587,20 +578,71 @@ TODO: correct this bug!"
   (yas-with-some-interesting-snippet-dirs
    (yas-reload-all)
    (yas-recompile-all)
-   (yas--with-temporary-redefinitions ((yas--load-directory-2
-                                        (&rest _dummies)
-                                        (ert-fail "yas--load-directory-2 
shouldn't be called when snippets have been compiled")))
+   (cl-letf (((symbol-function 'yas--load-directory-2)
+              (lambda (&rest _dummies)
+                (ert-fail "yas--load-directory-2 shouldn't be called when 
snippets have been compiled"))))
      (yas-reload-all)
      (yas--basic-jit-loading-1))))
 
+(ert-deftest snippet-load-uuid ()
+  "Test snippets with same uuid override old ones."
+  (yas-saving-variables
+   (yas-define-snippets
+    'text-mode
+    '(("1" "one" "one" nil nil nil nil "C-c 1" "uuid-1")
+      ("2" "two" "two" nil nil nil nil nil "uuid-2")))
+   (with-temp-buffer
+     (text-mode)
+     (yas-minor-mode +1)
+     (should (equal (yas-lookup-snippet "one") "one"))
+     (should (eq (key-binding "\C-c1") 'yas-expand-from-keymap))
+     (yas-define-snippets
+      'text-mode '(("_1" "one!" "won" nil nil nil nil nil "uuid-1")))
+     (should (null (yas-lookup-snippet "one" nil 'noerror)))
+     (should (null (key-binding "\C-c1")))
+     (should (equal (yas-lookup-snippet "won") "one!")))))
+
+(ert-deftest snippet-save ()
+  "Make sure snippets can be saved correctly."
+  (yas-saving-variables
+   (yas-with-snippet-dirs
+    '((".emacs.d/snippets"
+       ("text-mode")))
+    (cl-letf (((symbol-function 'y-or-n-p) (lambda (&rest _) t))
+              ((symbol-function 'read-file-name)
+               (lambda (_prompt &optional _dir _default _mustmatch initial 
_predicate)
+                 (expand-file-name initial)))
+              ((symbol-function 'completing-read)
+               (lambda (_prompt collection &rest _)
+                 (or (car collection) ""))))
+      (with-temp-buffer
+        (text-mode)
+        (yas-minor-mode +1)
+        (save-current-buffer
+          (yas-new-snippet t)
+          (with-current-buffer "*new snippet*"
+            (snippet-mode)
+            (insert "# name: foo\n# key: bar\n# --\nsnippet foo")
+            (call-interactively 'yas-load-snippet-buffer-and-close)))
+        (save-current-buffer
+          (yas-new-snippet t)
+          (with-current-buffer "*new snippet*"
+            (snippet-mode)
+            (insert "# name: bar\n# key: bar\n# --\nsnippet bar")
+            (call-interactively 'yas-load-snippet-buffer-and-close)))
+        (should (file-readable-p
+                 (expand-file-name "foo" (car yas-snippet-dirs))))
+        (should (file-readable-p
+                 (expand-file-name "bar" (car yas-snippet-dirs)))))))))
+
 (ert-deftest visiting-compiled-snippets ()
   "Test snippet visiting for compiled snippets."
   (yas-with-some-interesting-snippet-dirs
    (yas-recompile-all)
    (yas-reload-all 'no-jit) ; must be loaded for `yas-lookup-snippet' to work.
-   (yas--with-temporary-redefinitions ((find-file-noselect
-                                        (filename &rest _)
-                                        (throw 'yas-snippet-file filename)))
+   (cl-letf (((symbol-function 'find-file-noselect)
+              (lambda (filename &rest _)
+                (throw 'yas-snippet-file filename))))
      (should (string-suffix-p
               "cc-mode/def"
               (catch 'yas-snippet-file
@@ -766,12 +808,12 @@ TODO: correct this bug!"
      (let ((menu (cdr (gethash 'fancy-mode yas--menu-table))))
        (should (eql 4 (length menu)))
        (dolist (item '("a-guy" "a-beggar"))
-         (should (find item menu :key #'third :test #'string=)))
-       (should-not (find "an-outcast" menu :key #'third :test #'string=))
+         (should (cl-find item menu :key #'cl-third :test #'string=)))
+       (should-not (cl-find "an-outcast" menu :key #'cl-third :test #'string=))
        (dolist (submenu '("sirs" "ladies"))
          (should (keymapp
-                  (fourth
-                   (find submenu menu :key #'third :test #'string=)))))
+                  (cl-fourth
+                   (cl-find submenu menu :key #'cl-third :test #'string=)))))
        ))))
 
 (ert-deftest test-group-menus ()
@@ -784,19 +826,19 @@ TODO: correct this bug!"
      (let ((menu (cdr (gethash 'c-mode yas--menu-table))))
        (should (eql 3 (length menu)))
        (dolist (item '("printf" "foo-group-a" "foo-group-b"))
-         (should (find item menu :key #'third :test #'string=)))
+         (should (cl-find item menu :key #'cl-third :test #'string=)))
        (dolist (submenu '("foo-group-a" "foo-group-b"))
          (should (keymapp
-                  (fourth
-                   (find submenu menu :key #'third :test #'string=))))))
+                  (cl-fourth
+                   (cl-find submenu menu :key #'cl-third :test #'string=))))))
      ;; now group directives
      ;;
      (let ((menu (cdr (gethash 'lisp-interaction-mode yas--menu-table))))
        (should (eql 1 (length menu)))
-       (should (find "barbar" menu :key #'third :test #'string=))
+       (should (cl-find "barbar" menu :key #'cl-third :test #'string=))
        (should (keymapp
-                (fourth
-                 (find "barbar" menu :key #'third :test #'string=))))))))
+                (cl-fourth
+                 (cl-find "barbar" menu :key #'cl-third :test #'string=))))))))
 
 (ert-deftest test-group-menus-twisted ()
   "Same as similarly named test, but be mean.
@@ -808,20 +850,20 @@ TODO: be meaner"
      ;; behaviour
      (with-temp-buffer
        (insert "# group: foo-group-c\n# --\nstrecmp($1)")
-       (write-region nil nil (concat (first (yas-snippet-dirs))
+       (write-region nil nil (concat (car (yas-snippet-dirs))
                                      "/c-mode/foo-group-b/strcmp")))
      (yas-reload-all 'no-jit)
      (let ((menu (cdr (gethash 'c-mode yas--menu-table))))
        (should (eql 4 (length menu)))
        (dolist (item '("printf" "foo-group-a" "foo-group-b" "foo-group-c"))
-         (should (find item menu :key #'third :test #'string=)))
+         (should (cl-find item menu :key #'cl-third :test #'string=)))
        (dolist (submenu '("foo-group-a" "foo-group-b" "foo-group-c"))
          (should (keymapp
-                  (fourth
-                   (find submenu menu :key #'third :test #'string=))))))
+                  (cl-fourth
+                   (cl-find submenu menu :key #'cl-third :test #'string=))))))
      ;; delete the .yas-make-groups file and watch behaviour
      ;;
-     (delete-file (concat (first (yas-snippet-dirs))
+     (delete-file (concat (car (yas-snippet-dirs))
                           "/c-mode/.yas-make-groups"))
      (yas-reload-all 'no-jit)
      (let ((menu (cdr (gethash 'c-mode yas--menu-table))))
@@ -829,19 +871,19 @@ TODO: be meaner"
      ;; Change a group directive and reload
      ;;
      (let ((menu (cdr (gethash 'lisp-interaction-mode yas--menu-table))))
-       (should (find "barbar" menu :key #'third :test #'string=)))
+       (should (cl-find "barbar" menu :key #'cl-third :test #'string=)))
 
      (with-temp-buffer
        (insert "# group: foofoo\n# --\n(ert-deftest ${1:name} () $0)")
-       (write-region nil nil (concat (first (yas-snippet-dirs))
+       (write-region nil nil (concat (car (yas-snippet-dirs))
                                      "/lisp-interaction-mode/ert-deftest")))
      (yas-reload-all 'no-jit)
      (let ((menu (cdr (gethash 'lisp-interaction-mode yas--menu-table))))
        (should (eql 1 (length menu)))
-       (should (find "foofoo" menu :key #'third :test #'string=))
+       (should (cl-find "foofoo" menu :key #'cl-third :test #'string=))
        (should (keymapp
-                (fourth
-                 (find "foofoo" menu :key #'third :test #'string=))))))))
+                (cl-fourth
+                 (cl-find "foofoo" menu :key #'cl-third :test #'string=))))))))
 
 
 ;;; The infamous and problematic tab keybinding
@@ -859,23 +901,21 @@ TODO: be meaner"
     (should (eq (key-binding [backtab]) 'yas-prev-field))))
 
 (ert-deftest test-rebindings ()
-  (unwind-protect
-      (progn
-        (define-key yas-minor-mode-map [tab] nil)
-        (define-key yas-minor-mode-map (kbd "TAB") nil)
-        (define-key yas-minor-mode-map (kbd "SPC") 'yas-expand)
-        (with-temp-buffer
-          (yas-minor-mode 1)
-          (should (not (eq (key-binding (yas--read-keybinding "TAB")) 
'yas-expand)))
-          (should (eq (key-binding (yas--read-keybinding "SPC")) 'yas-expand))
-          (yas-reload-all)
-          (should (not (eq (key-binding (yas--read-keybinding "TAB")) 
'yas-expand)))
-          (should (eq (key-binding (yas--read-keybinding "SPC")) 
'yas-expand))))
-    ;; FIXME: actually should restore to whatever saved values where there.
-    ;;
-    (define-key yas-minor-mode-map [tab] 'yas-expand)
-    (define-key yas-minor-mode-map (kbd "TAB") 'yas-expand)
-    (define-key yas-minor-mode-map (kbd "SPC") nil)))
+  (let* ((yas-minor-mode-map (copy-keymap yas-minor-mode-map))
+         (minor-mode-map-alist
+          (cons `(yas-minor-mode . ,yas-minor-mode-map)
+                (cl-remove 'yas-minor-mode minor-mode-map-alist
+                           :test #'eq :key #'car))))
+    (define-key yas-minor-mode-map [tab] nil)
+    (define-key yas-minor-mode-map (kbd "TAB") nil)
+    (define-key yas-minor-mode-map (kbd "SPC") 'yas-expand)
+    (with-temp-buffer
+      (yas-minor-mode 1)
+      (should-not (eq (key-binding (kbd "TAB")) 'yas-expand))
+      (should (eq (key-binding (kbd "SPC")) 'yas-expand))
+      (yas-reload-all)
+      (should-not (eq (key-binding (kbd "TAB")) 'yas-expand))
+      (should (eq (key-binding (kbd "SPC")) 'yas-expand)))))
 
 (ert-deftest test-yas-in-org ()
   (with-temp-buffer
@@ -973,13 +1013,13 @@ add the snippets associated with the given mode."
          (saved-values (mapcar #'symbol-value vars)))
     (unwind-protect
         (funcall fn)
-      (loop for var in vars
-            for saved in saved-values
-            do (set var saved)))))
+      (cl-loop for var in vars
+               for saved in saved-values
+               do (set var saved)))))
 
 (defun yas-call-with-snippet-dirs (dirs fn)
   (let* ((default-directory (make-temp-file "yasnippet-fixture" t))
-         (yas-snippet-dirs (mapcar #'car dirs)))
+         (yas-snippet-dirs (mapcar (lambda (d) (expand-file-name (car d))) 
dirs)))
     (with-temp-message ""
       (unwind-protect
           (progn
@@ -1016,16 +1056,8 @@ attention to case differences."
 (put 'yas-with-overriden-buffer-list         'edebug-form-spec t)
 (put 'yas-with-some-interesting-snippet-dirs 'edebug-form-spec t)
 
-
-(put 'yas--with-temporary-redefinitions 'lisp-indent-function 1)
-(put 'yas--with-temporary-redefinitions 'edebug-form-spec '((&rest (defun*)) 
cl-declarations body))
-
-
-
-
 (provide 'yasnippet-tests)
 ;; Local Variables:
 ;; indent-tabs-mode: nil
-;; byte-compile-warnings: (not cl-functions)
 ;; End:
 ;;; yasnippet-tests.el ends here
diff --git a/packages/yasnippet/yasnippet.el b/packages/yasnippet/yasnippet.el
index 9c741a6..a6977d1 100644
--- a/packages/yasnippet/yasnippet.el
+++ b/packages/yasnippet/yasnippet.el
@@ -5,10 +5,10 @@
 ;;          João Távora <address@hidden>,
 ;;          Noam Postavsky <address@hidden>
 ;; Maintainer: Noam Postavsky <address@hidden>
-;; Version: 0.10.0
-;; X-URL: http://github.com/capitaomorte/yasnippet
+;; Version: 0.11.0
+;; X-URL: http://github.com/joaotavora/yasnippet
 ;; Keywords: convenience, emulation
-;; URL: http://github.com/capitaomorte/yasnippet
+;; URL: http://github.com/joaotavora/yasnippet
 ;; Package-Requires: ((cl-lib "0.5"))
 ;; EmacsWiki: YaSnippetMode
 
@@ -127,11 +127,10 @@
 ;;   `custom-set-variables' is executed in your .emacs file.
 ;;
 ;;   For more information and detailed usage, refer to the project page:
-;;      http://github.com/capitaomorte/yasnippet
+;;      http://github.com/joaotavora/yasnippet
 
 ;;; Code:
 
-(require 'cl)
 (require 'cl-lib)
 (require 'easymenu)
 (require 'help-mode)
@@ -178,8 +177,6 @@ created with `yas-new-snippet'. "
   :type '(choice (directory :tag "Single directory")
                  (repeat :tag "List of directories"
                          (choice (directory) (variable))))
-  :group 'yasnippet
-  :require 'yasnippet
   :set #'(lambda (symbol new)
            (let ((old (and (boundp symbol)
                            (symbol-value symbol))))
@@ -207,11 +204,10 @@ created with `yas-new-snippet'. "
 # name: $1
 # key: ${2:${1:$(yas--key-from-desc yas-text)}}
 # --
-$0"
+$0`(yas-escape-text yas-selected-text)`"
   "Default snippet to use when creating a new snippet.
 If nil, don't use any snippet."
-  :type 'string
-  :group 'yasnippet)
+  :type 'string)
 
 (defcustom yas-prompt-functions '(yas-dropdown-prompt
                                   yas-completing-prompt
@@ -240,8 +236,7 @@ nil.
 signal `quit' with
 
   (signal \\='quit \"user quit!\")."
-  :type '(repeat function)
-  :group 'yasnippet)
+  :type '(repeat function))
 
 (defcustom yas-indent-line 'auto
   "Controls indenting applied to a recent snippet expansion.
@@ -257,28 +252,24 @@ after expansion (the manual per-line \"$>\" indentation 
still
 applies)."
   :type '(choice (const :tag "Nothing"  nothing)
                  (const :tag "Fixed"    fixed)
-                 (const :tag "Auto"     auto))
-  :group 'yasnippet)
+                 (const :tag "Auto"     auto)))
 
 (defcustom yas-also-auto-indent-first-line nil
   "Non-nil means also auto indent first line according to mode.
 
 Naturally this is only valid when `yas-indent-line' is `auto'"
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-snippet-revival t
   "Non-nil means re-activate snippet fields after undo/redo."
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-triggers-in-field nil
   "If non-nil, allow stacked expansions (snippets inside snippets).
 
 Otherwise `yas-next-field-or-maybe-expand' just moves on to the
 next field"
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-fallback-behavior 'call-other-command
   "How to act when `yas-expand' does *not* expand a snippet.
@@ -294,8 +285,7 @@ next field"
   COMMAND. If ARGS is non-nil, call COMMAND non-interactively
   with ARGS as arguments."
   :type '(choice (const :tag "Call previous command"  call-other-command)
-                 (const :tag "Do nothing"             return-nil))
-  :group 'yasnippet)
+                 (const :tag "Do nothing"             return-nil)))
 
 (defcustom yas-choose-keys-first nil
   "If non-nil, prompt for snippet key first, then for template.
@@ -303,8 +293,7 @@ next field"
 Otherwise prompts for all possible snippet names.
 
 This affects `yas-insert-snippet' and `yas-visit-snippet-file'."
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-choose-tables-first nil
   "If non-nil, and multiple eligible snippet tables, prompts user for tables 
first.
@@ -313,8 +302,7 @@ Otherwise, user chooses between the merging together of all
 eligible tables.
 
 This affects `yas-insert-snippet', `yas-visit-snippet-file'"
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-use-menu 'abbreviate
   "Display a YASnippet menu in the menu bar.
@@ -332,16 +320,14 @@ menu and the modes set in `yas--extra-modes' are listed.
 Any other non-nil value, every submenu is listed."
   :type '(choice (const :tag "Full"  full)
                  (const :tag "Abbreviate" abbreviate)
-                 (const :tag "No menu" nil))
-  :group 'yasnippet)
+                 (const :tag "No menu" nil)))
 
 (defcustom yas-trigger-symbol (or (and (eq window-system 'mac)
                                        (ignore-errors
                                          (char-to-string ?\x21E5))) ;; little 
->| sign
                                   " =>")
   "The text that will be used in menu to represent the trigger."
-  :type 'string
-  :group 'yasnippet)
+  :type 'string)
 
 (defcustom yas-wrap-around-region nil
   "What to insert for snippet's $0 field.
@@ -353,22 +339,19 @@ per-snippet basis.  A value of `cua' is considered 
equivalent to
   :type '(choice (character :tag "Insert from register")
                  (const t :tag "Insert region contents")
                  (const nil :tag "Don't insert anything")
-                 (const cua)) ; backwards compat
-  :group 'yasnippet)
+                 (const cua))) ; backwards compat
 
 (defcustom yas-good-grace t
   "If non-nil, don't raise errors in inline elisp evaluation.
 
 An error string \"[yas] error\" is returned instead."
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-visit-from-menu nil
   "If non-nil visit snippets's files from menu, instead of expanding them.
 
 This can only work when snippets are loaded from files."
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 (defcustom yas-expand-only-for-last-commands nil
   "List of `last-command' values to restrict tab-triggering to, or nil.
@@ -381,8 +364,7 @@ Optionally, set this to something like 
(self-insert-command) if
 you to wish restrict expansion to only happen when the last
 letter of the snippet tab trigger was typed immediately before
 the trigger key itself."
-  :type '(repeat function)
-  :group 'yasnippet)
+  :type '(repeat function))
 
 (defcustom yas-alias-to-yas/prefix-p t
   "If non-nil make aliases for the old style yas/ prefixed symbols.
@@ -394,13 +376,11 @@ It must be set to nil before loading yasnippet to take 
effect."
 ;;
 (defface yas-field-highlight-face
   '((t (:inherit 'region)))
-  "The face used to highlight the currently active field of a snippet"
-  :group 'yasnippet)
+  "The face used to highlight the currently active field of a snippet")
 
 (defface yas--field-debug-face
   '()
-  "The face used for debugging some overlays normally hidden"
-  :group 'yasnippet)
+  "The face used for debugging some overlays normally hidden")
 
 
 ;;; User-visible variables
@@ -522,7 +502,7 @@ conditions.
  (add-hook \\='python-mode-hook
            (lambda ()
               (setq yas-buffer-local-condition
-                    \\='(if (python-in-string/comment)
+                    \\='(if (python-syntax-comment-or-string-p)
                          \\='(require-snippet-condition . force-in-comment)
                        t))))
 
@@ -534,7 +514,7 @@ snippet itself contains a condition that returns the symbol
 
 ;;; Internal variables
 
-(defconst yas--version "0.10.0")
+(defconst yas--version "0.11.0")
 
 (defvar yas--menu-table (make-hash-table)
   "A hash table of MAJOR-MODE symbols to menu keymaps.")
@@ -637,33 +617,33 @@ snippet itself contains a condition that returns the 
symbol
      )
     ("Prompting method"
      ["System X-widget" (setq yas-prompt-functions
-                              (cons 'yas-x-prompt
-                                    (remove 'yas-x-prompt
+                              (cons #'yas-x-prompt
+                                    (remove #'yas-x-prompt
                                             yas-prompt-functions)))
       :help "Use your windowing system's (gtk, mac, windows, etc...) default 
menu"
       :active t :style radio   :selected (eq (car yas-prompt-functions)
-                                             'yas-x-prompt)]
+                                             #'yas-x-prompt)]
      ["Dropdown-list" (setq yas-prompt-functions
-                            (cons 'yas-dropdown-prompt
-                                  (remove 'yas-dropdown-prompt
+                            (cons #'yas-dropdown-prompt
+                                  (remove #'yas-dropdown-prompt
                                           yas-prompt-functions)))
       :help "Use a special dropdown list"
       :active t :style radio   :selected (eq (car yas-prompt-functions)
-                                             'yas-dropdown-prompt)]
+                                             #'yas-dropdown-prompt)]
      ["Ido" (setq yas-prompt-functions
-                  (cons 'yas-ido-prompt
-                        (remove 'yas-ido-prompt
+                  (cons #'yas-ido-prompt
+                        (remove #'yas-ido-prompt
                                 yas-prompt-functions)))
       :help "Use an ido-style minibuffer prompt"
       :active t :style radio   :selected (eq (car yas-prompt-functions)
-                                             'yas-ido-prompt)]
+                                             #'yas-ido-prompt)]
      ["Completing read" (setq yas-prompt-functions
-                              (cons 'yas-completing-prompt
-                                    (remove 'yas-completing-prompt
+                              (cons #'yas-completing-prompt
+                                    (remove #'yas-completing-prompt
                                             yas-prompt-functions)))
       :help "Use a normal minibuffer prompt"
       :active t :style radio   :selected (eq (car yas-prompt-functions)
-                                             'yas-completing-prompt)]
+                                             #'yas-completing-prompt)]
      )
     ("Misc"
      ["Wrap region in exit marker"
@@ -776,10 +756,7 @@ Negative prefix argument turns off the mode.
 
 Key bindings:
 \\{yas-minor-mode-map}"
-  nil
-  ;; The indicator for the mode line.
-  " yas"
-  :group 'yasnippet
+  :lighter " yas" ;; The indicator for the mode line.
   (cond ((and yas-minor-mode (featurep 'yasnippet))
          ;; Install the direct keymaps in `emulation-mode-map-alists'
          ;; (we use `add-hook' even though it's not technically a hook,
@@ -872,9 +849,7 @@ Honour `yas-dont-activate-functions', which see."
     (yas-minor-mode 1)))
 
 ;;;###autoload
-(define-globalized-minor-mode yas-global-mode yas-minor-mode yas-minor-mode-on
-  :group 'yasnippet
-  :require 'yasnippet)
+(define-globalized-minor-mode yas-global-mode yas-minor-mode yas-minor-mode-on)
 
 (defun yas--global-mode-reload-with-jit-maybe ()
   "Run `yas-reload-all' when `yas-global-mode' is on."
@@ -913,9 +888,9 @@ Honour `yas-dont-activate-functions', which see."
       "Menu used when snippet-mode is active."
       (cons "Snippet"
             (mapcar #'(lambda (ent)
-                        (when (third ent)
-                          (define-key map (third ent) (second ent)))
-                        (vector (first ent) (second ent) t))
+                        (when (nth 2 ent)
+                          (define-key map (nth 2 ent) (nth 1 ent)))
+                        (vector (nth 0 ent) (nth 1 ent) t))
                     '(("Load this snippet" yas-load-snippet-buffer "\C-c\C-l")
                       ("Load and quit window" 
yas-load-snippet-buffer-and-close "\C-c\C-c")
                       ("Try out this snippet" yas-tryout-snippet 
"\C-c\C-t")))))
@@ -929,7 +904,8 @@ Honour `yas-dont-activate-functions', which see."
   (setq font-lock-defaults '(yas--font-lock-keywords))
   (set (make-local-variable 'require-final-newline) nil)
   (set (make-local-variable 'comment-start) "#")
-  (set (make-local-variable 'comment-start-skip) "#+[\t ]*"))
+  (set (make-local-variable 'comment-start-skip) "#+[\t ]*")
+  (add-hook 'after-save-hook #'yas-maybe-load-snippet-buffer nil t))
 
 
 
@@ -976,7 +952,7 @@ Honour `yas-dont-activate-functions', which see."
   table
   )
 
-(defstruct (yas--table (:constructor yas--make-snippet-table (name)))
+(cl-defstruct (yas--table (:constructor yas--make-snippet-table (name)))
   "A table to store snippets for a particular mode.
 
 Has the following fields:
@@ -1083,7 +1059,7 @@ Has the following fields:
         (maphash #'(lambda (k v)
                      (let ((template (gethash name v)))
                        (when (and template
-                                  (eq uuid (yas--template-uuid template)))
+                                  (equal uuid (yas--template-uuid template)))
                          (remhash name v)
                          (when (zerop (hash-table-count v))
                            (push k empty-keys)))))
@@ -1151,9 +1127,9 @@ Return TEMPLATE."
     (unless (eq (cdr menu-binding-pair) :none)
       ;; the menu item name
       ;;
-      (setf (cadar menu-binding-pair) (yas--template-name template))
+      (setf (cl-cadar menu-binding-pair) (yas--template-name template))
       ;; the :keys information (also visible to the user)
-      (setf (getf (cdr (car menu-binding-pair)) :keys)
+      (setf (cl-getf (cdr (car menu-binding-pair)) :keys)
             (or (and keybinding (key-description keybinding))
                 (and key (concat key yas-trigger-symbol))))))
   (unless (yas--template-menu-managed-by-yas-define-menu template)
@@ -1164,7 +1140,7 @@ Return TEMPLATE."
           (group (yas--template-group template)))
       ;; Remove from menu keymap
       ;;
-      (assert menu-keymap)
+      (cl-assert menu-keymap)
       (yas--delete-from-keymap menu-keymap (yas--template-uuid template))
 
       ;; Add necessary subgroups as necessary.
@@ -1227,10 +1203,10 @@ This function implements the rules described in
   (let ((requirement (yas--require-template-specific-condition-p)))
     (if (eq requirement 'always)
         templates
-      (remove-if-not #'(lambda (pair)
-                         (yas--template-can-expand-p
-                          (yas--template-condition (cdr pair)) requirement))
-                     templates))))
+      (cl-remove-if-not (lambda (pair)
+                          (yas--template-can-expand-p
+                           (yas--template-condition (cdr pair)) requirement))
+                        templates))))
 
 (defun yas--require-template-specific-condition-p ()
   "Decide if this buffer requests/requires snippet-specific
@@ -1299,9 +1275,9 @@ Returns (TEMPLATES START END). This function respects
           (save-excursion
             (goto-char original)
             (setq templates
-                  (mapcan #'(lambda (table)
-                              (yas--fetch table possible-key))
-                          (yas--get-snippet-tables))))))
+                  (cl-mapcan (lambda (table)
+                               (yas--fetch table possible-key))
+                             (yas--get-snippet-tables))))))
       (when templates
         (list templates (point) original)))))
 
@@ -1555,31 +1531,31 @@ Optional PROMPT sets the prompt to use."
           (sort templates #'(lambda (t1 t2)
                               (< (length (yas--template-name t1))
                                  (length (yas--template-name t2))))))
-    (some #'(lambda (fn)
-              (funcall fn (or prompt "Choose a snippet: ")
-                       templates
-                       #'yas--template-name))
-          yas-prompt-functions)))
+    (cl-some (lambda (fn)
+               (funcall fn (or prompt "Choose a snippet: ")
+                        templates
+                        #'yas--template-name))
+             yas-prompt-functions)))
 
 (defun yas--prompt-for-keys (keys &optional prompt)
   "Interactively choose a template key from the list KEYS.
 
 Optional PROMPT sets the prompt to use."
   (when keys
-    (some #'(lambda (fn)
-              (funcall fn (or prompt "Choose a snippet key: ") keys))
-          yas-prompt-functions)))
+    (cl-some (lambda (fn)
+               (funcall fn (or prompt "Choose a snippet key: ") keys))
+             yas-prompt-functions)))
 
 (defun yas--prompt-for-table (tables &optional prompt)
   "Interactively choose a table from the list TABLES.
 
 Optional PROMPT sets the prompt to use."
   (when tables
-    (some #'(lambda (fn)
-              (funcall fn (or prompt "Choose a snippet table: ")
-                       tables
-                       #'yas--table-name))
-          yas-prompt-functions)))
+    (cl-some (lambda (fn)
+               (funcall fn (or prompt "Choose a snippet table: ")
+                        tables
+                        #'yas--table-name))
+             yas-prompt-functions)))
 
 (defun yas-x-prompt (prompt choices &optional display-fn)
   "Display choices in a x-window prompt."
@@ -1596,9 +1572,10 @@ Optional PROMPT sets the prompt to use."
                   (selected-window)))
         t)
       `(,prompt ("title"
-                 ,@(mapcar* (lambda (c d) `(,(concat "   " d) . ,c))
-                            choices
-                            (if display-fn (mapcar display-fn choices) 
choices)))))
+                 ,@(cl-mapcar (lambda (c d) `(,(concat "   " d) . ,c))
+                              choices
+                              (if display-fn (mapcar display-fn choices)
+                                choices)))))
      (keyboard-quit))))
 
 (defun yas-maybe-ido-prompt (prompt choices &optional display-fn)
@@ -1625,11 +1602,11 @@ Optional PROMPT sets the prompt to use."
                           nil 'require-match nil nil)))
     (if (eq choices formatted-choices)
         chosen
-      (nth (or (position chosen formatted-choices :test #'string=) 0)
+      (nth (or (cl-position chosen formatted-choices :test #'string=) 0)
            choices))))
 
 (defun yas-no-prompt (_prompt choices &optional _display-fn)
-  (first choices))
+  (cl-first choices))
 
 
 ;;; Defining snippets
@@ -1719,7 +1696,7 @@ the current buffers contents."
 
 (defun yas--define-parents (mode parents)
   "Add PARENTS to the list of MODE's parents."
-  (puthash mode (remove-duplicates
+  (puthash mode (cl-remove-duplicates
                  (append parents
                          (gethash mode yas--parents)))
            yas--parents))
@@ -1835,7 +1812,7 @@ prompt the user to select one."
                    (yas--message 4 "Loaded %s" directory)
                  (yas--message 4 "Prepared just-in-time loading for %s" 
directory)))
               (t
-               (push (yas--message 0 "Check your `yas-snippet-dirs': %s is not 
a directory" directory) errors)))))
+               (push (yas--message 1 "Check your `yas-snippet-dirs': %s is not 
a directory" directory) errors)))))
     errors))
 
 (defun yas-reload-all (&optional no-jit interactive)
@@ -1851,9 +1828,10 @@ prefix argument."
   (catch 'abort
     (let ((errors)
           (snippet-editing-buffers
-           (remove-if-not #'(lambda (buffer)
-                              (with-current-buffer buffer 
yas--editing-template))
-                          (buffer-list))))
+           (cl-remove-if-not (lambda (buffer)
+                               (with-current-buffer buffer
+                                 yas--editing-template))
+                             (buffer-list))))
       ;; Warn if there are buffers visiting snippets, since reloading will 
break
       ;; any on-line editing of those buffers.
       ;;
@@ -1914,18 +1892,11 @@ prefix argument."
         (funcall fun))
       (remhash mode yas--scheduled-jit-loads))))
 
-;; (when (<= emacs-major-version 22)
-;;   (add-hook 'after-change-major-mode-hook 'yas--load-pending-jits))
-
-(defun yas--quote-string (string)
-  "Escape and quote STRING.
-foo\"bar\\! -> \"foo\\\"bar\\\\!\""
-  (concat "\""
-          (replace-regexp-in-string "[\\\"]"
-                                    "\\\\\\&"
-                                    string
-                                    t)
-          "\""))
+(defun yas-escape-text (text)
+  "Escape TEXT for snippet."
+  (when text
+    (replace-regexp-in-string "[\\$]" "\\\\\\&" text)))
+
 
 ;;; Snippet compilation function
 
@@ -2017,10 +1988,9 @@ static in the menu."
 
 (defun yas--show-menu-p (mode)
   (cond ((eq yas-use-menu 'abbreviate)
-         (find mode
-               (mapcar #'(lambda (table)
-                           (yas--table-mode table))
-                       (yas--get-snippet-tables))))
+         (cl-find mode
+                  (mapcar #'yas--table-mode
+                          (yas--get-snippet-tables))))
         (yas-use-menu t)))
 
 (defun yas--delete-from-keymap (keymap uuid)
@@ -2034,19 +2004,19 @@ static in the menu."
   ;;
   (mapc #'(lambda (item)
             (when (and (listp (cdr item))
-                       (keymapp (third (cdr item))))
-              (yas--delete-from-keymap (third (cdr item)) uuid)))
-        (rest keymap))
+                       (keymapp (nth 2 (cdr item))))
+              (yas--delete-from-keymap (nth 2 (cdr item)) uuid)))
+        (cdr keymap))
   ;; Set the uuid entry to nil
   ;;
   (define-key keymap (vector (make-symbol uuid)) nil)
   ;; Destructively modify keymap
   ;;
-  (setcdr keymap (delete-if #'(lambda (item)
-                                (or (null (cdr item))
-                                    (and (keymapp (third (cdr item)))
-                                         (null (cdr (third (cdr item)))))))
-                            (rest keymap))))
+  (setcdr keymap (cl-delete-if (lambda (item)
+                                 (or (null (cdr item))
+                                     (and (keymapp (nth 2 (cdr item)))
+                                          (null (cdr (nth 2 (cdr item)))))))
+                               (cdr keymap))))
 
 (defun yas-define-menu (mode menu &optional omit-items)
   "Define a snippet menu for MODE according to MENU, omitting OMIT-ITEMS.
@@ -2081,31 +2051,37 @@ omitted from MODE's menu, even if they're manually 
loaded."
 
 (defun yas--define-menu-1 (table menu-keymap menu uuidhash &optional 
group-list)
   "Helper for `yas-define-menu'."
-  (dolist (e (reverse menu))
-    (cond ((eq (first e) 'yas-item)
-           (let ((template (or (gethash (second e) uuidhash)
-                               (puthash (second e)
-                                        (yas--make-template
-                                         :table table
-                                         :perm-group group-list
-                                         :uuid (second e))
-                                        uuidhash))))
-             (define-key menu-keymap (vector (gensym))
-               (car (yas--template-menu-binding-pair-get-create template 
:stay)))))
-          ((eq (first e) 'yas-submenu)
-           (let ((subkeymap (make-sparse-keymap)))
-             (define-key menu-keymap (vector (gensym))
-               `(menu-item ,(second e) ,subkeymap))
-             (yas--define-menu-1 table
-                                subkeymap
-                                (third e)
-                                uuidhash
-                                (append group-list (list (second e))))))
-          ((eq (first e) 'yas-separator)
-           (define-key menu-keymap (vector (gensym))
-             '(menu-item "----")))
-          (t
-           (yas--message 1 "Don't know anything about menu entry %s" (first 
e))))))
+  (cl-loop
+   for (type name submenu) in (reverse menu)
+   if (or (eq type 'yas-item)
+          (and yas-alias-to-yas/prefix-p
+               (eq type 'yas/item)))
+   do (let ((template (or (gethash name uuidhash)
+                          (puthash name
+                                   (yas--make-template
+                                    :table table
+                                    :perm-group group-list
+                                    :uuid name)
+                                   uuidhash))))
+        (define-key menu-keymap (vector (cl-gensym))
+          (car (yas--template-menu-binding-pair-get-create template :stay))))
+   else if (or (eq type 'yas-submenu)
+               (and yas-alias-to-yas/prefix-p
+                    (eq type 'yas/submenu)))
+   do (let ((subkeymap (make-sparse-keymap)))
+        (define-key menu-keymap (vector (cl-gensym))
+          `(menu-item ,name ,subkeymap))
+        (yas--define-menu-1 table
+                            subkeymap
+                            submenu
+                            uuidhash
+                            (append group-list (list name))))
+   else if (or (eq type 'yas-separator)
+               (and yas-alias-to-yas/prefix-p
+                    (eq type 'yas/separator)))
+   do (define-key menu-keymap (vector (cl-gensym))
+        '(menu-item "----"))
+   else do (yas--message 1 "Don't know anything about menu entry %s" type)))
 
 (defun yas--define (mode key template &optional name condition group)
   "Define a snippet.  Expanding KEY into TEMPLATE.
@@ -2194,12 +2170,13 @@ object satisfying `yas--field-p' to restrict the 
expansion to."
 If expansion fails, execute the previous binding for this key"
   (interactive)
   (setq yas--condition-cache-timestamp (current-time))
-  (let* ((vec (subseq (this-command-keys-vector) (if current-prefix-arg
-                                                     (length 
(this-command-keys))
-                                                   0)))
-         (templates (mapcan #'(lambda (table)
-                                (yas--fetch table vec))
-                            (yas--get-snippet-tables))))
+  (let* ((vec (cl-subseq (this-command-keys-vector)
+                         (if current-prefix-arg
+                             (length (this-command-keys))
+                           0)))
+         (templates (cl-mapcan (lambda (table)
+                                 (yas--fetch table vec))
+                               (yas--get-snippet-tables))))
     (if templates
         (yas--expand-or-prompt-for-template templates)
       (let ((yas-fallback-behavior 'call-other-command))
@@ -2211,7 +2188,7 @@ If expansion fails, execute the previous binding for this 
key"
 Prompt the user if TEMPLATES has more than one element, else
 expand immediately.  Common gateway for
 `yas-expand-from-trigger-key' and `yas-expand-from-keymap'."
-  (let ((yas--current-template (or (and (rest templates) ;; more than one
+  (let ((yas--current-template (or (and (cl-rest templates) ;; more than one
                                         (yas--prompt-for-template (mapcar 
#'cdr templates)))
                                    (cdar templates))))
     (when yas--current-template
@@ -2249,7 +2226,7 @@ Common gateway for `yas-expand-from-trigger-key' and
                 (yas-minor-mode nil)
                 (beyond-yasnippet (yas--keybinding-beyond-yasnippet)))
            (yas--message 4 "Falling back to %s"  beyond-yasnippet)
-           (assert (or (null beyond-yasnippet) (commandp beyond-yasnippet)))
+           (cl-assert (or (null beyond-yasnippet) (commandp beyond-yasnippet)))
            (setq this-command beyond-yasnippet)
            (when beyond-yasnippet
              (call-interactively beyond-yasnippet))))
@@ -2314,13 +2291,13 @@ Honours `yas-choose-tables-first', 
`yas-choose-keys-first' and
   (mapcar #'cdr
           (if yas-choose-keys-first
               (let ((key (yas--prompt-for-keys
-                          (mapcan #'yas--table-all-keys tables))))
+                          (cl-mapcan #'yas--table-all-keys tables))))
                 (when key
-                  (mapcan #'(lambda (table)
-                              (yas--fetch table key))
-                          tables)))
-            (remove-duplicates (mapcan #'yas--table-templates tables)
-                               :test #'equal))))
+                  (cl-mapcan (lambda (table)
+                               (yas--fetch table key))
+                             tables)))
+            (cl-remove-duplicates (cl-mapcan #'yas--table-templates tables)
+                                  :test #'equal))))
 
 (defun yas--lookup-snippet-1 (name mode)
   "Get the snippet called NAME in MODE's tables."
@@ -2357,7 +2334,7 @@ by condition."
                                          yas-buffer-local-condition))
          (templates (yas--all-templates (yas--get-snippet-tables)))
          (yas--current-template (and templates
-                                    (or (and (rest templates) ;; more than one 
template for same key
+                                    (or (and (cl-rest templates) ;; more than 
one template for same key
                                              (yas--prompt-for-template 
templates))
                                         (car templates))))
          (where (if (region-active-p)
@@ -2415,15 +2392,15 @@ visited file in `snippet-mode'."
                          (pp-to-string (yas--template-content template))
                        (yas--template-content template))))
            (snippet-mode)
-           (set (make-local-variable 'yas--editing-template) template)))))
+           (set (make-local-variable 'yas--editing-template) template)
+           (set (make-local-variable 'default-directory)
+                (car (cdr (car (yas--guess-snippet-directories 
(yas--template-table template))))))))))
 
 (defun yas--guess-snippet-directories-1 (table)
   "Guess possible snippet subdirectories for TABLE."
-  (cons (yas--table-name table)
-        (mapcan #'(lambda (parent)
-                    (yas--guess-snippet-directories-1
-                     parent))
-                (yas--table-parents table))))
+  (cons (file-name-as-directory (yas--table-name table))
+        (cl-mapcan #'yas--guess-snippet-directories-1
+                   (yas--table-parents table))))
 
 (defun yas--guess-snippet-directories (&optional table)
   "Try to guess suitable directories based on the current active
@@ -2452,8 +2429,9 @@ where snippets of table might exist."
 
 (defun yas--make-directory-maybe (table-and-dirs &optional main-table-string)
   "Return a dir inside TABLE-AND-DIRS, prompts for creation if none exists."
-  (or (some #'(lambda (dir) (when (file-directory-p dir) dir)) (cdr 
table-and-dirs))
-      (let ((candidate (first (cdr table-and-dirs))))
+  (or (cl-some (lambda (dir) (when (file-directory-p dir) dir))
+               (cdr table-and-dirs))
+      (let ((candidate (cl-first (cdr table-and-dirs))))
         (unless (file-writable-p (file-name-directory candidate))
           (error (yas--format "%s is not writable." candidate)))
         (if (y-or-n-p (format "Guessed directory (%s) for%s%s table \"%s\" 
does not exist! Create? "
@@ -2476,16 +2454,22 @@ where snippets of table might exist."
 Expands a snippet-writing snippet, unless the optional prefix arg
 NO-TEMPLATE is non-nil."
   (interactive "P")
-  (let ((guessed-directories (yas--guess-snippet-directories)))
+  (let ((guessed-directories (yas--guess-snippet-directories))
+        (yas-selected-text (or yas-selected-text
+                               (and (region-active-p)
+                                    (buffer-substring-no-properties
+                                     (region-beginning) (region-end))))))
 
     (switch-to-buffer "*new snippet*")
     (erase-buffer)
     (kill-all-local-variables)
     (snippet-mode)
     (yas-minor-mode 1)
-    (set (make-local-variable 'yas--guessed-modes) (mapcar #'(lambda (d)
-                                                              (yas--table-mode 
(car d)))
-                                                          guessed-directories))
+    (set (make-local-variable 'yas--guessed-modes)
+         (mapcar (lambda (d) (yas--table-mode (car d)))
+                 guessed-directories))
+    (set (make-local-variable 'default-directory)
+         (car (cdr (car guessed-directories))))
     (if (and (not no-template) yas-new-snippet-default)
         (yas-expand-snippet yas-new-snippet-default))))
 
@@ -2498,12 +2482,13 @@ representing one or more of the mode's parents.
 Note that MODE-SYM need not be the symbol of a real major mode,
 neither do the elements of PARENTS."
   (let* ((file-dir (and file
-                        (directory-file-name (or (some #'(lambda (special)
-                                                           
(locate-dominating-file file special))
-                                                       '(".yas-setup.el"
-                                                         ".yas-make-groups"
-                                                         ".yas-parents"))
-                                                 (directory-file-name 
(file-name-directory file))))))
+                        (directory-file-name
+                         (or (cl-some (lambda (special)
+                                        (locate-dominating-file file special))
+                                      '(".yas-setup.el"
+                                        ".yas-make-groups"
+                                        ".yas-parents"))
+                             (directory-file-name (file-name-directory 
file))))))
          (parents-file-name (concat file-dir "/.yas-parents"))
          (major-mode-name (and file-dir
                                (file-name-nondirectory file-dir)))
@@ -2539,20 +2524,21 @@ neither do the elements of PARENTS."
     (intern
      (funcall prompt (format "Choose or enter a table (yas guesses %s): "
                              (if yas--guessed-modes
-                                 (first yas--guessed-modes)
+                                 (cl-first yas--guessed-modes)
                                "nothing"))
               (mapcar #'symbol-name yas--guessed-modes)
               nil
               nil
               nil
               nil
-              (if (first yas--guessed-modes)
-                  (symbol-name (first yas--guessed-modes)))))))
+              (if (cl-first yas--guessed-modes)
+                  (symbol-name (cl-first yas--guessed-modes)))))))
 
 (defun yas-load-snippet-buffer (table &optional interactive)
   "Parse and load current buffer's snippet definition into TABLE.
 TABLE is a symbol name passed to `yas--table-get-create'.  When
-called interactively, prompt for the table name."
+called interactively, prompt for the table name.
+Return the `yas--template' object created"
   (interactive (list (yas--read-table) t))
   (cond
    ;;  We have `yas--editing-template', this buffer's content comes from a
@@ -2574,7 +2560,23 @@ called interactively, prompt for the table name."
   (when interactive
     (yas--message 3 "Snippet \"%s\" loaded for %s."
                   (yas--template-name yas--editing-template)
-                  (yas--table-name (yas--template-table 
yas--editing-template)))))
+                  (yas--table-name (yas--template-table 
yas--editing-template))))
+  yas--editing-template)
+
+(defun yas-maybe-load-snippet-buffer ()
+  "Added to `after-save-hook' in `snippet-mode'."
+  (let* ((mode (intern (file-name-sans-extension
+                        (file-name-nondirectory
+                         (directory-file-name default-directory)))))
+         (current-snippet
+          (apply #'yas--define-snippets-2 (yas--table-get-create mode)
+                 (yas--parse-template buffer-file-name)))
+         (uuid (yas--template-uuid current-snippet)))
+    (unless (equal current-snippet
+                   (if uuid (yas--get-template-by-uuid mode uuid)
+                     (yas--lookup-snippet-1
+                      (yas--template-name current-snippet) mode)))
+      (yas-load-snippet-buffer mode t))))
 
 (defun yas-load-snippet-buffer-and-close (table &optional kill)
   "Load and save the snippet, then `quit-window' if saved.
@@ -2587,31 +2589,20 @@ The prefix argument KILL is passed to `quit-window'.
 Don't use this from a Lisp program, call `yas-load-snippet-buffer'
 and `kill-buffer' instead."
   (interactive (list (yas--read-table) current-prefix-arg))
-  (yas-load-snippet-buffer table t)
-  (let ((file (yas--template-get-file yas--editing-template)))
-    (when (and (or
-                ;; Only offer to save this if it looks like a library or new
-                ;; snippet (loaded from elisp, from a dir in `yas-snippet-dirs'
-                ;; which is not the first, or from an unwritable file)
-                ;;
-                (not file)
-                (not (file-writable-p file))
-                (and (cdr-safe yas-snippet-dirs)
-                     (not (string-prefix-p (expand-file-name (car 
yas-snippet-dirs)) file))))
-               (y-or-n-p (yas--format "Looks like a library or new snippet. 
Save to new file? ")))
-      (let* ((option (first (yas--guess-snippet-directories 
(yas--template-table yas--editing-template))))
-             (chosen (and option
-                          (yas--make-directory-maybe option))))
-        (when chosen
-          (let ((default-file-name (or (and file (file-name-nondirectory file))
-                                       (yas--template-name 
yas--editing-template))))
-            (write-file (expand-file-name
-                         (read-file-name (format "File name to create in %s? " 
chosen)
-                                         chosen default-file-name)
-                         chosen))
-            (setf (yas--template-load-file yas--editing-template) 
buffer-file-name))))))
-  (when buffer-file-name
-    (save-buffer)
+  (let ((template (yas-load-snippet-buffer table t)))
+    (when (and (buffer-modified-p)
+               (y-or-n-p
+                (format "[yas] Loaded for %s. Also save snippet buffer?"
+                        (yas--table-name (yas--template-table template)))))
+      (let ((default-directory (car (cdr (car (yas--guess-snippet-directories
+                                               (yas--template-table 
template))))))
+            (default-file-name (yas--template-name template)))
+        (unless (or buffer-file-name (not default-file-name))
+          (setq buffer-file-name
+                (read-file-name "File to save snippet in: "
+                                nil nil nil default-file-name))
+          (rename-buffer (file-name-nondirectory buffer-file-name) t))
+        (save-buffer)))
     (quit-window kill)))
 
 (defun yas-tryout-snippet (&optional debug)
@@ -2622,7 +2613,7 @@ and `kill-buffer' instead."
          (test-mode (or (and (car major-mode-and-parent)
                              (fboundp (car major-mode-and-parent))
                              (car major-mode-and-parent))
-                        (first yas--guessed-modes)
+                        (cl-first yas--guessed-modes)
                         (intern (read-from-minibuffer (yas--format "Please 
input a mode: ")))))
          (yas--current-template
           (and parsed
@@ -2645,73 +2636,66 @@ and `kill-buffer' instead."
                                  (point-max)
                                  (yas--template-expand-env 
yas--current-template))
              (when (and debug
-                        (require 'yasnippet-debug nil t))
-               (add-hook 'post-command-hook 'yas-debug-snippet-vars nil t))))
+                        (require 'yasnippet-debug nil t)
+                        (fboundp 'yas-debug-snippet-vars))
+               (add-hook 'post-command-hook #'yas-debug-snippet-vars nil t))))
           (t
            (yas--message 1 "Cannot test snippet for unknown major mode")))))
 
 (defun yas-active-keys ()
   "Return all active trigger keys for current buffer and point."
-  (remove-duplicates
-   (remove-if-not #'stringp (mapcan #'yas--table-all-keys 
(yas--get-snippet-tables)))
+  (cl-remove-duplicates
+   (cl-remove-if-not #'stringp (cl-mapcan #'yas--table-all-keys
+                                          (yas--get-snippet-tables)))
    :test #'string=))
 
 (defun yas--template-fine-group (template)
   (car (last (or (yas--template-group template)
                  (yas--template-perm-group template)))))
 
-(defun yas-describe-tables (&optional choose)
+(defun yas-describe-table-by-namehash ()
+  "Display snippet tables by NAMEHASH."
+  (interactive)
+  (with-current-buffer (get-buffer-create "*YASnippet Tables by NAMEHASH*")
+    (let ((inhibit-read-only t))
+      (erase-buffer)
+      (insert "YASnippet tables by NAMEHASH: \n")
+      (maphash
+       (lambda (_mode table)
+         (insert (format "\nSnippet table `%s':\n\n" (yas--table-name table)))
+         (maphash
+          (lambda (key _v)
+            (insert (format "   key %s maps snippets: %s\n" key
+                            (let ((names))
+                              (maphash #'(lambda (k _v)
+                                           (push k names))
+                                       (gethash key (yas--table-hash table)))
+                              names))))
+          (yas--table-hash table)))
+       yas--tables))
+    (view-mode +1)
+    (goto-char 1)
+    (display-buffer (current-buffer))))
+
+(defun yas-describe-tables (&optional with-nonactive)
   "Display snippets for each table."
   (interactive "P")
-  (let* ((by-name-hash (and choose
-                            (y-or-n-p "Show by namehash? ")))
-         (buffer (get-buffer-create "*YASnippet tables*"))
-         (active-tables (yas--get-snippet-tables))
-         (remain-tables (let ((all))
-                          (maphash #'(lambda (_k v)
-                                       (unless (find v active-tables)
-                                         (push v all)))
-                                   yas--tables)
-                          all))
-         (table-lists (list active-tables remain-tables))
-         (original-buffer (current-buffer))
-         (continue t)
-         (yas--condition-cache-timestamp (current-time)))
-    (with-current-buffer buffer
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (cond ((not by-name-hash)
-             (insert "YASnippet tables:\n")
-             (while (and table-lists
-                         continue)
-               (dolist (table (car table-lists))
-                 (yas--describe-pretty-table table original-buffer))
-               (setq table-lists (cdr table-lists))
-               (when table-lists
-                 (yas--create-snippet-xrefs)
-                 (display-buffer buffer)
-                 (setq continue (and choose (y-or-n-p "Show also non-active 
tables? ")))))
-             (yas--create-snippet-xrefs)
-             (help-mode)
-             (goto-char 1))
-            (t
-             (insert "\n\nYASnippet tables by NAMEHASH: \n")
-             (dolist (table (append active-tables remain-tables))
-               (insert (format "\nSnippet table `%s':\n\n" (yas--table-name 
table)))
-               (let ((keys))
-                 (maphash #'(lambda (k _v)
-                              (push k keys))
-                          (yas--table-hash table))
-                 (dolist (key keys)
-                   (insert (format "   key %s maps snippets: %s\n" key
-                                   (let ((names))
-                                     (maphash #'(lambda (k _v)
-                                                  (push k names))
-                                              (gethash key (yas--table-hash 
table)))
-                                     names))))))))
-      (goto-char 1)
-      (setq buffer-read-only t))
-    (display-buffer buffer)))
+  (let ((original-buffer (current-buffer))
+        (tables (yas--get-snippet-tables)))
+   (with-current-buffer (get-buffer-create "*YASnippet Tables*")
+     (let ((inhibit-read-only t))
+       (when with-nonactive
+         (maphash #'(lambda (_k v)
+                      (cl-pushnew v tables))
+                  yas--tables))
+       (erase-buffer)
+       (insert "YASnippet tables:\n")
+       (dolist (table tables)
+         (yas--describe-pretty-table table original-buffer))
+       (yas--create-snippet-xrefs))
+     (help-mode)
+     (goto-char 1)
+     (display-buffer (current-buffer)))))
 
 (defun yas--describe-pretty-table (table &optional original-buffer)
   (insert (format "\nSnippet table `%s'"
@@ -2827,16 +2811,16 @@ The last element of POSSIBILITIES may be a list of 
strings."
       (when (listp last-elem)
         (setcar last-link (car last-elem))
         (setcdr last-link (cdr last-elem))))
-    (some #'(lambda (fn)
-              (funcall fn "Choose: " possibilities))
-          yas-prompt-functions)))
+    (cl-some (lambda (fn)
+               (funcall fn "Choose: " possibilities))
+             yas-prompt-functions)))
 
 (defun yas-key-to-value (alist)
   (unless (or yas-moving-away-p
               yas-modified-p)
     (let ((key (read-key-sequence "")))
       (when (stringp key)
-        (or (cdr (find key alist :key #'car :test #'string=))
+        (or (cdr (cl-find key alist :key #'car :test #'string=))
             key)))))
 
 (defun yas-throw (text)
@@ -2847,7 +2831,8 @@ The last element of POSSIBILITIES may be a list of 
strings."
   "Verify that the current field value is in POSSIBILITIES.
 
 Otherwise throw exception."
-  (when (and yas-moving-away-p (notany #'(lambda (pos) (string= pos yas-text)) 
possibilities))
+  (when (and yas-moving-away-p
+             (cl-notany (lambda (pos) (string= pos yas-text)) possibilities))
     (yas-throw (yas--format "Field only allows %s" possibilities))))
 
 (defun yas-field-value (number)
@@ -2914,7 +2899,7 @@ Use this in primary and mirror transformations to tget."
 (put 'yas--active-field-overlay 'permanent-local t)
 (put 'yas--field-protection-overlays 'permanent-local t)
 
-(defstruct (yas--snippet (:constructor yas--make-snippet ()))
+(cl-defstruct (yas--snippet (:constructor yas--make-snippet ()))
   "A snippet.
 
 ..."
@@ -2928,7 +2913,7 @@ Use this in primary and mirror transformations to tget."
   previous-active-field
   force-exit)
 
-(defstruct (yas--field (:constructor yas--make-field (number start end 
parent-field)))
+(cl-defstruct (yas--field (:constructor yas--make-field (number start end 
parent-field)))
   "A field.
 
 NUMBER is the field number.
@@ -2948,7 +2933,7 @@ NEXT is another `yas--field' or `yas--mirror' or 
`yas--exit'.
   next)
 
 
-(defstruct (yas--mirror (:constructor yas--make-mirror (start end transform)))
+(cl-defstruct (yas--mirror (:constructor yas--make-mirror (start end 
transform)))
   "A mirror.
 
 START and END are mostly buffer markers, but see \"apropos markers-to-points\".
@@ -2962,7 +2947,7 @@ DEPTH is a count of how many nested mirrors can affect 
this mirror"
   next
   depth)
 
-(defstruct (yas--exit (:constructor yas--make-exit (marker)))
+(cl-defstruct (yas--exit (:constructor yas--make-exit (marker)))
   marker
   next)
 
@@ -2999,9 +2984,9 @@ With optional string TEXT do it in that string."
       (replace-match to t t text))))
 
 (defun yas--snippet-find-field (snippet number)
-  (find-if #'(lambda (field)
-               (eq number (yas--field-number field)))
-           (yas--snippet-fields snippet)))
+  (cl-find-if (lambda (field)
+                (eq number (yas--field-number field)))
+              (yas--snippet-fields snippet)))
 
 (defun yas--snippet-sort-fields (snippet)
   "Sort the fields of SNIPPET in navigation order."
@@ -3091,8 +3076,7 @@ Otherwise delegate to `yas-next-field'."
                         (and (not (eq field active))
                              (yas--field-probably-deleted-p snippet field)))
                       (yas--snippet-fields snippet))))
-    (if (>= n 0) (nth n (memq active live-fields))
-      (car (last (memq active (reverse live-fields)) (- n))))))
+    (nth (abs n) (memq active (if (>= n 0) live-fields (reverse 
live-fields))))))
 
 (defun yas-next-field (&optional arg)
   "Navigate to the ARGth next field.
@@ -3155,7 +3139,7 @@ Also create some protection overlays"
 
 (defun yas-exit-snippet (snippet)
   "Goto exit-marker of SNIPPET."
-  (interactive (list (first (yas--snippets-at-point))))
+  (interactive (list (cl-first (yas--snippets-at-point))))
   (when snippet
     (setf (yas--snippet-force-exit snippet) t)
     (goto-char (if (yas--snippet-exit snippet)
@@ -3222,7 +3206,7 @@ This renders the snippet as ordinary text."
       ;; again from `yas--take-care-of-redo'....
       (setf (yas--snippet-fields snippet) nil)))
 
-  (yas--message 3 "Snippet %s exited." (yas--snippet-id snippet)))
+  (yas--message 4 "Snippet %s exited." (yas--snippet-id snippet)))
 
 (defun yas--safely-run-hooks (hook-var)
   (condition-case error
@@ -3428,14 +3412,15 @@ field start.  This hook does nothing if an undo is in 
progress."
     (let* ((inhibit-modification-hooks t)
            (field (overlay-get overlay 'yas--field))
            (snippet (overlay-get yas--active-field-overlay 'yas--snippet)))
-      (when (yas--skip-and-clear-field-p field beg end length)
-        ;; We delete text starting from the END of insertion.
-        (yas--skip-and-clear field end))
-      (setf (yas--field-modified-p field) t)
-      (yas--advance-end-maybe field (overlay-end overlay))
-      (save-excursion
-        (yas--field-update-display field))
-      (yas--update-mirrors snippet))))
+      (save-match-data
+        (when (yas--skip-and-clear-field-p field beg end length)
+          ;; We delete text starting from the END of insertion.
+          (yas--skip-and-clear field end))
+        (setf (yas--field-modified-p field) t)
+        (yas--advance-end-maybe field (overlay-end overlay))
+        (save-excursion
+          (yas--field-update-display field))
+        (yas--update-mirrors snippet)))))
 
 ;;; Apropos protection overlays:
 ;;
@@ -3466,9 +3451,10 @@ Move the overlays, or create them if they do not exit."
     ;; go on to normal overlay creation/moving
     ;;
     (cond ((and yas--field-protection-overlays
-                (every #'overlay-buffer yas--field-protection-overlays))
-           (move-overlay (first yas--field-protection-overlays) (1- start) 
start)
-           (move-overlay (second yas--field-protection-overlays) end (1+ end)))
+                (cl-every #'overlay-buffer yas--field-protection-overlays))
+           (move-overlay (nth 0 yas--field-protection-overlays)
+                         (1- start) start)
+           (move-overlay (nth 1 yas--field-protection-overlays) end (1+ end)))
           (t
            (setq yas--field-protection-overlays
                  (list (make-overlay (1- start) start nil t nil)
@@ -3770,7 +3756,7 @@ has to be called before the $-constructs are deleted."
       (setq soup
             (sort soup compare-fom-begs))
       (when soup
-        (reduce link-foms soup)))))
+        (cl-reduce link-foms soup)))))
 
 (defun yas--calculate-mirrors-in-fields (snippet mirror)
   "Attempt to assign a parent field of SNIPPET to the mirror MIRROR.
@@ -4021,20 +4007,37 @@ With optional string TEXT do it in string instead of 
the buffer."
 (defun yas--save-backquotes ()
   "Save all the \"\\=`(lisp-expression)\\=`\"-style expressions
 with their evaluated value into `yas--backquote-markers-and-strings'."
-  (while (re-search-forward yas--backquote-lisp-expression-regexp nil t)
-    (let ((current-string (match-string-no-properties 1)) transformed)
-      (save-restriction (widen)
-                        (delete-region (match-beginning 0) (match-end 0)))
-      (setq transformed (yas--eval-lisp (yas--read-lisp (yas--restore-escapes 
current-string '(?`)))))
-      (goto-char (match-beginning 0))
-      (when transformed
-        (let ((marker (make-marker)))
-          (save-restriction
-            (widen)
-            (insert "Y") ;; quite horrendous, I love it :)
-            (set-marker marker (point))
-            (insert "Y"))
-          (push (cons marker transformed) 
yas--backquote-markers-and-strings))))))
+  (let* ((yas--snippet-buffer (current-buffer))
+         (yas--change-detected nil)
+         (detect-change (lambda (_beg _end)
+                          (when (eq (current-buffer) yas--snippet-buffer)
+                            (setq yas--change-detected t)))))
+    (while (re-search-forward yas--backquote-lisp-expression-regexp nil t)
+      (let ((current-string (match-string-no-properties 1)) transformed)
+        (save-restriction (widen)
+                          (delete-region (match-beginning 0) (match-end 0)))
+        (let ((before-change-functions
+               (cons detect-change before-change-functions)))
+          (setq transformed (yas--eval-lisp (yas--read-lisp
+                                             (yas--restore-escapes
+                                              current-string '(?`))))))
+        (goto-char (match-beginning 0))
+        (when transformed
+          (let ((marker (make-marker))
+                (before-change-functions (cdr before-change-functions)))
+            (save-restriction
+              (widen)
+              (insert "Y") ;; quite horrendous, I love it :)
+              (set-marker marker (point))
+              (insert "Y"))
+            (push (cons marker transformed) 
yas--backquote-markers-and-strings)))))
+    (when yas--change-detected
+      (lwarn '(yasnippet backquote-change) :warning
+             "`%s' modified buffer in a backquote expression.
+  To hide this warning, add (yasnippet backquote-change) to 
`warning-suppress-types'."
+             (if yas--current-template
+                 (yas--template-name yas--current-template)
+               "Snippet")))))
 
 (defun yas--restore-backquotes ()
   "Replace markers in `yas--backquote-markers-and-strings' with their values."
@@ -4211,19 +4214,15 @@ When multiple expressions are found, only the last one 
counts."
                                (yas--field-mirrors parent))))
     (or (yas--mirror-depth mirror)
         (setf (yas--mirror-depth mirror)
-              (cond ((memq mirror traversed)
-                     0)
+              (cond ((memq mirror traversed) 0)
                     ((and parent parents-mirrors)
-                     (1+ (reduce #'max
-                                 (mapcar #'(lambda (m)
-                                             (yas--calculate-mirror-depth m
-                                                                          
(cons mirror
-                                                                               
 traversed)))
-                                         parents-mirrors))))
-                    (parent
-                     1)
-                    (t
-                     0))))))
+                     (1+ (cl-reduce
+                          #'max parents-mirrors
+                          :key (lambda (m)
+                                 (yas--calculate-mirror-depth
+                                  m (cons mirror traversed))))))
+                    (parent 1)
+                    (t 0))))))
 
 (defun yas--update-mirrors (snippet)
   "Update all the mirrors of SNIPPET."
@@ -4238,7 +4237,11 @@ When multiple expressions are found, only the last one 
counts."
                 (cl-mapcan #'(lambda (field)
                                (mapcar #'(lambda (mirror)
                                            (cons field mirror))
-                                       (yas--field-mirrors field)))
+                                       (cl-sort
+                                        (cl-copy-list
+                                         (yas--field-mirrors field))
+                                        #'<
+                                        :key #'yas--mirror-start)))
                            (yas--snippet-fields snippet))
                 ;; then sort this list so that entries with mirrors with parent
                 ;; fields appear before. This was important for fixing #290, 
and
@@ -4319,12 +4322,14 @@ When multiple expressions are found, only the last one 
counts."
          ;; restored correctly, this condition handles that
          ;;
          (let* ((snippet (car (yas--snippets-at-point)))
-                (target-field (and snippet
-                                   (find-if-not #'(lambda (field)
-                                                    
(yas--field-probably-deleted-p snippet field))
-                                                (remove nil
-                                                        (cons 
(yas--snippet-active-field snippet)
-                                                              
(yas--snippet-fields snippet)))))))
+                (target-field
+                 (and snippet
+                      (cl-find-if-not
+                       (lambda (field)
+                         (yas--field-probably-deleted-p snippet field))
+                       (remq nil
+                             (cons (yas--snippet-active-field snippet)
+                                   (yas--snippet-fields snippet)))))))
            (when target-field
              (yas--move-to-field snippet target-field))))
         ((not (yas--undo-in-progress))
@@ -4366,9 +4371,9 @@ object satisfying `yas--field-p' to restrict the 
expansion to.")))
   (concat "Expand/run snippets from keymaps, possibly falling back to original 
binding.\n"
           (when (and context (eq this-command 'describe-key))
             (let* ((vec (this-single-command-keys))
-                   (templates (mapcan #'(lambda (table)
-                                          (yas--fetch table vec))
-                                      (yas--get-snippet-tables)))
+                   (templates (cl-mapcan (lambda (table)
+                                           (yas--fetch table vec))
+                                         (yas--get-snippet-tables)))
                    (yas--direct-keymaps nil)
                    (fallback (key-binding vec)))
               (concat "In this case, "
@@ -4417,8 +4422,8 @@ object satisfying `yas--field-p' to restrict the 
expansion to.")))
   "Log level for `yas--message' 4 means trace most anything, 0 means nothing.")
 
 (defun yas--message (level message &rest args)
-  "When LEVEL is above `yas-verbosity-level', log MESSAGE and ARGS."
-  (when (> yas-verbosity level)
+  "When LEVEL is at or below `yas-verbosity-level', log MESSAGE and ARGS."
+  (when (>= yas-verbosity level)
     (message "%s" (apply #'yas--format message args))))
 
 (defun yas--warning (format-control &rest format-args)
@@ -4637,6 +4642,5 @@ can more or less safely rely upon them.")
 ;; Local Variables:
 ;; coding: utf-8
 ;; indent-tabs-mode: nil
-;; byte-compile-warnings: (not cl-functions)
 ;; End:
 ;;; yasnippet.el ends here
diff --git a/packages/ztree/ztree-diff-model.el 
b/packages/ztree/ztree-diff-model.el
index a9c99ae..20df0c0 100644
--- a/packages/ztree/ztree-diff-model.el
+++ b/packages/ztree/ztree-diff-model.el
@@ -138,30 +138,13 @@ RIGHT if only on the right side."
        (string-equal (ztree-diff-node-right-path node1)
                      (ztree-diff-node-right-path node1))))
 
-(defun ztree-diff-untrampify-filename (file)
-  "Return FILE as the local file name."
-  ;; FIXME: We shouldn't use internal Tramp functions.
-  (require 'tramp)
-  (declare-function tramp-tramp-file-p "tramp" (name))
-  (declare-function tramp-file-name-localname "tramp" (vec))
-  (declare-function tramp-dissect-file-name "tramp" (name &optional nodefault))
-  (if (not (tramp-tramp-file-p file))
-      file
-    (tramp-file-name-localname (tramp-dissect-file-name file))))
-
-(defun ztree-diff-modef-quotify-string (x)
-  "Surround string X with quotes."
-  (concat "\"" x "\""))
-
 (defun ztree-diff-model-files-equal (file1 file2)
   "Compare files FILE1 and FILE2 using external diff.
 Returns t if equal."
-  ;; FIXME: This "untrampification" only works if both file1 and file2 are on
-  ;; the same host.
-  ;; FIXME: We assume that default-directory is also on the same host as
-  ;; file(1|2).
-  (let* ((file1-untrampified (ztree-diff-untrampify-filename 
(ztree-diff-modef-quotify-string file1)))
-         (file2-untrampified (ztree-diff-untrampify-filename 
(ztree-diff-modef-quotify-string file2)))
+  (unless (ztree-same-host-p file1 file2)
+    (error "Compared files are not on the same host"))
+  (let* ((file1-untrampified (ztree-quotify-string (ztree-untrampify-filename 
file1)))
+         (file2-untrampified (ztree-quotify-string (ztree-untrampify-filename 
file2)))
          (diff-command (concat diff-command " -q" " " file1-untrampified " " 
file2-untrampified))
          (diff-output (shell-command-to-string diff-command)))
     (if (<= (length diff-output) 2) 'same 'diff)))
diff --git a/packages/ztree/ztree-diff.el b/packages/ztree/ztree-diff.el
index cfd0c96..c454709 100644
--- a/packages/ztree/ztree-diff.el
+++ b/packages/ztree/ztree-diff.el
@@ -520,6 +520,8 @@ Argument DIR2 right directory."
     (error "Path %s is not a directory" dir2))
   (unless (file-exists-p dir2)
     (error "Path %s does not exist" dir2))
+  (unless (ztree-same-host-p dir1 dir2)
+    (error "Compared directories are not on the same host"))
   (let* ((model
           (ztree-diff-node-create nil dir1 dir2 nil))
          (buf-name (concat "*"
diff --git a/packages/ztree/ztree-dir.el b/packages/ztree/ztree-dir.el
index 53617f9..7d866ff 100644
--- a/packages/ztree/ztree-dir.el
+++ b/packages/ztree/ztree-dir.el
@@ -145,6 +145,13 @@ Otherwise, the ztree window is used to find the file."
   (ztree-refresh-buffer))
 
 
+(defun ztree-dir-directory-files (path)
+  "Returns the list of files/directories for the given PATH"
+  ;; remove . and .. from the list of files to avoid infinite
+  ;; recursion
+  (remove-if (lambda (x) (string-match-p "/\\.\\.?$" x))
+             (directory-files path 'full)))
+
 
 
 ;;;###autoload
@@ -160,7 +167,7 @@ Otherwise, the ztree window is used to find the file."
                   #'ztree-file-short-name
                   #'file-directory-p
                   #'string-equal
-                  (lambda (x) (directory-files x 'full))
+                  #'ztree-dir-directory-files
                   nil                   ; face
                   #'ztree-find-file)    ; action
       (ztreedir-mode))))
diff --git a/packages/ztree/ztree-util.el b/packages/ztree/ztree-util.el
index 9f458d6..39975b0 100644
--- a/packages/ztree/ztree-util.el
+++ b/packages/ztree/ztree-util.el
@@ -65,6 +65,20 @@ Used since `car-safe' returns nil for atoms"
     (insert text)
     (put-text-property start (point) 'face face)))
 
+(defun ztree-untrampify-filename (file)
+  "Return FILE as the local file name."
+  (or (file-remote-p file 'localname) file))
+
+(defun ztree-quotify-string (str)
+  "Surround STR with quotes."
+  (concat "\"" str "\""))
+
+(defun ztree-same-host-p (file1 file2)
+  "Return t if FILE1 and FILE2 are on the same host."
+  (let ((file1-remote (file-remote-p file1))
+        (file2-remote (file-remote-p file2)))
+    (string-equal file1-remote file2-remote)))
+
 (provide 'ztree-util)
 
 ;;; ztree-util.el ends here
diff --git a/packages/ztree/ztree.el b/packages/ztree/ztree.el
index 300ed85..dbe9911 100644
--- a/packages/ztree/ztree.el
+++ b/packages/ztree/ztree.el
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Alexey Veretennikov <address@hidden>
 ;; Created: 2013-11-11
-;; Version: 1.0.3
+;; Version: 1.0.4
 ;; Package-Requires: ((cl-lib "0"))
 ;; Keywords: files tools
 ;; URL: https://github.com/fourier/ztree



reply via email to

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