From: Stephen Leake Date: Sat, 12 Jul 2014 17:47:53 +0000 (-0500) Subject: * packages/ada-mode/* : version 5.1.5 X-Git-Url: https://code.delx.au/gnu-emacs-elpa/commitdiff_plain/5614e8da43643ed500c8695cb223e4cfda8f3fc1 * packages/ada-mode/* : version 5.1.5 * packages/ada-mode/ada-mode.texi: New file. * packages/ada-mode/gpr-mode.texi: New file. * packages/wisi/* : version 1.0.5 --- diff --git a/packages/ada-mode/NEWS b/packages/ada-mode/NEWS index f81556b68..22daeb394 100755 --- a/packages/ada-mode/NEWS +++ b/packages/ada-mode/NEWS @@ -7,6 +7,12 @@ Please send Emacs Ada mode bug reports to bug-gnu-emacs@gnu.org, with 'ada-mode' in the subject. If possible, use M-x report-emacs-bug. +* Ada mode 5.1.5 + +** add C-c <, C-c >; goto-declaration-start, -end + +** improve parsing speed significantly + * Ada mode 5.1.4 26 May 2014 diff --git a/packages/ada-mode/README b/packages/ada-mode/README index 60a83c2ce..56bf740e7 100755 --- a/packages/ada-mode/README +++ b/packages/ada-mode/README @@ -1,4 +1,4 @@ -Emacs Ada mode version 5.1.4 +Emacs Ada mode version 5.1.5 Ada mode requires Emacs 24.2 or greater diff --git a/packages/ada-mode/ada-gnat-xref.el b/packages/ada-mode/ada-gnat-xref.el index df2d2d6c9..9accba2f3 100755 --- a/packages/ada-mode/ada-gnat-xref.el +++ b/packages/ada-mode/ada-gnat-xref.el @@ -201,6 +201,7 @@ (setq ada-make-package-body nil) (setq ada-syntax-propertize-hook (delq 'gnatprep-syntax-propertize ada-syntax-propertize-hook)) + (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize ada-syntax-propertize-hook)) (setq ada-mode-hook (delq 'ada-gnat-xref-setup ada-mode-hook)) (setq ada-xref-other-function nil) diff --git a/packages/ada-mode/ada-grammar-wy.el b/packages/ada-mode/ada-grammar-wy.el index 8a60f1191..ef0ece1e2 100755 --- a/packages/ada-mode/ada-grammar-wy.el +++ b/packages/ada-mode/ada-grammar-wy.el @@ -495,6 +495,9 @@ (direct_name ((IDENTIFIER )) ((STRING_LITERAL ))) + (direct_name_opt + (()) + ((direct_name ))) (discrete_choice ((choice_expression )) ((NOT NULL name )) @@ -1118,13 +1121,15 @@ (wisi-containing-action 1 3) (wisi-containing-action 3 4) (wisi-containing-action 5 6) - (wisi-containing-action 7 8))) + (wisi-containing-action 7 8) + (wisi-motion-action 1 5 7 '(8 EXCEPTION) 9))) ((PACKAGE BODY name aspect_specification_opt IS declarative_part_opt END name_opt SEMICOLON ) (progn (wisi-statement-action 1 'block-start 3 'name 5 'block-middle 7 'block-end 9 'statement-end) (wisi-containing-action 1 3) (wisi-containing-action 3 4) - (wisi-containing-action 5 6)))) + (wisi-containing-action 5 6) + (wisi-motion-action 1 5 7)))) (package_body_stub ((PACKAGE BODY name IS SEPARATE aspect_specification_opt SEMICOLON ) (progn @@ -1324,8 +1329,8 @@ (wisi-statement-action 1 'statement-start 2 'statement-end)) ((RAISE name WITH expression 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))) ((RAISE name SEMICOLON ) (wisi-statement-action 1 'statement-start 3 'statement-end))) (range @@ -1638,7 +1643,7 @@ ((derived_type_definition )) ((interface_type_definition ))) (variant_part - ((CASE direct_name IS variant_list END CASE SEMICOLON ) + ((CASE direct_name_opt IS variant_list END CASE SEMICOLON ) (progn (wisi-statement-action 1 'statement-start 3 'block-start 5 'block-end 7 'statement-end) (wisi-containing-action 3 4)))) @@ -1646,7 +1651,7 @@ ((variant )) ((variant_list variant ))) (variant - ((WHEN discrete_choice_list EQUAL_GREATER component_list ) + ((WHEN discrete_choice_list EQUAL_GREATER component_list_opt ) (progn (wisi-statement-action 1 'block-middle 3 'statement-other) (wisi-containing-action 1 2) @@ -2619,56 +2624,56 @@ ((default . error) (END . (exception_handler_list_opt . 1)) (WHEN . 930)) ((default . error) (END . (handled_sequence_of_statements . 0))) ((default . error) (WHEN . (exception_handler_list . 1)) (END . (exception_handler_list . 1))) - ((default . error) (COLON . 1167) (EQUAL_GREATER . (name . 0)) (BAR . (name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0))) + ((default . error) (COLON . 1168) (EQUAL_GREATER . (name . 0)) (BAR . (name . 0)) (LEFT_PAREN . (name . 0)) (DOT . (name . 0)) (TICK . (name . 0))) ((default . error) (BAR . (exception_choice . 1)) (EQUAL_GREATER . (exception_choice . 1))) ((default . error) (EQUAL_GREATER . (exception_choice_list . 0)) (BAR . (exception_choice_list . 0))) - ((default . error) (BAR . 1165) (EQUAL_GREATER . 1166)) + ((default . error) (BAR . 1166) (EQUAL_GREATER . 1167)) ((default . error) (DOT . 87) (BAR . (exception_choice . 0)) (EQUAL_GREATER . (exception_choice . 0)) (TICK . 88) (LEFT_PAREN . 106)) ((default . error) (WHEN . (assignment_statement . 0)) (THEN . (assignment_statement . 0)) (OR . (assignment_statement . 0)) (ELSIF . (assignment_statement . 0)) (ELSE . (assignment_statement . 0)) (WHILE . (assignment_statement . 0)) (SELECT . (assignment_statement . 0)) (RETURN . (assignment_statement . 0)) (REQUEUE . (assignment_statement . 0)) (RAISE . (assignment_statement . 0)) (PRAGMA . (assignment_statement . 0)) (NULL . (assignment_statement . 0)) (LOOP . (assignment_statement . 0)) (IF . (assignment_statement . 0)) (GOTO . (assignment_statement . 0)) (FOR . (assignment_statement . 0)) (EXIT . (assignment_statement . 0)) (DELAY . (assignment_statement . 0)) (DECLARE . (assignment_statement . 0)) (CASE . (assignment_statement . 0)) (BEGIN . (assignment_statement . 0)) (ABORT . (assignment_statement . 0)) (ACCEPT . (assignment_statement . 0)) (CHARACTER_LITERAL . (assignment_statement . 0)) (STRING_LITERAL . (assignment_statement . 0)) (IDENTIFIER . (assignment_statement . 0)) (LESS_LESS . (assignment_statement . 0)) (END . (assignment_statement . 0)) (EXCEPTION . (assignment_statement . 0))) - ((default . error) (LOOP . 1164)) + ((default . error) (LOOP . 1165)) ((default . error) (TYPE . (subprogram_body . 0)) (TASK . (subprogram_body . 0)) (SUBTYPE . (subprogram_body . 0)) (PROTECTED . (subprogram_body . 0)) (FOR . (subprogram_body . 0)) (ENTRY . (subprogram_body . 0)) (IDENTIFIER . (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)) (OVERRIDING . (subprogram_body . 0)) (PACKAGE . (subprogram_body . 0)) (PRAGMA . (subprogram_body . 0)) (PRIVATE . (subprogram_body . 0)) (PROCEDURE . (subprogram_body . 0)) (SEPARATE . (subprogram_body . 0)) (USE . (subprogram_body . 0)) (WITH . (subprogram_body . 0))) - ((default . error) (TERMINATE . 1161) (ACCEPT . 613) (DELAY . 618)) - ((default . error) (END . 1160)) + ((default . error) (TERMINATE . 1162) (ACCEPT . 613) (DELAY . 618)) + ((default . error) (END . 1161)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) - ((default . error) (END . 1158)) + ((default . error) (END . 1159)) ((default . error) (ELSE . (select_alternative_list . 1)) (END . (select_alternative_list . 1)) (OR . (select_alternative_list . 1))) - ((default . error) (SEMICOLON . 1157)) - ((default . error) (END . 1156)) + ((default . error) (SEMICOLON . 1158)) + ((default . error) (END . 1157)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((default . error) (IDENTIFIER . (constant_opt . 0)) (STRING_LITERAL . (constant_opt . 0)) (CHARACTER_LITERAL . (constant_opt . 0)) (ACCESS . (constant_opt . 0)) (NOT . (constant_opt . 0)) (CONSTANT . 726)) - ((default . error) (END . 1153)) + ((default . error) (END . 1154)) + ((default . error) (SEMICOLON . 1153)) ((default . error) (SEMICOLON . 1152)) - ((default . error) (SEMICOLON . 1151)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) - ((default . error) (ELSE . 1145) (END . 1147) (ELSIF . 1146)) - ((default . error) (SEMICOLON . 1144)) + ((default . error) (ELSE . 1146) (END . 1148) (ELSIF . 1147)) + ((default . error) (SEMICOLON . 1145)) ((default . error) (WHEN . (delay_statement . 0)) (ELSIF . (delay_statement . 0)) (EXCEPTION . (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 . (delay_statement . 0)) (LOOP . (delay_statement . 0)) (IF . (delay_statement . 0)) (GOTO . (delay_statement . 0)) (FOR . (delay_statement . 0)) (EXIT . (delay_statement . 0)) (DELAY . (delay_statement . 0)) (DECLARE . (delay_statement . 0)) (CASE . (delay_statement . 0)) (BEGIN . (delay_statement . 0)) (ABORT . (delay_statement . 0)) (ACCEPT . (delay_statement . 0)) (CHARACTER_LITERAL . (delay_statement . 0)) (STRING_LITERAL . (delay_statement . 0)) (IDENTIFIER . (delay_statement . 0)) (LESS_LESS . (delay_statement . 0)) (END . (delay_statement . 0)) (OR . (delay_statement . 0)) (ELSE . (delay_statement . 0)) (THEN . (delay_statement . 0))) - ((default . error) (END . 1143)) + ((default . error) (END . 1144)) ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS . 172) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 171) (NULL . 150) (NEW . 148) (LEFT_PAREN . 147)) ((default . error) (END . (case_statement_alternative_list . 0)) (WHEN . (case_statement_alternative_list . 0))) - ((default . error) (END . 1140) (WHEN . 960)) - ((default . error) (SEMICOLON . 1139)) - ((default . error) (DO . 1138) (SEMICOLON . 1137)) - ((default . error) (BEGIN . 1136)) - ((default . error) (IDENTIFIER . 1135)) + ((default . error) (END . 1141) (WHEN . 960)) + ((default . error) (SEMICOLON . 1140)) + ((default . error) (DO . 1139) (SEMICOLON . 1138)) + ((default . error) (BEGIN . 1137)) + ((default . error) (IDENTIFIER . 1136)) ((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 . 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) (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 . 966) (NOT . 4) (OVERRIDING . 5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) (FOR . 289)) - ((default . error) (END . 1132)) + ((default . error) (END . 1133)) ((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) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (ELSIF . (elsif_expression_list . 1)) (ELSE . (elsif_expression_list . 1)) (RIGHT_PAREN . (elsif_expression_list . 1))) - ((default . error) (THEN . 1130)) + ((default . error) (THEN . 1131)) ((default . error) (RIGHT_PAREN . (if_expression . 2))) - ((default . error) (REVERSE . 1128) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) + ((default . error) (REVERSE . 1129) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) ((default . error) (LOOP . (iterator_specification . 0)) (EQUAL_GREATER . (iterator_specification . 0))) ((default . error) (DOT . 87) (TICK . 88) (LOOP . (iterator_specification . 4)) (EQUAL_GREATER . (iterator_specification . 4)) (LEFT_PAREN . 106)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (RIGHT_PAREN . (case_expression_alternative_list . 1)) (COMMA . (case_expression_alternative_list . 1))) - ((default . error) (SEMICOLON . 1126)) + ((default . error) (SEMICOLON . 1127)) ((default . error) (WITH . (parameter_profile_opt . 0)) (SEMICOLON . (parameter_profile_opt . 0)) (LEFT_PAREN . 782)) ((default . error) (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)) (FOR . (entry_declaration . 1)) (ENTRY . (entry_declaration . 1)) (IDENTIFIER . (entry_declaration . 1)) (BEGIN . (entry_declaration . 1)) (END . (entry_declaration . 1)) (PRIVATE . (entry_declaration . 1))) ((default . error) (WITH . (paren_expression . 2)) (SEMICOLON . (paren_expression . 2))) @@ -2679,25 +2684,25 @@ ((default . error) (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 . (abstract_subprogram_declaration . 0)) (NOT . (abstract_subprogram_declaration . 0)) (GENERIC . (abstract_subprogram_declaration . 0)) (FUNCTION . (abstract_subprogram_declaration . 0)) (FOR . (abstract_subprogram_declaration . 0)) (ENTRY . (abstract_subprogram_declaration . 0)) (IDENTIFIER . (abstract_subprogram_declaration . 0)) (BEGIN . (abstract_subprogram_declaration . 0)) (END . (abstract_subprogram_declaration . 0)) (PRIVATE . (abstract_subprogram_declaration . 0))) ((default . error) (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)) (FUNCTION . (subprogram_body_stub . 0)) (FOR . (subprogram_body_stub . 0)) (ENTRY . (subprogram_body_stub . 0)) (IDENTIFIER . (subprogram_body_stub . 0)) (BEGIN . (subprogram_body_stub . 0)) (END . (subprogram_body_stub . 0)) (PRIVATE . (subprogram_body_stub . 0))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (SEMICOLON . 1123)) + ((default . error) (SEMICOLON . 1124)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (SEMICOLON . 1121)) + ((default . error) (SEMICOLON . 1122)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (SEMICOLON . 1119)) + ((default . error) (SEMICOLON . 1120)) ((default . error) (ACCESS . (null_exclusion_opt . 1)) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) ((default . error) (BEGIN . (declaration . 9)) (IDENTIFIER . (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)) (PRIVATE . (declaration . 9)) (END . (declaration . 9))) - ((default . error) (SEMICOLON . 1118)) + ((default . error) (SEMICOLON . 1119)) ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) ((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 . 736) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) ((default . error) (BEGIN . (incomplete_type_declaration . 0)) (IDENTIFIER . (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 . (incomplete_type_declaration . 0)) (SUBTYPE . (incomplete_type_declaration . 0)) (TASK . (incomplete_type_declaration . 0)) (TYPE . (incomplete_type_declaration . 0)) (USE . (incomplete_type_declaration . 0)) (PRIVATE . (incomplete_type_declaration . 0)) (END . (incomplete_type_declaration . 0))) - ((default . error) (IDENTIFIER . 1112) (STRING_LITERAL . 1113)) + ((default . error) (IS . (direct_name_opt . 0)) (IDENTIFIER . 1112) (STRING_LITERAL . 1113)) ((default . error) (SEMICOLON . 1111)) ((default . error) (WHEN . (component_item . 1)) (END . (component_item . 1)) (FOR . (component_item . 1)) (IDENTIFIER . (component_item . 1)) (CASE . (component_item . 1))) ((default . error) (WHEN . (component_item . 0)) (END . (component_item . 0)) (FOR . (component_item . 0)) (IDENTIFIER . (component_item . 0)) (CASE . (component_item . 0))) ((default . error) (WHEN . (component_list . 0)) (END . (component_list . 0)) (CASE . (component_list . 0)) (IDENTIFIER . (component_list . 0)) (FOR . (component_list . 0))) - ((default . error) (END . (component_list_opt . 1)) (CASE . 1008) (IDENTIFIER . 72) (FOR . 289)) + ((default . error) (WHEN . (component_list_opt . 1)) (END . (component_list_opt . 1)) (CASE . 1008) (IDENTIFIER . 72) (FOR . 289)) ((default . error) (END . 1108)) ((default . error) (COMMA . 95) (COLON . 1107)) ((default . error) (WHEN . (component_list . 3)) (END . (component_list . 3)) (CASE . (component_list . 3)) (IDENTIFIER . (component_list . 3)) (FOR . (component_list . 3))) @@ -2753,7 +2758,7 @@ ((default . error) (PACKAGE . (formal_object_declaration . 0)) (PROCEDURE . (formal_object_declaration . 0)) (FUNCTION . (formal_object_declaration . 0)) (IDENTIFIER . (formal_object_declaration . 0)) (PRAGMA . (formal_object_declaration . 0)) (TYPE . (formal_object_declaration . 0)) (WITH . (formal_object_declaration . 0))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (RIGHT_PAREN . (parameter_specification . 0)) (SEMICOLON . (parameter_specification . 0))) - ((default . error) (PRIVATE . 1232)) + ((default . error) (PRIVATE . 1233)) ((default . error) (DOT . 87) (TICK . 88) (WITH . (interface_list . 1)) (SEMICOLON . (interface_list . 1)) (AND . (interface_list . 1)) (LEFT_PAREN . 106)) ((default . error) (LOOP . (index_constraint . 0)) (DO . (index_constraint . 0)) (EQUAL_GREATER . (index_constraint . 0)) (COMMA . (index_constraint . 0)) (RIGHT_PAREN . (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 . 0)) (MINUS . (primary . 0)) (AMPERSAND . (primary . 0)) (DOT_DOT . (primary . 0)) (SLASH . (primary . 0)) (STAR . (primary . 0)) (MOD . (primary . 0)) (REM . (primary . 0)) (XOR . (primary . 0)) (OR . (primary . 0)) (AND . (primary . 0)) (EQUAL_GREATER . (primary . 0)) (BAR . (primary . 0)) (IN . (primary . 0)) (NOT . (primary . 0)) (EQUAL . (primary . 0)) (GREATER . (primary . 0)) (GREATER_EQUAL . (primary . 0)) (LESS . (primary . 0)) (LESS_EQUAL . (primary . 0)) (SLASH_EQUAL . (primary . 0)) (RIGHT_PAREN . (primary . 0)) (COMMA . (primary . 0)) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) @@ -2765,24 +2770,24 @@ ((default . error) (WITH . (array_type_definition . 1)) (SEMICOLON . (array_type_definition . 1)) (COLON_EQUAL . (array_type_definition . 1))) ((default . error) (END . (object_renaming_declaration . 2)) (PRIVATE . (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 . (object_renaming_declaration . 2)) (OVERRIDING . (object_renaming_declaration . 2)) (NOT . (object_renaming_declaration . 2)) (GENERIC . (object_renaming_declaration . 2)) (FUNCTION . (object_renaming_declaration . 2)) (FOR . (object_renaming_declaration . 2)) (ENTRY . (object_renaming_declaration . 2)) (IDENTIFIER . (object_renaming_declaration . 2)) (BEGIN . (object_renaming_declaration . 2))) ((default . error) (END . (object_renaming_declaration . 1)) (PRIVATE . (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 . (object_renaming_declaration . 1)) (OVERRIDING . (object_renaming_declaration . 1)) (NOT . (object_renaming_declaration . 1)) (GENERIC . (object_renaming_declaration . 1)) (FUNCTION . (object_renaming_declaration . 1)) (FOR . (object_renaming_declaration . 1)) (ENTRY . (object_renaming_declaration . 1)) (IDENTIFIER . (object_renaming_declaration . 1)) (BEGIN . (object_renaming_declaration . 1))) + ((default . error) (SEMICOLON . 1229)) ((default . error) (SEMICOLON . 1228)) - ((default . error) (SEMICOLON . 1227)) - ((default . error) (RECORD . 1226)) + ((default . error) (RECORD . 1227)) ((default . error) (IDENTIFIER . (component_clause_list . 1)) (END . (component_clause_list . 1))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (PRIVATE . (package_body_stub . 0)) (END . (package_body_stub . 0)) (BEGIN . (package_body_stub . 0)) (IDENTIFIER . (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 . (package_body_stub . 0)) (TASK . (package_body_stub . 0)) (TYPE . (package_body_stub . 0)) (USE . (package_body_stub . 0))) ((default . error) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) - ((default . error) (SEMICOLON . 1223)) + ((default . error) (SEMICOLON . 1224)) ((default . error) (PRIVATE . (protected_body_stub . 0)) (END . (protected_body_stub . 0)) (BEGIN . (protected_body_stub . 0)) (IDENTIFIER . (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 . (protected_body_stub . 0)) (SUBTYPE . (protected_body_stub . 0)) (TASK . (protected_body_stub . 0)) (TYPE . (protected_body_stub . 0)) (USE . (protected_body_stub . 0))) ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . (declarative_part_opt . 0)) (USE . 11) (SUBTYPE . 292) (PRAGMA . 7) (NOT . 4) (OVERRIDING . 5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 289) (IDENTIFIER . 288) (TYPE . 294) (GENERIC . 2) (PROTECTED . 291) (TASK . 293) (PACKAGE . 290)) - ((default . error) (END . 1221)) + ((default . error) (END . 1222)) ((default . error) (SEMICOLON . (protected_definition . 1))) ((default . error) (LOOP . (subtype_indication . 0)) (DO . (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)) (COLON_EQUAL . (subtype_indication . 0))) ((default . error) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) - ((default . error) (SEMICOLON . 1219)) + ((default . error) (SEMICOLON . 1220)) ((default . error) (PRIVATE . (task_body_stub . 0)) (END . (task_body_stub . 0)) (BEGIN . (task_body_stub . 0)) (IDENTIFIER . (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_body_stub . 0)) (TYPE . (task_body_stub . 0)) (USE . (task_body_stub . 0))) ((default . error) (END . (declarative_part_opt . 0)) (PRIVATE . (declarative_part_opt . 0)) (USE . 11) (SUBTYPE . 292) (PRAGMA . 7) (NOT . 4) (OVERRIDING . 5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 289) (IDENTIFIER . 288) (TYPE . 294) (GENERIC . 2) (PROTECTED . 291) (TASK . 293) (PACKAGE . 290)) - ((default . error) (END . 1217)) + ((default . error) (END . 1218)) ((default . error) (SEMICOLON . (task_definition . 1))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) @@ -2792,16 +2797,17 @@ ((default . error) (SEMICOLON . (enumeration_type_definition . 0)) (WITH . (enumeration_type_definition . 0))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (ALIASED . 1074) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (ACCESS . (null_exclusion_opt . 0)) (NOT . 862)) - ((default . error) (RECORD . 1211)) + ((default . error) (RECORD . 1212)) ((default . error) (WHEN . (component_list . 1)) (FOR . (component_list . 1)) (IDENTIFIER . (component_list . 1)) (CASE . (component_list . 1)) (END . (component_list . 1))) ((default . error) (WHEN . (component_list . 2)) (FOR . (component_list . 2)) (IDENTIFIER . (component_list . 2)) (CASE . (component_list . 2)) (END . (component_list . 2))) ((default . error) (WHEN . (component_list . 4)) (FOR . (component_list . 4)) (IDENTIFIER . (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 . 1210)) - ((default . error) (WITH . (and_interface_list_opt . 0)) (AND . 1205)) - ((default . error) (DOT . 87) (TICK . 88) (AND . 1205) (WITH . ((and_interface_list_opt . 0) (constraint_opt . 0))) (SEMICOLON . (constraint_opt . 0)) (RANGE . 833) (LEFT_PAREN . 803)) - ((default . error) (SEMICOLON . 1204)) + ((default . error) (IS . (direct_name_opt . 1))) + ((default . error) (IS . 1211)) + ((default . error) (WITH . (and_interface_list_opt . 0)) (AND . 1206)) + ((default . error) (DOT . 87) (TICK . 88) (AND . 1206) (WITH . ((and_interface_list_opt . 0) (constraint_opt . 0))) (SEMICOLON . (constraint_opt . 0)) (RANGE . 833) (LEFT_PAREN . 803)) + ((default . error) (SEMICOLON . 1205)) ((default . error) (END . (full_type_declaration . 0)) (PRIVATE . (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_declaration . 0)) (NOT . (full_type_declaration . 0)) (GENERIC . (full_type_declaration . 0)) (FUNCTION . (full_type_declaration . 0)) (FOR . (full_type_declaration . 0)) (ENTRY . (full_type_declaration . 0)) (IDENTIFIER . (full_type_declaration . 0)) (BEGIN . (full_type_declaration . 0))) ((default . error) (PRIVATE . (object_declaration . 3)) (END . (object_declaration . 3)) (BEGIN . (object_declaration . 3)) (IDENTIFIER . (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 . 3)) (SUBTYPE . (object_declaration . 3)) (TASK . (object_declaration . 3)) (TYPE . (object_declaration . 3)) (USE . (object_declaration . 3))) ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) @@ -2819,97 +2825,97 @@ ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) ((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 . 108)) - ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN . 1194)) + ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN . 1195)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((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)) (LESS_LESS . (accept_statement . 1)) (IDENTIFIER . (accept_statement . 1)) (STRING_LITERAL . (accept_statement . 1)) (CHARACTER_LITERAL . (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 . (accept_statement . 1)) (GOTO . (accept_statement . 1)) (IF . (accept_statement . 1)) (LOOP . (accept_statement . 1)) (NULL . (accept_statement . 1)) (PRAGMA . (accept_statement . 1)) (RAISE . (accept_statement . 1)) (REQUEUE . (accept_statement . 1)) (RETURN . (accept_statement . 1)) (SELECT . (accept_statement . 1)) (WHILE . (accept_statement . 1))) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((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)) (IDENTIFIER . (block_statement . 1)) (STRING_LITERAL . (block_statement . 1)) (CHARACTER_LITERAL . (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_statement . 1)) (IF . (block_statement . 1)) (LOOP . (block_statement . 1)) (NULL . (block_statement . 1)) (PRAGMA . (block_statement . 1)) (RAISE . (block_statement . 1)) (REQUEUE . (block_statement . 1)) (RETURN . (block_statement . 1)) (SELECT . (block_statement . 1)) (WHILE . (block_statement . 1)) (ELSE . (block_statement . 1)) (ELSIF . (block_statement . 1))) - ((default . error) (CASE . 1191)) + ((default . error) (CASE . 1192)) ((default . error) (WHEN . (case_statement_alternative_list . 1)) (END . (case_statement_alternative_list . 1))) - ((default . error) (BAR . 275) (EQUAL_GREATER . 1190)) + ((default . error) (BAR . 275) (EQUAL_GREATER . 1191)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) ((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)) (IDENTIFIER . (exit_statement . 0)) (STRING_LITERAL . (exit_statement . 0)) (CHARACTER_LITERAL . (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 . (exit_statement . 0)) (LOOP . (exit_statement . 0)) (NULL . (exit_statement . 0)) (PRAGMA . (exit_statement . 0)) (RAISE . (exit_statement . 0)) (REQUEUE . (exit_statement . 0)) (RETURN . (exit_statement . 0)) (SELECT . (exit_statement . 0)) (WHILE . (exit_statement . 0)) (ELSE . (exit_statement . 0)) (ELSIF . (exit_statement . 0))) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((default . error) (THEN . (expression_opt . 0)) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (IF . 1186)) + ((default . error) (IF . 1187)) ((default . error) (END . (elsif_statement_list . 0)) (ELSE . (elsif_statement_list . 0)) (ELSIF . (elsif_statement_list . 0))) - ((default . error) (END . 1184) (ELSE . 1183) (ELSIF . 1146)) - ((default . error) (SEMICOLON . 1182)) + ((default . error) (END . 1185) (ELSE . 1184) (ELSIF . 1147)) + ((default . error) (SEMICOLON . 1183)) ((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)) (IDENTIFIER . (raise_statement . 1)) (STRING_LITERAL . (raise_statement . 1)) (CHARACTER_LITERAL . (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_statement . 1)) (IF . (raise_statement . 1)) (LOOP . (raise_statement . 1)) (NULL . (raise_statement . 1)) (PRAGMA . (raise_statement . 1)) (RAISE . (raise_statement . 1)) (REQUEUE . (raise_statement . 1)) (RETURN . (raise_statement . 1)) (SELECT . (raise_statement . 1)) (WHILE . (raise_statement . 1)) (ELSE . (raise_statement . 1)) (ELSIF . (raise_statement . 1))) ((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)) (IDENTIFIER . (requeue_statement . 0)) (STRING_LITERAL . (requeue_statement . 0)) (CHARACTER_LITERAL . (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_statement . 0)) (GOTO . (requeue_statement . 0)) (IF . (requeue_statement . 0)) (LOOP . (requeue_statement . 0)) (NULL . (requeue_statement . 0)) (PRAGMA . (requeue_statement . 0)) (RAISE . (requeue_statement . 0)) (REQUEUE . (requeue_statement . 0)) (RETURN . (requeue_statement . 0)) (SELECT . (requeue_statement . 0)) (WHILE . (requeue_statement . 0)) (ELSE . (requeue_statement . 0)) (ELSIF . (requeue_statement . 0))) - ((default . error) (RETURN . 1181)) + ((default . error) (RETURN . 1182)) ((default . error) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (ACCESS . (null_exclusion_opt . 0)) (NOT . 862)) - ((default . error) (END . 1177)) - ((default . error) (SELECT . 1176)) + ((default . error) (END . 1178)) + ((default . error) (SELECT . 1177)) ((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)) (IDENTIFIER . (selective_accept . 1)) (STRING_LITERAL . (selective_accept . 1)) (CHARACTER_LITERAL . (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 . (selective_accept . 1)) (IF . (selective_accept . 1)) (LOOP . (selective_accept . 1)) (NULL . (selective_accept . 1)) (PRAGMA . (selective_accept . 1)) (RAISE . (selective_accept . 1)) (REQUEUE . (selective_accept . 1)) (RETURN . (selective_accept . 1)) (SELECT . (selective_accept . 1)) (WHILE . (selective_accept . 1)) (ELSE . (selective_accept . 1)) (ELSIF . (selective_accept . 1))) - ((default . error) (SELECT . 1175)) + ((default . error) (SELECT . 1176)) ((default . error) (END . (delay_alternative . 0)) (OR . (delay_alternative . 0)) (ELSE . (delay_alternative . 0))) - ((default . error) (SELECT . 1174)) - ((default . error) (SEMICOLON . 1173)) + ((default . error) (SELECT . 1175)) + ((default . error) (SEMICOLON . 1174)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((default . error) (END . (select_alternative . 2)) (OR . (select_alternative . 2)) (ELSE . (select_alternative . 2))) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) ((default . error) (OTHERS . 936) (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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((default . error) (OTHERS . 936) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) - ((default . error) (BAR . 1165) (EQUAL_GREATER . 1274)) + ((default . error) (BAR . 1166) (EQUAL_GREATER . 1275)) ((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 . 1273)) + ((default . error) (SEMICOLON . 1274)) ((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 . 1273)) ((default . error) (SEMICOLON . 1272)) ((default . error) (SEMICOLON . 1271)) - ((default . error) (SEMICOLON . 1270)) - ((default . error) (SELECT . 1269)) + ((default . error) (SELECT . 1270)) ((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 . 1268)) + ((default . error) (DO . (extended_return_object_declaration . 1)) (SEMICOLON . (extended_return_object_declaration . 1)) (COLON_EQUAL . 1269)) ((default . error) (DO . (return_subtype_indication . 0)) (SEMICOLON . (return_subtype_indication . 0)) (COLON_EQUAL . (return_subtype_indication . 0))) - ((default . error) (SEMICOLON . 1267)) + ((default . error) (SEMICOLON . 1268)) ((default . error) (WHEN . (loop_statement . 1)) (THEN . (loop_statement . 1)) (OR . (loop_statement . 1)) (ELSIF . (loop_statement . 1)) (ELSE . (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 . (loop_statement . 1)) (LOOP . (loop_statement . 1)) (IF . (loop_statement . 1)) (GOTO . (loop_statement . 1)) (FOR . (loop_statement . 1)) (EXIT . (loop_statement . 1)) (DELAY . (loop_statement . 1)) (DECLARE . (loop_statement . 1)) (CASE . (loop_statement . 1)) (BEGIN . (loop_statement . 1)) (ABORT . (loop_statement . 1)) (ACCEPT . (loop_statement . 1)) (CHARACTER_LITERAL . (loop_statement . 1)) (STRING_LITERAL . (loop_statement . 1)) (IDENTIFIER . (loop_statement . 1)) (LESS_LESS . (loop_statement . 1)) (END . (loop_statement . 1)) (EXCEPTION . (loop_statement . 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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) - ((default . error) (IF . 1265)) + ((default . error) (IF . 1266)) ((default . error) (ELSIF . (elsif_statement_list . 1)) (ELSE . (elsif_statement_list . 1)) (END . (elsif_statement_list . 1))) - ((default . error) (SEMICOLON . 1264)) - ((default . error) (THEN . 1263)) - ((default . error) (END . 1262)) - ((default . error) (SEMICOLON . 1261)) + ((default . error) (SEMICOLON . 1265)) + ((default . error) (THEN . 1264)) + ((default . error) (END . 1263)) + ((default . error) (SEMICOLON . 1262)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) - ((default . error) (SEMICOLON . 1259)) + ((default . error) (SEMICOLON . 1260)) + ((default . error) (END . 1259)) ((default . error) (END . 1258)) - ((default . error) (END . 1257)) - ((default . error) (FOR . 1256) (IDENTIFIER . 72)) - ((default . error) (WHEN . 1255)) + ((default . error) (FOR . 1257) (IDENTIFIER . 72)) + ((default . error) (WHEN . 1256)) ((default . error) (WHEN . (entry_body_formal_part . 1))) - ((default . error) (SEMICOLON . 1254)) + ((default . error) (SEMICOLON . 1255)) ((default . error) (ELSE . (elsif_expression_item . 0)) (ELSIF . (elsif_expression_item . 0)) (RIGHT_PAREN . (elsif_expression_item . 0))) ((default . error) (DOT . 87) (TICK . 88) (LOOP . (iterator_specification . 2)) (EQUAL_GREATER . (iterator_specification . 2)) (LEFT_PAREN . 106)) + ((default . error) (SEMICOLON . 1254)) ((default . error) (SEMICOLON . 1253)) ((default . error) (SEMICOLON . 1252)) ((default . error) (SEMICOLON . 1251)) - ((default . error) (SEMICOLON . 1250)) ((default . error) (BEGIN . (private_type_declaration . 0)) (IDENTIFIER . (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)) (SUBTYPE . (private_type_declaration . 0)) (TASK . (private_type_declaration . 0)) (TYPE . (private_type_declaration . 0)) (USE . (private_type_declaration . 0)) (PRIVATE . (private_type_declaration . 0)) (END . (private_type_declaration . 0))) ((default . error) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49)) - ((default . error) (WITH . 1248)) + ((default . error) (WITH . 1249)) ((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 . 1247)) - ((default . error) (WHEN . 1244)) + ((default . error) (WITH . 1248)) + ((default . error) (WHEN . 1245)) ((default . error) (SEMICOLON . (record_definition . 0)) (WITH . (record_definition . 0))) - ((default . error) (COLON_EQUAL . 1242) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) + ((default . error) (COLON_EQUAL . 1243) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) ((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 . 1241)) + ((default . error) (DOT_DOT . 1242)) ((default . error) (WITH . (real_range_specification_opt . 0)) (SEMICOLON . (real_range_specification_opt . 0)) (RANGE . 1101)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) - ((default . error) (SEMICOLON . 1238)) + ((default . error) (SEMICOLON . 1239)) ((default . error) (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_declaration . 1)) (FUNCTION . (task_type_declaration . 1)) (FOR . (task_type_declaration . 1)) (ENTRY . (task_type_declaration . 1)) (IDENTIFIER . (task_type_declaration . 1)) (BEGIN . (task_type_declaration . 1)) (END . (task_type_declaration . 1)) (PRIVATE . (task_type_declaration . 1))) - ((default . error) (AND . 1061) (WITH . 1237)) + ((default . error) (AND . 1061) (WITH . 1238)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) - ((default . error) (SEMICOLON . 1235)) + ((default . error) (SEMICOLON . 1236)) ((default . error) (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_type_declaration . 1)) (GENERIC . (protected_type_declaration . 1)) (FUNCTION . (protected_type_declaration . 1)) (FOR . (protected_type_declaration . 1)) (ENTRY . (protected_type_declaration . 1)) (IDENTIFIER . (protected_type_declaration . 1)) (BEGIN . (protected_type_declaration . 1)) (END . (protected_type_declaration . 1)) (PRIVATE . (protected_type_declaration . 1))) - ((default . error) (AND . 1061) (WITH . 1234)) - ((default . error) (RANGE . 1233)) + ((default . error) (AND . 1061) (WITH . 1235)) + ((default . error) (RANGE . 1234)) ((default . error) (SEMICOLON . (record_rep . 0))) ((default . error) (IDENTIFIER . (mod_clause_opt . 1))) ((default . error) (BEGIN . (object_renaming_declaration . 0)) (IDENTIFIER . (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 . (object_renaming_declaration . 0)) (SUBTYPE . (object_renaming_declaration . 0)) (TASK . (object_renaming_declaration . 0)) (TYPE . (object_renaming_declaration . 0)) (USE . (object_renaming_declaration . 0)) (PRIVATE . (object_renaming_declaration . 0)) (END . (object_renaming_declaration . 0))) @@ -2927,11 +2933,11 @@ ((default . error) (WITH . (type_definition . 5)) (SEMICOLON . (type_definition . 5))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (SEMICOLON . 1291)) + ((default . error) (SEMICOLON . 1292)) ((default . error) (EQUAL_GREATER . (discrete_choice_list . 0)) (BAR . (discrete_choice_list . 0)) (OTHERS . 172) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 171) (NULL . 150) (NEW . 148) (LEFT_PAREN . 147)) - ((default . error) (END . 1288) (WHEN . 1244)) + ((default . error) (END . 1289) (WHEN . 1245)) ((default . error) (END . (variant_list . 0)) (WHEN . (variant_list . 0))) - ((default . error) (PRIVATE . 1287)) + ((default . error) (PRIVATE . 1288)) ((default . error) (RECORD . 848) (NULL . 846)) ((default . error) (AND . 1061) (WITH . (and_interface_list_opt . 1))) ((default . error) (PRIVATE . (object_declaration . 2)) (END . (object_declaration . 2)) (BEGIN . (object_declaration . 2)) (IDENTIFIER . (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 . 2)) (SUBTYPE . (object_declaration . 2)) (TASK . (object_declaration . 2)) (TYPE . (object_declaration . 2)) (USE . (object_declaration . 2))) @@ -2940,20 +2946,20 @@ ((default . error) (PRIVATE . (entry_declaration . 0)) (END . (entry_declaration . 0)) (BEGIN . (entry_declaration . 0)) (IDENTIFIER . (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 . (entry_declaration . 0)) (TASK . (entry_declaration . 0)) (TYPE . (entry_declaration . 0)) (USE . (entry_declaration . 0))) ((default . error) (PRIVATE . (protected_body . 0)) (END . (protected_body . 0)) (BEGIN . (protected_body . 0)) (IDENTIFIER . (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 . (protected_body . 0)) (TYPE . (protected_body . 0)) (USE . (protected_body . 0)) ($EOI . (protected_body . 0)) (LIMITED . (protected_body . 0)) (SEPARATE . (protected_body . 0)) (WITH . (protected_body . 0))) ((default . error) (IS . (expression_opt . 0)) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (IDENTIFIER . 1284)) + ((default . error) (IDENTIFIER . 1285)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) ((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)) (IDENTIFIER . (case_statement . 0)) (STRING_LITERAL . (case_statement . 0)) (CHARACTER_LITERAL . (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 . (case_statement . 0)) (LOOP . (case_statement . 0)) (NULL . (case_statement . 0)) (PRAGMA . (case_statement . 0)) (RAISE . (case_statement . 0)) (REQUEUE . (case_statement . 0)) (RETURN . (case_statement . 0)) (SELECT . (case_statement . 0)) (WHILE . (case_statement . 0)) (ELSE . (case_statement . 0)) (ELSIF . (case_statement . 0))) ((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)) (IDENTIFIER . (block_statement . 0)) (STRING_LITERAL . (block_statement . 0)) (CHARACTER_LITERAL . (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_statement . 0)) (IF . (block_statement . 0)) (LOOP . (block_statement . 0)) (NULL . (block_statement . 0)) (PRAGMA . (block_statement . 0)) (RAISE . (block_statement . 0)) (REQUEUE . (block_statement . 0)) (RETURN . (block_statement . 0)) (SELECT . (block_statement . 0)) (WHILE . (block_statement . 0)) (ELSE . (block_statement . 0)) (ELSIF . (block_statement . 0))) - ((default . error) (IF . 1281)) + ((default . error) (IF . 1282)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((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)) (IDENTIFIER . (if_statement . 3)) (STRING_LITERAL . (if_statement . 3)) (CHARACTER_LITERAL . (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 . (if_statement . 3)) (NULL . (if_statement . 3)) (PRAGMA . (if_statement . 3)) (RAISE . (if_statement . 3)) (REQUEUE . (if_statement . 3)) (RETURN . (if_statement . 3)) (SELECT . (if_statement . 3)) (WHILE . (if_statement . 3)) (ELSE . (if_statement . 3)) (ELSIF . (if_statement . 3))) - ((default . error) (SEMICOLON . 1279)) - ((default . error) (END . 1278)) + ((default . error) (SEMICOLON . 1280)) + ((default . error) (END . 1279)) ((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)) (IDENTIFIER . (extended_return_statement . 0)) (STRING_LITERAL . (extended_return_statement . 0)) (CHARACTER_LITERAL . (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)) (DELAY . (extended_return_statement . 0)) (EXIT . (extended_return_statement . 0)) (FOR . (extended_return_statement . 0)) (GOTO . (extended_return_statement . 0)) (IF . (extended_return_statement . 0)) (LOOP . (extended_return_statement . 0)) (NULL . (extended_return_statement . 0)) (PRAGMA . (extended_return_statement . 0)) (RAISE . (extended_return_statement . 0)) (REQUEUE . (extended_return_statement . 0)) (RETURN . (extended_return_statement . 0)) (SELECT . (extended_return_statement . 0)) (WHILE . (extended_return_statement . 0)) (ELSE . (extended_return_statement . 0)) (ELSIF . (extended_return_statement . 0))) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) - ((default . error) (SEMICOLON . 1276)) + ((default . error) (SEMICOLON . 1277)) ((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)) (IDENTIFIER . (selective_accept . 0)) (STRING_LITERAL . (selective_accept . 0)) (CHARACTER_LITERAL . (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 . (selective_accept . 0)) (IF . (selective_accept . 0)) (LOOP . (selective_accept . 0)) (NULL . (selective_accept . 0)) (PRAGMA . (selective_accept . 0)) (RAISE . (selective_accept . 0)) (REQUEUE . (selective_accept . 0)) (RETURN . (selective_accept . 0)) (SELECT . (selective_accept . 0)) (WHILE . (selective_accept . 0)) (ELSE . (selective_accept . 0)) (ELSIF . (selective_accept . 0))) ((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)) (IDENTIFIER . (conditional_entry_call . 0)) (STRING_LITERAL . (conditional_entry_call . 0)) (CHARACTER_LITERAL . (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 . 0)) (EXIT . (conditional_entry_call . 0)) (FOR . (conditional_entry_call . 0)) (GOTO . (conditional_entry_call . 0)) (IF . (conditional_entry_call . 0)) (LOOP . (conditional_entry_call . 0)) (NULL . (conditional_entry_call . 0)) (PRAGMA . (conditional_entry_call . 0)) (RAISE . (conditional_entry_call . 0)) (REQUEUE . (conditional_entry_call . 0)) (RETURN . (conditional_entry_call . 0)) (SELECT . (conditional_entry_call . 0)) (WHILE . (conditional_entry_call . 0)) (ELSE . (conditional_entry_call . 0)) (ELSIF . (conditional_entry_call . 0))) ((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)) (IDENTIFIER . (timed_entry_call . 0)) (STRING_LITERAL . (timed_entry_call . 0)) (CHARACTER_LITERAL . (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 . (timed_entry_call . 0)) (IF . (timed_entry_call . 0)) (LOOP . (timed_entry_call . 0)) (NULL . (timed_entry_call . 0)) (PRAGMA . (timed_entry_call . 0)) (RAISE . (timed_entry_call . 0)) (REQUEUE . (timed_entry_call . 0)) (RETURN . (timed_entry_call . 0)) (SELECT . (timed_entry_call . 0)) (WHILE . (timed_entry_call . 0)) (ELSE . (timed_entry_call . 0)) (ELSIF . (timed_entry_call . 0))) @@ -2962,53 +2968,53 @@ ((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)) (WHILE . (asynchronous_select . 0)) (SELECT . (asynchronous_select . 0)) (RETURN . (asynchronous_select . 0)) (REQUEUE . (asynchronous_select . 0)) (RAISE . (asynchronous_select . 0)) (PRAGMA . (asynchronous_select . 0)) (NULL . (asynchronous_select . 0)) (LOOP . (asynchronous_select . 0)) (IF . (asynchronous_select . 0)) (GOTO . (asynchronous_select . 0)) (FOR . (asynchronous_select . 0)) (EXIT . (asynchronous_select . 0)) (DELAY . (asynchronous_select . 0)) (DECLARE . (asynchronous_select . 0)) (CASE . (asynchronous_select . 0)) (BEGIN . (asynchronous_select . 0)) (ABORT . (asynchronous_select . 0)) (ACCEPT . (asynchronous_select . 0)) (CHARACTER_LITERAL . (asynchronous_select . 0)) (STRING_LITERAL . (asynchronous_select . 0)) (IDENTIFIER . (asynchronous_select . 0)) (LESS_LESS . (asynchronous_select . 0)) (END . (asynchronous_select . 0)) (EXCEPTION . (asynchronous_select . 0))) ((default . error) (DO . (extended_return_object_declaration . 0)) (SEMICOLON . (extended_return_object_declaration . 0))) - ((default . error) (IF . 1309)) + ((default . error) (IF . 1310)) ((default . error) (WHEN . (if_statement . 1)) (THEN . (if_statement . 1)) (OR . (if_statement . 1)) (ELSIF . (if_statement . 1)) (ELSE . (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 . (if_statement . 1)) (IF . (if_statement . 1)) (GOTO . (if_statement . 1)) (FOR . (if_statement . 1)) (EXIT . (if_statement . 1)) (DELAY . (if_statement . 1)) (DECLARE . (if_statement . 1)) (CASE . (if_statement . 1)) (BEGIN . (if_statement . 1)) (ABORT . (if_statement . 1)) (ACCEPT . (if_statement . 1)) (CHARACTER_LITERAL . (if_statement . 1)) (STRING_LITERAL . (if_statement . 1)) (IDENTIFIER . (if_statement . 1)) (LESS_LESS . (if_statement . 1)) (END . (if_statement . 1)) (EXCEPTION . (if_statement . 1))) ((default . error) (ELSE . (elsif_statement_item . 0)) (ELSIF . (elsif_statement_item . 0)) (END . (elsif_statement_item . 0))) + ((default . error) (SEMICOLON . 1309)) ((default . error) (SEMICOLON . 1308)) ((default . error) (SEMICOLON . 1307)) - ((default . error) (SEMICOLON . 1306)) - ((default . error) (IN . 1305)) - ((default . error) (IS . 1304)) + ((default . error) (IN . 1306)) + ((default . error) (IS . 1305)) ((default . error) (WITH . (derived_type_definition . 0)) (SEMICOLON . (derived_type_definition . 0))) ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) - ((default . error) (CASE . 1302)) + ((default . error) (CASE . 1303)) ((default . error) (WHEN . (variant_list . 1)) (END . (variant_list . 1))) - ((default . error) (BAR . 275) (EQUAL_GREATER . 1301)) + ((default . error) (BAR . 275) (EQUAL_GREATER . 1302)) ((default . error) (WHEN . (component_declaration . 1)) (END . (component_declaration . 1)) (CASE . (component_declaration . 1)) (IDENTIFIER . (component_declaration . 1)) (FOR . (component_declaration . 1))) ((default . error) (SEMICOLON . (aspect_specification_opt . 0)) (WITH . 108)) ((default . error) (SEMICOLON . (real_range_specification_opt . 1)) (WITH . (real_range_specification_opt . 1))) + ((default . error) (SEMICOLON . 1300)) ((default . error) (SEMICOLON . 1299)) - ((default . error) (SEMICOLON . 1298)) - ((default . error) (DOT_DOT . 1297)) + ((default . error) (DOT_DOT . 1298)) ((default . error) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 149) (NULL . 150) (NEW . 148) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (LEFT_PAREN . 147)) ((default . error) (PRIVATE . (protected_type_declaration . 0)) (END . (protected_type_declaration . 0)) (BEGIN . (protected_type_declaration . 0)) (IDENTIFIER . (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_declaration . 0)) (PROCEDURE . (protected_type_declaration . 0)) (PROTECTED . (protected_type_declaration . 0)) (SUBTYPE . (protected_type_declaration . 0)) (TASK . (protected_type_declaration . 0)) (TYPE . (protected_type_declaration . 0)) (USE . (protected_type_declaration . 0))) ((default . error) (PRIVATE . (task_type_declaration . 0)) (END . (task_type_declaration . 0)) (BEGIN . (task_type_declaration . 0)) (IDENTIFIER . (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)) (PROTECTED . (task_type_declaration . 0)) (SUBTYPE . (task_type_declaration . 0)) (TASK . (task_type_declaration . 0)) (TYPE . (task_type_declaration . 0)) (USE . (task_type_declaration . 0))) - ((default . error) (SEMICOLON . 1316)) - ((default . error) (NULL . 1009) (CASE . 1008) (IDENTIFIER . 72) (FOR . 289)) + ((default . error) (SEMICOLON . 1317)) + ((default . error) (END . (component_list_opt . 0)) (WHEN . (component_list_opt . 0)) (NULL . 1009) (CASE . 1008) (IDENTIFIER . 72) (FOR . 289)) + ((default . error) (SEMICOLON . 1315)) ((default . error) (SEMICOLON . 1314)) - ((default . error) (SEMICOLON . 1313)) ((default . error) (BEGIN . (declarative_part_opt . 0)) (USE . 11) (SUBTYPE . 292) (PRAGMA . 7) (NOT . 4) (OVERRIDING . 5) (FUNCTION . (overriding_indicator_opt . 2)) (PROCEDURE . (overriding_indicator_opt . 2)) (ENTRY . (overriding_indicator_opt . 2)) (FOR . 289) (IDENTIFIER . 288) (TYPE . 294) (GENERIC . 2) (PROTECTED . 291) (TASK . 293) (PACKAGE . 290)) ((default . error) (IDENTIFIER . 48) (CHARACTER_LITERAL . 50) (STRING_LITERAL . 49) (PLUS . 144) (MINUS . 143) (ABS . 146) (NOT . 758) (NULL . 150) (NEW . 148) (LEFT_PAREN . 147)) ((default . error) (PRIVATE . (task_body . 0)) (END . (task_body . 0)) (BEGIN . (task_body . 0)) (IDENTIFIER . (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)) ($EOI . (task_body . 0)) (LIMITED . (task_body . 0)) (SEPARATE . (task_body . 0)) (WITH . (task_body . 0))) ((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)) (LESS_LESS . (accept_statement . 0)) (IDENTIFIER . (accept_statement . 0)) (STRING_LITERAL . (accept_statement . 0)) (CHARACTER_LITERAL . (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 . (accept_statement . 0)) (GOTO . (accept_statement . 0)) (IF . (accept_statement . 0)) (LOOP . (accept_statement . 0)) (NULL . (accept_statement . 0)) (PRAGMA . (accept_statement . 0)) (RAISE . (accept_statement . 0)) (REQUEUE . (accept_statement . 0)) (RETURN . (accept_statement . 0)) (SELECT . (accept_statement . 0)) (WHILE . (accept_statement . 0))) ((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)) (IDENTIFIER . (if_statement . 2)) (STRING_LITERAL . (if_statement . 2)) (CHARACTER_LITERAL . (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 . (if_statement . 2)) (NULL . (if_statement . 2)) (PRAGMA . (if_statement . 2)) (RAISE . (if_statement . 2)) (REQUEUE . (if_statement . 2)) (RETURN . (if_statement . 2)) (SELECT . (if_statement . 2)) (WHILE . (if_statement . 2)) (ELSE . (if_statement . 2)) (ELSIF . (if_statement . 2))) - ((default . error) (SEMICOLON . 1310)) + ((default . error) (SEMICOLON . 1311)) ((default . error) (WHEN . (if_statement . 0)) (THEN . (if_statement . 0)) (OR . (if_statement . 0)) (ELSIF . (if_statement . 0)) (ELSE . (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 . (if_statement . 0)) (IF . (if_statement . 0)) (GOTO . (if_statement . 0)) (FOR . (if_statement . 0)) (EXIT . (if_statement . 0)) (DELAY . (if_statement . 0)) (DECLARE . (if_statement . 0)) (CASE . (if_statement . 0)) (BEGIN . (if_statement . 0)) (ABORT . (if_statement . 0)) (ACCEPT . (if_statement . 0)) (CHARACTER_LITERAL . (if_statement . 0)) (STRING_LITERAL . (if_statement . 0)) (IDENTIFIER . (if_statement . 0)) (LESS_LESS . (if_statement . 0)) (END . (if_statement . 0)) (EXCEPTION . (if_statement . 0))) - ((default . error) (RIGHT_PAREN . 1320)) - ((default . error) (BEGIN . 1319)) + ((default . error) (RIGHT_PAREN . 1321)) + ((default . error) (BEGIN . 1320)) ((default . error) (BEGIN . (private_extension_declaration . 0)) (IDENTIFIER . (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 . 0)) (PROTECTED . (private_extension_declaration . 0)) (SUBTYPE . (private_extension_declaration . 0)) (TASK . (private_extension_declaration . 0)) (TYPE . (private_extension_declaration . 0)) (USE . (private_extension_declaration . 0)) (PRIVATE . (private_extension_declaration . 0)) (END . (private_extension_declaration . 0))) ((default . error) (WHEN . (variant_part . 0)) (END . (variant_part . 0)) (CASE . (variant_part . 0)) (IDENTIFIER . (variant_part . 0)) (FOR . (variant_part . 0))) - ((default . error) (END . (variant . 0)) (WHEN . (variant . 0)) (CASE . 1008) (IDENTIFIER . 72) (FOR . 289)) + ((default . error) (END . (variant . 0)) (WHEN . (variant . 0))) ((default . error) (WHEN . (component_declaration . 0)) (END . (component_declaration . 0)) (CASE . (component_declaration . 0)) (IDENTIFIER . (component_declaration . 0)) (FOR . (component_declaration . 0))) - ((default . error) (SEMICOLON . 1318)) + ((default . error) (SEMICOLON . 1319)) ((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)) (STRING_LITERAL . (label_opt . 0)) (CHARACTER_LITERAL . (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 . (label_opt . 0)) (REQUEUE . (label_opt . 0)) (LESS_LESS . 611) (IDENTIFIER . ((label_opt . 0) 612))) ((default . error) (WHEN . (parameter_profile_opt . 0)) (LEFT_PAREN . 782)) ((default . error) (WHEN . (entry_body_formal_part . 0))) - ((default . error) (END . 1323)) + ((default . error) (END . 1324)) ((default . error) (SEMICOLON . (identifier_opt . 0)) (IDENTIFIER . 695)) - ((default . error) (SEMICOLON . 1325)) + ((default . error) (SEMICOLON . 1326)) ((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)(package_specification . 30)(pragma . 31)(procedure_specification . 32)(subprogram_body . 33)(subprogram_declaration . 34)(subprogram_renaming_declaration . 35)(subunit . 36)(use_clause . 37)(with_clause . 38)) ((attribute_reference . 51)(name . 86)(qualified_expression . 54)(selected_component . 55)) @@ -3953,49 +3959,49 @@ nil nil nil - ((accept_statement . 1162)(delay_alternative . 1163)(delay_statement . 945)) + ((accept_statement . 1163)(delay_alternative . 1164)(delay_statement . 945)) nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1159)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1160)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1155)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) - ((constant_opt . 1154)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1156)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((constant_opt . 1155)) nil nil nil - ((identifier_opt . 1150)) - ((elsif_statement_item . 1148)(elsif_statement_list . 1149)) + ((identifier_opt . 1151)) + ((elsif_statement_item . 1149)(elsif_statement_list . 1150)) nil nil nil - ((aggregate . 151)(attribute_reference . 51)(choice_expression . 175)(choice_relation_and_list . 176)(choice_relation_or_list . 177)(choice_relation_xor_list . 178)(choice_relation_and_then_list . 179)(choice_relation_or_else_list . 180)(choice_relation . 181)(discrete_choice . 182)(discrete_choice_list . 1142)(factor . 153)(name . 186)(primary . 157)(qualified_expression . 54)(range . 187)(selected_component . 55)(simple_expression . 459)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(choice_expression . 175)(choice_relation_and_list . 176)(choice_relation_or_list . 177)(choice_relation_xor_list . 178)(choice_relation_and_then_list . 179)(choice_relation_or_else_list . 180)(choice_relation . 181)(discrete_choice . 182)(discrete_choice_list . 1143)(factor . 153)(name . 186)(primary . 157)(qualified_expression . 54)(range . 187)(selected_component . 55)(simple_expression . 459)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((case_statement_alternative . 1141)) + ((case_statement_alternative . 1142)) nil nil nil nil nil nil - ((function_specification . 16)(procedure_specification . 32)(subprogram_specification . 1134)) + ((function_specification . 16)(procedure_specification . 32)(subprogram_specification . 1135)) nil - ((aspect_clause . 967)(at_clause . 297)(entry_body . 968)(enumeration_representation_clause . 304)(function_specification . 16)(overriding_indicator_opt . 969)(procedure_specification . 32)(protected_operation_item . 1133)(record_representation_clause . 328)(subprogram_body . 973)(subprogram_declaration . 974)) + ((aspect_clause . 967)(at_clause . 297)(entry_body . 968)(enumeration_representation_clause . 304)(function_specification . 16)(overriding_indicator_opt . 969)(procedure_specification . 32)(protected_operation_item . 1134)(record_representation_clause . 328)(subprogram_body . 973)(subprogram_declaration . 974)) nil nil nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1131)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1132)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil nil - ((attribute_reference . 51)(name . 1129)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(name . 1130)(qualified_expression . 54)(selected_component . 55)) nil ((actual_parameter_part . 91)) - ((aggregate . 151)(attribute_reference . 51)(expression . 1127)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1128)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil - ((formal_part . 116)(parameter_profile_opt . 1125)) + ((formal_part . 116)(parameter_profile_opt . 1126)) nil nil nil @@ -4004,21 +4010,21 @@ nil nil nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1124)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1125)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1122)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1123)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1120)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1121)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil ((attribute_reference . 51)(name . 1034)(qualified_expression . 54)(selected_component . 55)) nil nil - ((aspect_specification_opt . 1117)) + ((aspect_specification_opt . 1118)) nil - ((attribute_reference . 51)(name . 1116)(qualified_expression . 54)(selected_component . 55)) - ((attribute_reference . 51)(name . 737)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1115)) + ((attribute_reference . 51)(name . 1117)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(name . 737)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1116)) nil - ((direct_name . 1114)) + ((direct_name . 1114)(direct_name_opt . 1115)) nil nil nil @@ -4082,9 +4088,9 @@ nil ((actual_parameter_part . 91)) nil - ((attribute_reference . 51)(name . 1231)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(name . 1232)(qualified_expression . 54)(selected_component . 55)) nil - ((access_definition . 1229)(attribute_reference . 51)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1230)) + ((access_definition . 1230)(attribute_reference . 51)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1231)) nil nil nil @@ -4095,29 +4101,29 @@ nil nil nil - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1225)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1226)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((attribute_reference . 51)(interface_list . 1224)(name . 798)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(interface_list . 1225)(name . 798)(qualified_expression . 54)(selected_component . 55)) nil nil - ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 830)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_definition . 1222)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) + ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 830)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_definition . 1223)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) nil nil nil - ((attribute_reference . 51)(interface_list . 1220)(name . 798)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(interface_list . 1221)(name . 798)(qualified_expression . 54)(selected_component . 55)) nil nil - ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 838)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_definition . 1218)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) + ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 838)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_definition . 1219)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) nil nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1216)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1215)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1217)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1216)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil - ((enumeration_literal . 1214)) + ((enumeration_literal . 1215)) nil - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1213)(term . 165)(term_list . 166)(unary_adding_operator . 167)) - ((access_definition . 1075)(attribute_reference . 51)(component_definition . 1212)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1077)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1214)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((access_definition . 1075)(attribute_reference . 51)(component_definition . 1213)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(selected_component . 55)(subtype_indication . 1077)) nil nil nil @@ -4125,46 +4131,47 @@ nil nil nil - ((and_interface_list_opt . 1209)) - ((actual_parameter_part . 91)(and_interface_list_opt . 1206)(constraint . 1207)(constraint_opt . 1208)(index_constraint . 806)) nil + ((and_interface_list_opt . 1210)) + ((actual_parameter_part . 91)(and_interface_list_opt . 1207)(constraint . 1208)(constraint_opt . 1209)(index_constraint . 806)) nil nil + nil + ((aspect_specification_opt . 1204)) + nil ((aspect_specification_opt . 1203)) nil ((aspect_specification_opt . 1202)) - nil ((aspect_specification_opt . 1201)) - ((aspect_specification_opt . 1200)) nil nil - ((attribute_reference . 51)(name . 1199)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(name . 1200)(qualified_expression . 54)(selected_component . 55)) ((actual_parameter_part . 91)) - ((aggregate . 151)(attribute_reference . 51)(expression . 1198)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1199)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((identifier_opt . 1197)) + ((identifier_opt . 1198)) nil ((aspect_specification_opt . 128)) - ((entry_body_formal_part . 1195)(formal_part . 116)(parameter_profile_opt . 1196)) - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1193)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((entry_body_formal_part . 1196)(formal_part . 116)(parameter_profile_opt . 1197)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1194)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1192)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1193)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil nil - ((identifier_opt . 1189)) + ((identifier_opt . 1190)) nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1188)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) - ((aggregate . 151)(attribute_reference . 51)(expression . 184)(expression_opt . 1187)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1189)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((aggregate . 151)(attribute_reference . 51)(expression . 184)(expression_opt . 1188)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil - ((elsif_statement_item . 1185)) + ((elsif_statement_item . 1186)) nil nil nil nil - ((access_definition . 1178)(attribute_reference . 51)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(return_subtype_indication . 1179)(selected_component . 55)(subtype_indication . 1180)) + ((access_definition . 1179)(attribute_reference . 51)(name . 737)(null_exclusion_opt . 212)(qualified_expression . 54)(return_subtype_indication . 1180)(selected_component . 55)(subtype_indication . 1181)) nil nil nil @@ -4172,12 +4179,12 @@ nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1172)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1173)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil - ((identifier_opt . 1171)) - ((attribute_reference . 51)(exception_choice . 1170)(name . 939)(qualified_expression . 54)(selected_component . 55)) - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1169)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) - ((attribute_reference . 51)(exception_choice . 937)(exception_choice_list . 1168)(name . 939)(qualified_expression . 54)(selected_component . 55)) + ((identifier_opt . 1172)) + ((attribute_reference . 51)(exception_choice . 1171)(name . 939)(qualified_expression . 54)(selected_component . 55)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1170)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((attribute_reference . 51)(exception_choice . 937)(exception_choice_list . 1169)(name . 939)(qualified_expression . 54)(selected_component . 55)) nil nil nil @@ -4193,14 +4200,14 @@ nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1266)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1267)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1260)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1261)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil @@ -4215,23 +4222,23 @@ nil nil nil - ((attribute_reference . 51)(interface_list . 1249)(name . 798)(qualified_expression . 54)(selected_component . 55)) + ((attribute_reference . 51)(interface_list . 1250)(name . 798)(qualified_expression . 54)(selected_component . 55)) nil nil nil nil - ((variant_list . 1245)(variant . 1246)) + ((variant_list . 1246)(variant . 1247)) nil - ((aspect_specification_opt . 1243)) + ((aspect_specification_opt . 1244)) nil nil nil - ((real_range_specification_opt . 1240)) - ((identifier_opt . 1239)) + ((real_range_specification_opt . 1241)) + ((identifier_opt . 1240)) nil nil nil - ((identifier_opt . 1236)) + ((identifier_opt . 1237)) nil nil nil @@ -4243,48 +4250,48 @@ nil ((actual_parameter_part . 91)(constraint . 1093)(index_constraint . 806)) nil - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1296)(term . 165)(term_list . 166)(unary_adding_operator . 167)) - ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 830)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_definition . 1295)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1297)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 830)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_definition . 1296)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) nil nil - ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 838)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_definition . 1294)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) + ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 838)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_definition . 1295)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) nil nil nil - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1293)(term . 165)(term_list . 166)(unary_adding_operator . 167)) - ((aggregate . 151)(attribute_reference . 51)(expression . 1292)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1294)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1293)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil - ((aggregate . 151)(attribute_reference . 51)(choice_expression . 175)(choice_relation_and_list . 176)(choice_relation_or_list . 177)(choice_relation_xor_list . 178)(choice_relation_and_then_list . 179)(choice_relation_or_else_list . 180)(choice_relation . 181)(discrete_choice . 182)(discrete_choice_list . 1290)(factor . 153)(name . 186)(primary . 157)(qualified_expression . 54)(range . 187)(selected_component . 55)(simple_expression . 459)(term . 165)(term_list . 166)(unary_adding_operator . 167)) - ((variant . 1289)) + ((aggregate . 151)(attribute_reference . 51)(choice_expression . 175)(choice_relation_and_list . 176)(choice_relation_or_list . 177)(choice_relation_xor_list . 178)(choice_relation_and_then_list . 179)(choice_relation_or_else_list . 180)(choice_relation . 181)(discrete_choice . 182)(discrete_choice_list . 1291)(factor . 153)(name . 186)(primary . 157)(qualified_expression . 54)(range . 187)(selected_component . 55)(simple_expression . 459)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((variant . 1290)) nil nil - ((record_definition . 1286)) + ((record_definition . 1287)) nil nil nil nil nil nil - ((aggregate . 151)(attribute_reference . 51)(expression . 184)(expression_opt . 1285)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 184)(expression_opt . 1286)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil + ((identifier_opt . 1284)) ((identifier_opt . 1283)) - ((identifier_opt . 1282)) nil nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1280)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1281)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil nil - ((aggregate . 151)(attribute_reference . 51)(expression . 1277)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(expression . 1278)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(relation_and_list . 158)(relation_and_then_list . 159)(relation_or_list . 160)(relation_or_else_list . 161)(relation_xor_list . 162)(relation . 163)(selected_component . 55)(simple_expression . 164)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1275)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 1276)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) nil nil nil @@ -4297,25 +4304,26 @@ nil nil nil - ((aspect_specification_opt . 1303)) + ((aspect_specification_opt . 1304)) nil nil nil nil - ((aspect_specification_opt . 1300)) + ((aspect_specification_opt . 1301)) nil nil nil nil - ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1317)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((aggregate . 151)(attribute_reference . 51)(factor . 153)(name . 154)(primary . 157)(qualified_expression . 54)(selected_component . 55)(simple_expression . 1318)(term . 165)(term_list . 166)(unary_adding_operator . 167)) nil nil nil - ((aspect_clause . 1010)(at_clause . 297)(component_declaration . 1011)(component_item . 1012)(component_list . 1315)(enumeration_representation_clause . 304)(identifier_list . 1015)(record_representation_clause . 328)(variant_part . 1016)) + ((aspect_clause . 1010)(at_clause . 297)(component_declaration . 1011)(component_item . 1012)(component_list . 1013)(component_list_opt . 1316)(enumeration_representation_clause . 304)(identifier_list . 1015)(record_representation_clause . 328)(variant_part . 1016)) nil nil - ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 1312)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) - ((aggregate . 151)(attribute_reference . 51)(discrete_subtype_definition . 1311)(factor . 153)(name . 875)(primary . 157)(qualified_expression . 54)(range . 764)(selected_component . 55)(simple_expression . 765)(subtype_indication . 766)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + ((abstract_subprogram_declaration . 295)(aspect_clause . 296)(at_clause . 297)(body . 298)(body_stub . 299)(declaration . 300)(declarations . 301)(declarative_part_opt . 1313)(entry_declaration . 303)(enumeration_representation_clause . 304)(exception_declaration . 305)(expression_function_declaration . 306)(full_type_declaration . 307)(function_specification . 16)(generic_declaration . 308)(generic_formal_part . 18)(generic_instantiation . 309)(generic_package_declaration . 20)(generic_renaming_declaration . 310)(generic_subprogram_declaration . 22)(identifier_list . 311)(incomplete_type_declaration . 312)(null_procedure_declaration . 313)(object_declaration . 314)(object_renaming_declaration . 315)(overriding_indicator_opt . 316)(package_body . 317)(package_body_stub . 318)(package_declaration . 319)(package_renaming_declaration . 320)(package_specification . 30)(pragma . 321)(private_extension_declaration . 322)(private_type_declaration . 323)(procedure_specification . 32)(proper_body . 324)(protected_body . 325)(protected_body_stub . 326)(protected_type_declaration . 327)(record_representation_clause . 328)(renaming_declaration . 329)(single_protected_declaration . 330)(single_task_declaration . 331)(subprogram_body . 332)(subprogram_body_stub . 333)(subprogram_declaration . 334)(subprogram_renaming_declaration . 335)(subtype_declaration . 336)(task_body . 337)(task_body_stub . 338)(task_type_declaration . 339)(type_declaration . 340)(use_clause . 341)) + ((aggregate . 151)(attribute_reference . 51)(discrete_subtype_definition . 1312)(factor . 153)(name . 875)(primary . 157)(qualified_expression . 54)(range . 764)(selected_component . 55)(simple_expression . 765)(subtype_indication . 766)(term . 165)(term_list . 166)(unary_adding_operator . 167)) + nil nil nil nil @@ -4325,15 +4333,14 @@ nil nil nil - ((aspect_clause . 1010)(at_clause . 297)(component_declaration . 1011)(component_item . 1109)(enumeration_representation_clause . 304)(identifier_list . 1015)(record_representation_clause . 328)(variant_part . 1110)) nil nil nil - ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1322)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) - ((formal_part . 116)(parameter_profile_opt . 1321)) + ((accept_statement . 630)(assignment_statement . 631)(asynchronous_select . 632)(attribute_reference . 51)(block_statement . 633)(case_statement . 634)(conditional_entry_call . 635)(delay_statement . 636)(exit_statement . 637)(extended_return_statement . 638)(handled_sequence_of_statements . 1323)(if_statement . 640)(iteration_scheme . 641)(label_opt . 642)(loop_statement . 643)(name . 644)(pragma . 645)(procedure_call_statement . 646)(qualified_expression . 54)(raise_statement . 647)(requeue_statement . 648)(selected_component . 55)(selective_accept . 649)(select_statement . 650)(sequence_of_statements . 651)(sequence_of_statements_opt . 652)(simple_return_statement . 653)(statement . 654)(timed_entry_call . 655)) + ((formal_part . 116)(parameter_profile_opt . 1322)) nil nil - ((identifier_opt . 1324)) + ((identifier_opt . 1325)) nil nil])) "Parser table.") diff --git a/packages/ada-mode/ada-mode.el b/packages/ada-mode/ada-mode.el index 05360e0e1..8f76749a0 100755 --- a/packages/ada-mode/ada-mode.el +++ b/packages/ada-mode/ada-mode.el @@ -5,8 +5,8 @@ ;; Author: Stephen Leake ;; Maintainer: Stephen Leake ;; Keywords FIXME: languages, ada ELPA broken for multiple keywords -;; Version: 5.1.4 -;; package-requires: ((wisi "1.0.4") (cl-lib "0.4") (emacs "24.2")) +;; Version: 5.1.5 +;; package-requires: ((wisi "1.0.5") (cl-lib "0.4") (emacs "24.2")) ;; url: http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html ;; ;; (Gnu ELPA requires single digits between dots in versions) @@ -167,7 +167,7 @@ (defun ada-mode-version () "Return Ada mode version." (interactive) - (let ((version-string "5.1.4")) + (let ((version-string "5.1.5")) ;; must match: ;; ada-mode.texi ;; README @@ -339,6 +339,8 @@ Values defined by cross reference packages.") (define-key map [return] 'ada-indent-newline-indent) (define-key map "\C-c`" 'ada-show-secondary-error) (define-key map "\C-c;" (lambda () (error "use M-; instead"))) ; comment-dwim + (define-key map "\C-c<" 'ada-goto-declaration-start) + (define-key map "\C-c>" 'ada-goto-declaration-end) (define-key map "\C-c\M-`" 'ada-fix-compiler-error) (define-key map "\C-c\C-a" 'ada-align) (define-key map "\C-c\C-b" 'ada-make-subprogram-body) @@ -398,7 +400,8 @@ Values defined by cross reference packages.") ["Other file don't find decl" ada-find-other-file-noset t] ["Goto declaration/body" ada-goto-declaration t] ["Goto next statement keyword" ada-next-statement-keyword t] - ["Goto prev statement keyword" ada-next-statement-keyword t] + ["Goto declaration start" ada-goto-declaration-start t] + ["Goto declaration end" ada-goto-declaration-end t] ["Show parent declarations" ada-show-declaration-parents t] ["Show references" ada-show-references t] ["Show overriding" ada-show-overriding t] @@ -1733,6 +1736,7 @@ found.") (defun ada-file-name-from-ada-name (ada-name) "Return the filename in which ADA-NAME is found." + (ada-require-project-file) (funcall ada-file-name-from-ada-name ada-name)) (defvar ada-ada-name-from-file-name nil @@ -1742,6 +1746,7 @@ unit name; it should return the Ada name that should be found in FILE-NAME.") (defun ada-ada-name-from-file-name (file-name) "Return the ada-name that should be found in FILE-NAME." + (ada-require-project-file) (funcall ada-ada-name-from-file-name file-name)) (defun ada-ff-special-extract-parent () @@ -1869,10 +1874,22 @@ set." (when (null (car compilation-search-path)) (error "no file search path defined; set project file?")) - (unless (string= file-name - (locate-file (file-name-nondirectory file-name) - compilation-search-path)) - (error "current file not part of current project; wrong project?"))) + ;; file-truename handles symbolic links + (let* ((visited-file (file-truename file-name)) + (found-file (locate-file (file-name-nondirectory visited-file) + compilation-search-path))) + (unless found-file + (error "current file not part of current project; wrong project?")) + + (setq found-file (file-truename found-file)) + + ;; (nth 10 (file-attributes ...)) is the inode; required when hard + ;; links are present. + (let* ((visited-file-inode (nth 10 (file-attributes visited-file))) + (found-file-inode (nth 10 (file-attributes found-file)))) + (unless (equal visited-file-inode found-file-inode) + (error "%s (opened) and %s (found in project) are two different files" + file-name found-file))))) (defun ada-find-other-file-noset (other-window) "Same as `ada-find-other-file', but preserve point in the other file, @@ -2284,6 +2301,7 @@ parameters.") (defun ada-goto-declaration-start () "Call `ada-goto-declaration-start'." + (interactive) (when ada-goto-declaration-start (funcall ada-goto-declaration-start))) diff --git a/packages/ada-mode/ada-mode.info b/packages/ada-mode/ada-mode.info index 018ba6653..6e0682637 100644 --- a/packages/ada-mode/ada-mode.info +++ b/packages/ada-mode/ada-mode.info @@ -130,21 +130,22 @@ tool 'gnatinspect', which supports Ada, C, C++, and any other language for which gcc provices the '-fdump-xref'. 'gnatinspect' is distributed as part of 'gnatcoll'. Ada mode -requires the very latest version, in 'gnatcoll 1.6' distributed with -GNATPro 7.2. 'gnatcoll 1.6' must be compiled with GNATPro 7.2. +requires the very latest version, in 'gnatcoll 1.7w' distributed with +GNAT GPL 2014. - To build 'gnatinspect', assuming gnat-7.2 is installed in -'/usr/gnat-7.2', and gnat-7.2 is in PATH: + To build 'gnatinspect', assuming GNAT GPL 2014 is installed in +'/usr/gnat-gpl-2014', and '/usr/gnat-gpl-2014/bin' is in PATH: - tar xf ~/Downloads/gnatcoll-1.6-src.tgz - cd gnatcoll-1.6-src - ./configure --prefix=/usr/gnat-7.2 + tar xf ~/Downloads/gnatcoll-1.7x-src.tgz + cd gnatcoll-1.7w-src + ./configure --prefix=/usr/gnat-gpl-2014 make Gnatcoll_Build=Debug sudo make Gnatcoll_Build=Debug install To build an sqlite3 executable that is compatible with the database created by gnatinspect: + cd gnatcoll-1.7w-src/src/sqlite/amalgamation/ gcc -O2 -o sqlite3 shell.c sqlite3.c -ldl -lpthread  @@ -2416,43 +2417,43 @@ Node: Top945 Node: Overview2576 Node: Installation3787 Node: gnatinspect4675 -Node: Upgrading5636 -Node: Customization6210 -Node: Non-standard file names6692 -Node: Other compiler8533 -Node: Other cross-reference9112 -Node: Other customization9831 -Node: Compiling Executing12301 -Node: Compile commands13036 -Node: Compiling Examples15774 -Node: No project files16606 -Node: Set compiler options21972 -Node: Set source search path23934 -Node: Use GNAT project file26387 -Node: Use multiple GNAT project files29161 -Node: Use a Makefile31881 -Node: Compiler errors33196 -Node: Project files34013 -Node: Project file overview35040 -Node: Project file variables36568 -Node: Moving Through Ada Code40198 -Node: Identifier completion42897 -Node: Indentation43859 -Node: Statement skeletons47911 -Node: Aligning code49696 -Node: Automatic casing50641 -Node: Comment Handling53345 -Node: Key summary53864 -Node: Developer overview56491 -Node: Directory structure56831 -Node: Package organization60317 -Node: Ada mode60552 -Node: gpr mode62748 -Node: GNAT core63031 -Node: Wisi63977 -Node: OpenToken64944 -Node: ELPA65546 -Node: GNU Free Documentation License66156 -Node: Index91317 +Node: Upgrading5672 +Node: Customization6246 +Node: Non-standard file names6728 +Node: Other compiler8569 +Node: Other cross-reference9148 +Node: Other customization9867 +Node: Compiling Executing12337 +Node: Compile commands13072 +Node: Compiling Examples15810 +Node: No project files16642 +Node: Set compiler options22008 +Node: Set source search path23970 +Node: Use GNAT project file26423 +Node: Use multiple GNAT project files29197 +Node: Use a Makefile31917 +Node: Compiler errors33232 +Node: Project files34049 +Node: Project file overview35076 +Node: Project file variables36604 +Node: Moving Through Ada Code40234 +Node: Identifier completion42933 +Node: Indentation43895 +Node: Statement skeletons47947 +Node: Aligning code49732 +Node: Automatic casing50677 +Node: Comment Handling53381 +Node: Key summary53900 +Node: Developer overview56527 +Node: Directory structure56867 +Node: Package organization60353 +Node: Ada mode60588 +Node: gpr mode62784 +Node: GNAT core63067 +Node: Wisi64013 +Node: OpenToken64980 +Node: ELPA65582 +Node: GNU Free Documentation License66192 +Node: Index91353  End Tag Table diff --git a/packages/ada-mode/ada-mode.texi b/packages/ada-mode/ada-mode.texi new file mode 100755 index 000000000..06e0d41b8 --- /dev/null +++ b/packages/ada-mode/ada-mode.texi @@ -0,0 +1,2006 @@ +\input texinfo @c -*-texinfo-*- +@setfilename ../../info/ada-mode +@settitle Ada Mode + +@copying +Copyright @copyright{} 1999 - 2014 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', +and with the Back-Cover Texts as in (a) below. A copy of the license +is included in the section entitled ``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and +modify this GNU manual. Buying copies from the FSF supports it in +developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@dircategory Emacs editing modes +@direntry +* Ada mode: (ada-mode). Emacs mode for editing and navigating Ada code. +@end direntry + +@titlepage +@sp 10 +@title Ada Mode +@sp 2 +@subtitle An Emacs major mode for programming in Ada +@subtitle Ada Mode Version 5.1.5 +@sp 2 +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@node Top, Overview, (dir), (dir) + +@ifnottex +@insertcopying +@end ifnottex + +@menu +* Overview:: +* Installation:: Installing Ada mode on your system +* Customization:: Setting up Ada mode to your taste +* Compiling Executing:: Working with your application within Emacs +* Project files:: Describing the organization of your project +* Moving Through Ada Code:: Moving easily through Ada sources +* Identifier completion:: Finishing words automatically +* Indentation:: Indenting your code automatically as you type +* Statement skeletons:: Some code is written for you +* Aligning code:: Making it pretty +* Automatic casing:: Adjusting the case of words automatically +* Comment Handling:: Reformatting comments easily +* Key summary:: +* Developer overview:: +* GNU Free Documentation License:: +* Index:: +@end menu + +@node Overview, Installation, Top, Top +@chapter Overview + +The Emacs mode for programming in Ada helps the user in reading +existing code and facilitates developing new code. + +Cross-reference information output by the compiler is used to provide +powerful code navigation (jump to definition, find all uses, etc). + +When you open a file with a file extension of @file{.ads} or +@file{.adb}, Emacs will automatically load and activate Ada +mode. + +Ada mode works without any customization, if you are using the GNAT +compiler (@url{https://libre2.adacore.com/}) and the GNAT default +naming convention. + +You must customize a few things if you are using a different file +naming convention or compiler; @xref{Non-standard file names}, +@xref{Other compiler}. + +In addition, you may want to customize the indentation, +capitalization, and other things; @xref{Other customization}. + +Finally, for large Ada projects, you will want to set up an Emacs Ada +mode project file for each project; @xref{Project files}. Note that +these are different from the GNAT project files used by the GNAT +tools. + +@xref{Debuggers,,Debuggers,emacs,Emacs User Guide}, for general +information on debugging. + +@node Installation, Customization, Overview, Top +@chapter Installation + +Ada mode requires Emacs 24.2 or greater; it also requires the Emacs +lisp sources (not just the compiled binaries). + +Ada mode is distributed in the Gnu ELPA package archive; it can be +installed via @code{M-x list-packages} (@pxref{Packages,,,emacs,Emacs +User Guide}). You must first enable packages in your @file{~/.emacs}, +@emph{after} customizing @code{Info-default-directory-list} (if you do +that): + +@example +(package-initialize) +@end example + +Ada mode is also available as a separate distribution, from the Emacs +Ada mode website +@uref{http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html}. + +For installing the separate distribution, see the @file{README} file +in the distribution. + +To see what version of Ada mode you have installed, invoke @kbd{M-x +ada-mode-version}. + +@menu +* gnatinspect:: +* Upgrading:: +@end menu + +@node gnatinspect, Upgrading, Installation, Installation +@section gnatinspect +Ada mode has experimental support for the new AdaCore cross reference +tool @code{gnatinspect}, which supports Ada, C, C++, and any other +language for which gcc provices the @code{-fdump-xref}. + +@code{gnatinspect} is distributed as part of @code{gnatcoll}. Ada mode +requires the very latest version, in @code{gnatcoll 1.7w} distributed +with GNAT GPL 2014. + +To build @code{gnatinspect}, assuming GNAT GPL 2014 is installed in +@file{/usr/gnat-gpl-2014}, and @file{/usr/gnat-gpl-2014/bin} is in +PATH: + +@example +tar xf ~/Downloads/gnatcoll-1.7x-src.tgz +cd gnatcoll-1.7w-src +./configure --prefix=/usr/gnat-gpl-2014 +make Gnatcoll_Build=Debug +sudo make Gnatcoll_Build=Debug install +@end example + +To build an sqlite3 executable that is compatible with the database +created by gnatinspect: + +@example +cd gnatcoll-1.7w-src/src/sqlite/amalgamation/ +gcc -O2 -o sqlite3 shell.c sqlite3.c -ldl -lpthread +@end example + +@node Upgrading, , gnatinspect, Installation +@section Upgrading from previous versions + +See the file NEWS for more details; here we summarize only important +user interface changes. + +@table @samp +@item from 5.0.1 + Nothing to do. + +@item from 4.01 +There are many user interface and API changes between 4.01 and 5.0.1; +we only document those that may be hard to diagnose here. + +@code{prog-mode-hook} is no longer run by @code{ada-mode}; +@code{ada-mode} is no longer derived from @code{prog-mode}. Use +@code{ada-mode-hook} instead. + + +@end table + +@node Customization, Compiling Executing, Installation, Top +@chapter Customizing Ada mode + +Here we assume you are familiar with setting variables in Emacs, +either thru 'customize' or in elisp (in your @file{.emacs} file). For +a basic introduction to customize, elisp, and Emacs in general, see +the tutorial (@kbd{C-h t}). + +@menu +* Non-standard file names:: +* Other compiler:: +* Other cross-reference:: +* Other customization:: +@end menu + +@node Non-standard file names, Other compiler, Customization, Customization +@section Non-standard file names + +By default, Ada mode is configured to use the GNAT file naming +convention, where file names are a simple modification of the Ada +names, and the extension for specs and bodies are +@samp{.ads} and @samp{.adb}, respectively. + +Emacs uses the file extension to enable Ada mode; Ada mode uses the +file extentions to allow moving from a package body to the +corresponding spec and back. + +Emacs and Ada mode support ways to use alternative file extensions for +specs and bodies. Note that you must also tell the compiler about +these extensions; doing that is beyond the scope of this manual. + +For instance, if your spec and bodies files are called +@file{@var{unit}_s.ada} and @file{@var{unit}_b.ada}, respectively, you +can add the following to your @file{.emacs} file: + +@example +;; Tell Ada mode about spec and body extensions +(ada-add-extensions "_s.ada" "_b.ada") + +;; Tell Emacs to use Ada mode for those extensions +(add-to-list 'auto-mode-alist '("\\.ada\\'" . ada-mode)) +@end example + +You can define additional extensions: + +@example +(ada-add-extensions ".ads" "_b.ada") +(ada-add-extensions ".ads" ".body") +@end example + +This means that whenever Ada mode looks for the body for a file +whose extension is @file{.ads}, it will take the first available file +that ends with either @file{.adb}, @file{_b.ada} or +@file{.body}. + +Simililarly, if Ada mode is looking for a spec, it will look for +@file{.ads} or @file{_s.ada}. + +If the filename excluding the extension is not derived from the Ada +name following the GNAT convention, you need to provide an alternate +function for @code{ada-file-name-from-ada-name}. Doing that is beyond +the scope of this manual; see the current definitions in +@file{ada-mode.el} and @file{ada-gnat-xref.el} for examples. + +@node Other compiler, Other cross-reference, Non-standard file names, Customization +@section Other compiler +The project variable @code{ada_compiler} (default elisp variable +@code{ada-compiler}) is used to index several variables that point to +the compiler-specific functions for corresponding Ada mode operations. + +To use a compiler other than GNAT, you must write Emacs lisp code that +provides the interface to the compiler, and set @code{ada-compiler} and +the indirection variables. + +See @file{ada-gnat-compile.el} for an example. + +@node Other cross-reference, Other customization, Other compiler, Customization +@section Other cross-reference +The project variable @code{ada_xref} (default elisp variable +@code{ada-xref-tool}) is used to index several variables that point to +the cross-reference-tool-specific functions for corresponding Ada mode +operations. + +To use a cross reference tool other than gnatxref, you must write +Emacs lisp code that provides the interface to the compiler, and set +@code{ada-xref-tool} and the indirection variables. This has already +been done for @code{gnatinspect}; set @code{ada-xref-tool} to +@code{'gnat_inspect}. + +See @file{ada-gnat-xref.el} and @file{gnat-inspect.el} for examples. + +@node Other customization, , Other cross-reference, Customization +@section Other customization + +All user-settable Ada mode variables can be set via the menu +@samp{Ada | Customize}. Click on the @samp{Help} button there for help +on using customize. + +To modify a specific variable, you can directly call the function +@code{customize-variable}; just type @kbd{M-x customize-variable +@key{RET} @var{variable-name} @key{RET}}). + +Alternately, you can specify variable settings in the Emacs +configuration file, @file{~/.emacs}. This file is coded in Emacs lisp, +and the syntax to set a variable is the following: +@example +(setq variable-name value) +@end example + +Some general Emacs settings that are useful for Ada files: +@table @code +@item delete-trailing-whitespace +Deletes space, tab at end of line and blank lines at end of buffer. +@item untabify +Deletes tab characters that have crept into the file. +@item indent-tabs-mode +Don't insert tab characters when indenting. +@item copyright-update +Updates the copyright date in the file header comment, to the current +year. +@item electric-pair-mode +Insert a matching right paren when you type a left paren. +@item hippie-expand +Bind @code{hippie-expand} to a key; it expands the word before point, using +words from current buffer, other buffers, file names, etc; see +@code{hippie-expand-try-functions-list}. You can also add +@code{ada-skel-hippie-try} to that list. Note that @code{ada-expand}, +which defaults to @code{ada-skel-expand}, is bound to @key{C-c C-e} +(@pxref{Statement skeletons}). +@item imenu +@item which-func +@end table + +The above can all be set by the following code in your +@file{~/.emacs}. Note that some are functions are added to +@code{before-save-hook}; they run just before a buffer is written to +disk. Also, the order is important; ada-mode does not set up the +Ada-specific features of imenu and which-func unless they are loaded +first. + +@example +(setq-default indent-tabs-mode nil) +(electric-pair-mode 1) +(require 'imenu) +(require 'which-func) +(require 'ada-mode) +(add-to-list 'hippie-expand-try-functions-list 'ada-skel-hippie-try) +(define-key ada-mode-map "\C-e" 'hippie-expand) +(add-hook 'ada-mode-hook + (lambda () + (add-hook 'before-save-hook 'delete-trailing-whitespace nil t) + (add-hook 'before-save-hook 'copyright-update nil t) + (add-hook 'before-save-hook + (lambda () (untabify (point-min) (point-max))) + nil t))) +@end example + +@node Compiling Executing, Project files, Customization, Top +@chapter Compiling Executing + +Ada projects can be compiled, linked, and executed using commands on +the Ada menu. All of these commands can be customized via a project +file (@pxref{Project files}), but the defaults are sufficient for using +the GNAT compiler for simple projects (single files, or several files +in a single directory). + +For complex projects, you will want to use @code{make} or some other +build tool; in that case, you will need an Emacs Ada mode project file +to tell Emacs about the project directory tree and other settings. + +@menu +* Compile commands:: +* Compiling Examples:: +* Compiler errors:: +@end menu + +@node Compile commands, Compiling Examples, Compiling Executing, Compiling Executing +@section Compile commands + +Here are the commands for building an Ada project and running the main +program. + +In multi-file projects, there must be one file that is the main +program. That is given by the @code{main} project file variable; +it defaults to the current file if not yet set, but is also set by the +``set main and build'' command. +@c IMPROVEME: get main from gpr via gnatinspect? not in gnatcoll 1.6w + +@table @code + +@item Check file +Compiles the current file in syntax check mode, by running +@code{check_cmd} defined in the current project file. This typically +runs faster than full compile mode, speeding up finding and fixing +compilation errors. + +This sets @code{main} only if it has not been set yet. + +@item Compile file +Compiles the current file, by running @code{comp_cmd} from the current +project file. + +This does not set @code{main}. + +@item Set main and Build +Sets @code{main} to the current file, then executes the Build +command. + +@item Show main +Display @code{main} in the message buffer. + +@item Build +Compiles all obsolete units of the current @code{main}, and links +@code{main}, by running @code{make_cmd} from the current project. + +This sets @code{main} only if it has not been set yet. + +@item Run +Executes the main program in a shell, displayed in a separate Emacs +buffer. This runs @code{run_cmd} from the current project. The +execution buffer allows for interactive input/output. + +To modify the run command, in particular to provide or change the +command line arguments, type @kbd{C-u} before invoking the command. + +This command is not available for a cross-compilation toolchain. + +@end table +It is important when using these commands to understand how +@code{main} is used and changed. + +Build runs 'gnatmake' on the main unit. During a typical edit/compile +session, this is the only command you need to invoke, which is why it +is bound to @kbd{C-c C-c}. It will compile all files needed by the +main unit, and display compilation errors in any of them. + +Note that Build can be invoked from any Ada buffer; typically you will +be fixing errors in files other than the main, but you don't have to +switch back to the main to invoke the compiler again. + +Novices and students typically work on single-file Ada projects. In +this case, @kbd{C-c C-m} will normally be the only command needed; it +will build the current file, rather than the last-built main. + +There are three ways to change @code{main}: + +@enumerate +@item +Invoke @samp{Ada | Set main and Build}, which sets @code{main} to +the current file. + +@item +Invoke @samp{Ada | Project | Edit}, edit @code{main} and +@code{main}, and click @samp{[save]} + +@item +Invoke @samp{Ada | Project | Load}, and load a project file that specifies @code{main} + +@end enumerate + +@node Compiling Examples, Compiler errors, Compile commands, Compiling Executing +@section Compiling Examples + +We present several small projects, and walk thru the process of +compiling, linking, and running them. + +The first example illustrates more Ada mode features than the others; +you should work thru that example before doing the others. + +All of these examples assume you are using GNAT. + +The source for these examples is available on the Emacs Ada mode +website mentioned in @xref{Installation}. + +@menu +* No project files:: Just menus +* Set compiler options:: A basic Ada mode project file +* Set source search path:: Source in multiple directories +* Use GNAT project file:: +* Use multiple GNAT project files:: +* Use a Makefile:: +@end menu + +@node No project files, Set compiler options, Compiling Examples, Compiling Examples +@subsection No project files +This example uses no project files. + +First, create a directory @file{Example_1}, containing: + +@file{hello.adb}: + +@example +with Ada.Text_IO; +procedure Hello +is begin + Put_Line("Hello from hello.adb"); +end Hello; +@end example + +Yes, this is missing ``use Ada.Text_IO;'' - we want to demonstrate +compiler error handling. + +@file{hello_2.adb} has no errors: + +@example +with Hello_Pkg; +procedure Hello_2 +is begin + Hello_Pkg.Say_Hello; +end Hello_2; +@end example + +@file{hello_pkg.ads} has no errors: + +@example +package Hello_Pkg is + procedure Say_Hello; +end Hello_Pkg; +@end example + +@file{hello_pkg.adb}: + +@example +with Ada.Text_IO; +package Hello_Pkg is + procedure Say_Hello + is begin + Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); + end Say_Hello; +end Hello_Pkg; +@end example + +Yes, this is missing the keyword @code{body}; another compiler error +example. However, note that the indentation engine parser accepts this +code with no errors, making it easier to indent slightly illegal Ada +code. + +In buffer @file{hello.adb}, invoke the menu entry @samp{Ada | Build | +Check syntax}. You should get a @code{*compilation*} buffer containing +something like (the directory paths will be different): + +@example +-*- mode: compilation; default-directory: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/" -*- +Compilation started at Fri Oct 18 04:23:54 + +gnatmake -u -c -gnatc c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/hello.adb -cargs +gcc -c -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/ -gnatc -I- c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/hello.adb +hello.adb:4:04: "Put_Line" is not visible +hello.adb:4:04: non-visible declaration at a-textio.ads:263 +hello.adb:4:04: non-visible declaration at a-textio.ads:259 +gnatmake: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/hello.adb" compilation error + +Compilation exited abnormally with code 4 at Fri Oct 18 04:23:54 +@end example + +The lines with actual errors (starting with @file{hello.adb}) are +highlighted, with the file name in red. + +Now invoke @samp{Ada | Build | Next compilation error}. Or you can +click the middle mouse button on the first error line, or use the key +binding shown on the menu. The compilation buffer scrolls to put the +first error on the top line, and point is put at the place of the +error in the @file{hello.adb} buffer. + +To fix the error, invoke @samp{Ada | Build | Fix compilation error}; +this adds ``Ada.Text_Io.'' to the line: + +@example + Ada.Text_Io.Put_Line ("hello from hello.adb"); +@end example + +Now invoke @samp{Ada | Build | Show main}; this displays @samp{Ada mode main: hello}. + +Now (in buffer @file{hello.adb}), invoke @samp{Ada | Build | Build}. You are +prompted to save the file (if you haven't already). Then the +compilation buffer is displayed again, containing: + +@example +-*- mode: compilation; default-directory: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/" -*- +Compilation started at Fri Oct 18 20:39:33 + +gnatmake -o hello hello -cargs -bargs -largs +gcc -c hello.adb +gnatbind -x hello.ali +gnatlink hello.ali -o hello.exe + +Compilation finished at Fri Oct 18 20:39:34 +@end example + +The compilation has succeeded without errors; @file{hello.exe} now +exists in the same directory as @file{hello.adb}. + +Now invoke @samp{Ada | Build | Run}. The @file{*compilation*} buffer +is displayed, containing + +@example +-*- mode: compilation; default-directory: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_1/" -*- +Compilation started at Fri Oct 18 20:41:53 + +./hello +Hello from hello.adb + +Compilation finished at Fri Oct 18 20:41:53 +@end example + +That completes the first part of this example. + +Now we will compile a multi-file project. Open the file +@file{hello_2.adb}, invoke @samp{Ada | Build | Set main and +Build}. This finds an error in @file{hello_pkg.adb}: + +@example +hello_pkg.adb:2:08: keyword "body" expected here [see file name] +@end example + +This demonstrates that gnatmake finds the files needed by the main +program. However, it cannot find files in a different directory, +unless you use an Emacs Ada mode project file or a GNAT project file +to specify the other directories; @xref{Set source search path}, +@ref{Use GNAT project file}. + +Invoke @samp{Ada | Build | Show main}; this displays @file{Ada mode +main: hello_2}. + +Move to the error with @kbd{C-x `}, and fix the error by adding @code{body}: + +@example +package body Hello_Pkg is +@end example + +Now, while still in @file{hello_pkg.adb}, invoke @samp{Ada | Build | +Build}. gnatmake successfully builds @file{hello_2}. This +demonstrates that Emacs has remembered the main file, in the project +variable @code{main}, and used it for the Build command. + +Finally, again while in @file{hello_pkg.adb}, invoke @samp{Ada | Build +| Run}. The @code{*compilation*} buffer displays @code{Hello from +hello_pkg.adb}. + +One final point. If you switch back to buffer @file{hello.adb}, and +invoke @samp{Ada | Build | Run}, @file{hello_2.exe} will be run. That +is because @code{main} is still set to @code{hello_2}, as you can see +when you invoke @samp{Ada | Build | Show main}. + +There are two ways to change @code{main}: + +@enumerate +@item +Invoke @samp{Ada | Build | Set main and Build}, which sets @code{main} to +the current file. + +@item +Invoke @samp{Ada | Build | Set Project ...}, and select a project file that +specifies @code{main}. + +@end enumerate + +@node Set compiler options, Set source search path, No project files, Compiling Examples +@subsection Set compiler options + +This example illustrates using an Emacs Ada mode project file to set a +compiler option. + +If you have files from @file{Example_1} open in Emacs, you should +close them so you don't get confused. Use menu @samp{File | Close +(current buffer)}. + +In directory @file{Example_2}, create these files: + +@file{hello.adb}: + +@example +with Ada.Text_IO; +procedure Hello +is begin + Put_Line("Hello from hello.adb"); +end Hello; +@end example + +This is the same as @file{hello.adb} from @file{Example_1}. It has two +errors; missing ``use Ada.Text_IO;'', and no space between +@code{Put_Line} and its argument list. + +@file{hello.adp}: + +@example +comp_opt=-gnatyt +@end example + +This tells the GNAT compiler to check for token spacing; in +particular, there must be a space preceding a parenthesis. + +In buffer @file{hello.adb}, invoke @samp{Ada | Build | Set main and +Build}. This finds the project file @file{hello.adp}, uses it to set +the compiler options, and builds the project. You should get a +@code{*compilation*} buffer containing something like (the directory +paths will be different): + +@example +cd c:/Examples/Example_2/ +gnatmake -o hello hello -g -cargs -gnatyt -bargs -largs +gcc -c -g -gnatyt hello.adb +hello.adb:4:04: "Put_Line" is not visible +hello.adb:4:04: non-visible declaration at a-textio.ads:264 +hello.adb:4:04: non-visible declaration at a-textio.ads:260 +hello.adb:4:12: (style) space required +gnatmake: "hello.adb" compilation error +@end example + +Compare this to the compiler output in @ref{No project files}; the +gnatmake option @code{-cargs} has been replaced by @code{-cargs +-gnaty}, and an additional error is reported in @file{hello.adb} on +line 4. This shows that @file{hello.adp} is being used to set the +compiler options. + +Fixing the error, linking and running the code proceed as in @ref{No +project files}. + +@node Set source search path, Use GNAT project file, Set compiler options, Compiling Examples +@subsection Set source search path + +In this example, we show how to deal with files in more than one +directory, using an Emacs Ada mode project file to set the search +path. + +Create the directory @file{Example_3}, containing: + +@file{hello_pkg.ads}: + +@example +package Hello_Pkg is + procedure Say_Hello; +end Hello_Pkg; +@end example + +@file{hello_pkg.adb}: + +@example +with Ada.Text_IO; +package Hello_Pkg is + procedure Say_Hello + is begin + Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); + end Say_Hello; +end Hello_Pkg; +@end example + +These are the same files from example 1; @file{hello_pkg.adb} has an +error on line 2. + +In addition, create a directory @file{Example_3/Other}, containing these files: + +@file{Other/hello_3.adb}: + +@example +with Hello_Pkg; +with Ada.Text_IO; use Ada.Text_IO; +procedure Hello_3 +is begin + Hello_Pkg.Say_Hello; + Put_Line ("From hello_3"); +end Hello_3; +@end example + +There are no errors in this file. + +@file{Other/other.adp}: + +@example +src_dir=.. +@end example + +Note that there must be no trailing spaces. + +In buffer @file{hello_3.adb}, invoke @samp{Ada | Project files | Find and +set project...}, and select @file{Example_3/Other/other.adp}. This +tells Emacs Ada mode to stop using the project file from +@file{Example_2}, and use the one for @file{Example_3}. Also note that +since this project file is not named @file{hello_3.adp}, it would not +be found by default. + +Then, again in @file{hello_3.adb}, invoke @samp{Ada | Set main and +Build}. You should get a @code{*compilation*} buffer containing +something like (the directory paths will be different): + +@example +cd c:/Examples/Example_3/Other/ +gnatmake -o hello_3 hello_3 -g -cargs -I.. -bargs -largs +gcc -c -g -I.. hello_3.adb +gcc -c -I./ -g -I.. -I- C:\Examples\Example_3\hello_pkg.adb +hello_pkg.adb:2:08: keyword "body" expected here [see file name] +gnatmake: "C:\Examples\Example_3\hello_pkg.adb" compilation error +@end example + +Compare the @code{-cargs} option to the compiler output in @ref{Set +compiler options}; this shows that @file{other.adp} is being used to +set the compiler options. + +Move to the error with @kbd{C-x `}. Ada mode searches the list of +directories given by @code{src_dir} for the file mentioned in the +compiler error message. + +Fixing the error, linking and running the code proceed as in @ref{No +project files}. + +@node Use GNAT project file, Use multiple GNAT project files, Set source search path, Compiling Examples +@subsection Use GNAT project file + +In this example, we show how to use a GNAT project file, with no Ada +mode project file. + +Create the directory @file{Example_4}, containing: + +@file{hello_pkg.ads}: + +@example +package Hello_Pkg is + procedure Say_Hello; +end Hello_Pkg; +@end example + +@file{hello_pkg.adb}: + +@example +with Ada.Text_IO; +package Hello_Pkg is + procedure Say_Hello + is begin + Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb"); + end Say_Hello; +end Hello_Pkg; +@end example + +These are the same files from example 1; @file{hello_pkg.adb} has an +error on line 2. + +In addition, create a directory @file{Example_4/Gnat_Project}, +containing these files: + +@file{Gnat_Project/hello_4.adb}: + +@example +with Hello_Pkg; +with Ada.Text_IO; use Ada.Text_IO; +procedure Hello_4 +is begin + Hello_Pkg.Say_Hello; + Put_Line ("From hello_4"); +end Hello_4; +@end example + +There are no errors in this file. + +@file{Gnat_Project/hello_4.gpr}: + +@example +project Hello_4 is + for Source_Dirs use (".", ".."); +end Hello_4; +@end example + +In buffer @file{hello_4.adb}, invoke @samp{Ada | Project | Load...}, and +select @file{Example_4/Gnat_Project/hello_4.gpr}. + +Then, again in @file{hello_4.adb}, invoke @samp{Ada | Set main and +Build}. You should get a @code{*compilation*} buffer containing +something like (the directory paths will be different): + +@example +-*- mode: compilation; default-directory: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project/" -*- +Compilation started at Mon Oct 21 11:28:31 + +gnatmake -Pc:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project/hello_4.gpr -o hello_4 hello_4 -cargs -I. -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4 -Ic:/Apps/GNAT-7.1.2/lib/gcc/i686-pc-mingw32/4.7.3/adainclude -bargs -largs +gcc -c -I. -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4 -Ic:/Apps/GNAT-7.1.2/lib/gcc/i686-pc-mingw32/4.7.3/adainclude -I- -gnatA C:\Projects\org.emacs.ada-mode.stephe-1\test\Example_4\hello_pkg.adb +hello_pkg.adb:2:08: keyword "body" expected here [see file name] +gnatmake: "C:\Projects\org.emacs.ada-mode.stephe-1\test\Example_4\hello_pkg.adb" compilation error + +Compilation exited abnormally with code 4 at Mon Oct 21 11:28:31 +@end example + +Compare the @code{gcc} options to the compiler output in @ref{Set +compiler options}; this shows that @file{hello_4.gpr} is being used to +set the compiler options. + +Fixing the error, linking and running the code proceed as in @ref{No +project files}. + +@node Use multiple GNAT project files, Use a Makefile, Use GNAT project file, Compiling Examples +@subsection Use multiple GNAT project files + +In this example, we show how to use multiple GNAT project files, +specifying the GNAT project search path in an Ada mode project file. + +Create the directory @file{Example_4} as specified in @ref{Use GNAT +project file}. + +Create the directory @file{Example_5}, containing: + +@file{hello_5.adb}: + +@example +with Hello_Pkg; +with Ada.Text_IO; use Ada.Text_IO; +procedure Hello_5 +is begin + Hello_Pkg.Say_Hello; + Put_Line ("From hello_5"); +end Hello_5; +@end example + +There are no errors in this file. + +@file{hello_5.adp}: + +@example +ada_project_path=../Example_4/Gnat_Project +gpr_file=hello_5.gpr +@end example + +@file{hello_5.gpr}: + +@example +with "hello_4"; +project Hello_5 is + for Source_Dirs use ("."); + package Compiler is + for Default_Switches ("Ada") use ("-g", "-gnatyt"); + end Compiler; +end Hello_5; +@end example + +In buffer @file{hello_5.adb}, invoke @samp{Ada | Project | Find and +select project...}, and select @file{Example_5/hello_5.adp}. This +would also be found by default if no previous project file had been +selected. + +Then, again in @file{hello_5.adb}, invoke @samp{Ada | Build | Set main +and Build}. You should get a @code{*compilation*} buffer containing +something like (the directory paths will be different): + +@example +-*- mode: compilation; default-directory: "c:/Projects/org.emacs.ada-mode.stephe-1/test/Example_5/" -*- +Compilation started at Mon Oct 21 11:32:05 + +gnatmake -Pc:/Projects/org.emacs.ada-mode.stephe-1/test/Example_5/hello_5.gpr -o hello_5 hello_5 -cargs -I. -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_5 -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4 -Ic:/Apps/GNAT-7.1.2/lib/gcc/i686-pc-mingw32/4.7.3/adainclude -bargs -largs +gcc -c -I. -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_5 -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4/Gnat_Project -Ic:/Projects/org.emacs.ada-mode.stephe-1/test/Example_4 -Ic:/Apps/GNAT-7.1.2/lib/gcc/i686-pc-mingw32/4.7.3/adainclude -I- -gnatA C:\Projects\org.emacs.ada-mode.stephe-1\test\Example_4\hello_pkg.adb +hello_pkg.adb:2:08: keyword "body" expected here [see file name] +gnatmake: "C:\Projects\org.emacs.ada-mode.stephe-1\test\Example_4\hello_pkg.adb" compilation error + +Compilation exited abnormally with code 4 at Mon Oct 21 11:32:05 +@end example + +Now type @kbd{C-x `}. @file{Example_4/hello_pkg.adb} is shown, +demonstrating that @file{hello_5.gpr} and @file{hello_4.gpr} are being +used to set the compilation search path. + +@node Use a Makefile, , Use multiple GNAT project files, Compiling Examples +@subsection Use a Makefile + +In this example, we show how to use a Makefile to build an Ada project +with GNAT, run the result, and clean the build directories. + +Create the directories @file{Example_4, Example_5} as specified in @ref{Use GNAT +project file}, @ref{Use multiple GNAT project files}. + +In @file{Example_5}, add the file: + +@file{Makefile}: + +@example +# build and run hello_5 project + +all : build run + +.PHONY : force + +build : force + gprbuild -Phello_5.gpr hello_5 + +run : + ./hello_5 + +clean : + gnatclean -r -Phello_5 + +export GPR_PROJECT_PATH = ../Example_4/Gnat_Project + +# Local Variables: +# eval:(ada-parse-prj-file "hello_5.adp") +# eval:(ada-select-prj-file "hello_5.adp") +# End: +@end example + +Close and re-open @file{Makefile}; the @samp{Local Variables} section +sets the project file to @file{hello_5.adp} when the @file{Makefile} +is opened. You can also use @key{C-x C-e} to execute the select line +after the @file{Makefile} is opened, to change the project file back +to @file{hello_5.adp}. + +In @file{Makefile}, invoke @samp{Tools | Compile...}, and accept the +default make command. This runs the @samp{all} target, which builds +@file{hello_5} and runs it. + +@node Compiler errors, , Compiling Examples, Compiling Executing +@section Compiler errors + +The @code{Check syntax} and @code{Build} commands, or running +@code{make}, place compilation errors in a separate buffer named +@code{*compilation*}. + +Each line in this buffer will become active: you can simply click on +it with the middle button of the mouse, or move point to it and press +@key{RET}. Emacs will then display the relevant source file and put +point on the line and column where the error was found. + +You can also press the @kbd{C-x `} key (@code{next-error}), and Emacs +will jump to the first error. If you press that key again, it will +move you to the second error, and so on. + +Some error messages also include references to other files. These +references are accessed via @kbd{C-c `}. + +@node Project files, Moving Through Ada Code, Compiling Executing, Top +@chapter Project files + +An Emacs Ada mode project file specifies what directories hold sources +for your project, and allows you to customize the compilation commands +and other things on a per-project basis. + +The default file extension for Ada mode project files is @file{*.adp} +or @file{*.prj}. You can use a different extension by adding it to +@code{ada-prj-file-extensions}, and a different syntax by adding a +parser function to @code{ada-prj-parser-alist}. + +Note that Ada mode project files @file{*.adp} are different than GNAT +compiler project files @samp{*.gpr}. However, Emacs Ada mode can use a +GNAT project file to specify the project directories. If no +other customization is needed, a GNAT project file can be used without +an Emacs Ada mode project file. + +If no Emacs Ada mode project file is specified, some Ada mode +functions are not available. + +@menu +* Project file overview:: +* Project file variables:: +@end menu + +@node Project file overview, Project file variables, Project files, Project files +@section Project file overview + +Project files have a simple syntax; they may be edited directly. Each +line specifies a project variable name and its value, separated by +``='' (spaces not allowed): +@example +src_dir=/Projects/my_project/src_1 +src_dir=/Projects/my_project/src_2 +@end example + +Any line that does not have an ``='' is a comment. + +Some variables (like @code{src_dir}) are lists; multiple occurrences +are concatenated. + +There must be no space between the variable name and ``='', and no +trailing spaces. + +The current project file is given by the lisp variable +@code{ada-prj-default-project-file}, and shown by the menu command +@key{Ada | Project Files | Show project}. + +To set the project file, use the menu command @samp{Ada | Set Project +...}, or the elisp functions @code{ada-parse-prj-file, +ada-select-prj-file}. The latter can be added to a Makefile: + +@example +# Local Variables: +# eval: (ada-parse-prj-file "ada-mode.prj") +# eval: (ada-select-prj-file ada-mode.prj") +# End: +@end example + +You specify either a GNAT project file or an Emacs Ada mode project +file; if the file extension is @code{.gpr}, the file is treated as a +GNAT project file. Extensions given by @code{ada-prj-file-extensions} +(default @file{.adp, .prj}) are treated as an Emacs Ada mode +project file. + +After a project file is parsed, you can make it current again with +just @code{ada-select-prj-file}, or by selecting it from the menu. + +@node Project file variables, , Project file overview, Project files +@section Project file variables + +To set a project variable that is a list, specify each element of the +list on a separate line in the project file. + +Process environment variables can be referenced using the +normal @code{$var} syntax. + +Most project variables have defaults that can be changed by setting +elisp variables; the table below identifies the elisp variable for each +project variable. Elisp variables corresponding to project variables +that are lists are elisp lists. + +In general, project variables are evaluated when referenced in Emacs +Ada mode commands. Relative file paths are expanded relative to the +directory containing the project file. + +Ada mode defines some project variables; others are defined by the +compiler. + +Here is the list of variables valid for all compilers. In the default +values, the current directory @code{"."} is the directory containing +the project file. + +@table @asis +@c These are the names that appear in the .adp file, which are the +@c same as the symbols used with ada-prj-get +@c +@c defined in ada-mode.el ada-prj-parse-file-1; alphabetical order +@c defaults defined in ada-mode.el ada-prj-default + +@item @code{ada_compiler} [default: @code{ada-compiler, gnat}] +Ada compiler for this project. It must occur in the project file +before any compiler-specific project variable. + +@item @code{auto_case} [default: @code{ada-auto-case, t}] +Non-nil means automatically change case of preceding word while typing. + +@item @code{case_identifier} [default: @code{ada-case-identifier, ada-mixed-case}] +Function to call to adjust the case of an Ada identifier. + +@item @code{case_keyword} [default: @code{ada-case-keyword, downcase-word}] +Function to call to adjust the case of an Ada keyword. + +@item @code{case_strict} [default: @code{ada-case-strict, t}] +If non-nil, @code{ada-mixed-case} forces @code{Mixed_Case} for identifiers. +Otherwise, @code{ada-mixed-case} allows @code{UPPERCASE} for identifiers. + +@item @code{casing} [default: @code{ada-case-exception-file, nil}] +List of files containing casing exceptions. @xref{Automatic casing}. + +@item @code{el_file} [default: ] +The value is a file name, which is loaded as an elisp file when the +project file is parsed or selected. This allows setting Ada mode indentation +variables, and any arbitrary elisp code used to customize the project. + +@item @code{path_sep} [default: @code{path-separator}] +Separator character used in compiler search paths. + +@item @code{src_dir} [default: @code{"."}] +A list of directories to search for source files. + +@item @code{xref_tool} [default: @code{ada-xref-tool, gnat-xref}] +Cross reference tool for this project. + +@end table + +The following variables are valid with the GNAT compiler: + +@table @asis +@c defined in ada-gnat.el ada-gnat-prj-parse-emacs-file; alphabetical order +@item @code{ada_project_path} [default: @code{""}] +@c ada-prj-get 'prj_dir, 'proc_env +A list of directories to search for GNAT project files. + +If set, the @code{GPR_PROJECT_PATH} process environment variable is +set to this value in the child process that runs GNAT tools. If not +set, @code{GPR_PROJECT_PATH} in the child process is inherited from +the Emacs process. + +If you have the @code{GPR_PROJECT_PATH} or @code{ADA_PROJECT_PATH} +environment variable set in the Emacs process correctly for all of +your projects, you do not need to set this project variable. + +The project search path can also be set in GNAT aggregate +projects. However, the gnat tools do not make that path available to +Emacs, so you must duplicate it in an Emacs Ada project file. + +@item @code{gpr_file} [default: @code{""}] +The GNAT project file. + +If set, the source and project directories specified in the GNAT +project file are appended to @code{src_dir} and +@code{ada_project_path}. This allows specifying Ada source directories +with a GNAT project file, and other source directories with the Emacs +project file. + +@item @code{gpr_project_path} [default: @code{""}] +Same as @code{ada_project_path}. + +@end table + +@node Moving Through Ada Code, Identifier completion, Project files, Top +@chapter Moving Through Ada Code + +There are several commands to navigate through Ada code. All +these functions are available through the Ada menu and keybindings. + +Some of these commands rely on cross reference facilities provided by +the compiler; the standard Emacs Ada mode only supports the GNAT +compiler, but others can be added (@pxref{Other cross-reference}). + +@table @kbd +@item C-c C-d +@findex ada-goto-declaration +Move from any use of an identifier to its declaration, for from a declaration to +its body (if there is one). + +@item C-c M-d +@findex ada-goto-declaration-parent +Move from a child type declaration to the parent type declaration; +display a list of references if there is more than one parent. + +@item C-c C-n +@findex ada-next-statement-keyword +Move to the next keyword in the current statement. + +For example, if point is on @samp{if}, move to @samp{then}. + +@item C-c C-p +@findex ada-prev-statement-keyword +Move to the previous keyword in the current statement. + +For example, if point is on @samp{then}, move to @samp{if}. + +@item C-c C-o +@findex ada-find-other-file +Switch between corresponding spec and body. There are several special +cases: + +@itemize @bullet +@item +If the region is active, it is assumed to contain an Ada package +name; position point on the corresponding package declaration. + +@item +If point is in the start line of a top level child package +declaration (but not package body), or a child subprogram spec or +body, position point on the corresponding parent package +declaration. + +@item +If point is in the start line of a top level separate body, +position point on the corresponding separate stub declaration. + +@item +If point is in a subprogram declaration or body, position point on the +corresponding body or declaration in the other file. + +@item +If point is on a @code{with} clause, position point on the +corresponding declaration. + +@end itemize + +@item C-c C-r +@findex ada-show-references +Show all references to the identifier surrounding point. Use +@kbd{C-x `} (@code{next-error}) to visit each reference (as for +compilation errors). + +@item C-c C-x +@findex ada-show-overriding +Show all declarations that override the primitive procedure at +point. Use @kbd{C-x `} (@code{next-error}) to visit each reference (as +for compilation errors). + +@item C-c M-x +@findex ada-show-overridden +Show the declaration that the declaration at point overrides. + +@item C-u SPACE +Jump back to the previous location. + +@item Ada | Misc | Refresh cross reference cache +Cross reference information is loaded from the compiler output when +the first cross reference command is issued. If the code is recompiled +after that, the cross reference information is reloaded by invoking +this menu command. + +@end table + +@node Identifier completion, Indentation, Moving Through Ada Code, Top +@chapter Identifier completion + +Emacs provides a general way of completing identifiers: @kbd{M-/} +(bound to @code{dabbrev-expand}). This is an easy way to type faster: +you just have to type the first few letters of an identifier, and then +loop through all the possible completions. + +@kbd{M-/} works by parsing all open Ada files for possible +completions. + +For instance, if the words @samp{my_identifier} and @samp{my_subprogram} +are the only words starting with @samp{my} in any of the open Ada files, +then you will have this scenario: + +@example +You type: my@kbd{M-/} +Emacs inserts: @samp{my_identifier} +If you press @kbd{M-/} once again, Emacs replaces @samp{my_identifier} with +@samp{my_subprogram}. +Pressing @kbd{M-/} once more will bring you back to @samp{my_identifier}. +@end example + +This is a very fast way to do completion, and the casing of words will +also be respected. + +@node Indentation, Statement skeletons, Identifier completion, Top +@chapter Indentation + +Ada mode comes with a full set of rules for automatic indentation. You +can also configure the indentation, via the following variables: + +@table @asis +@item @code{ada-indent} (default value: 3) +Number of columns for default indentation. + +@item @code{ada-indent-broken} (default value: 2) +Number of columns to indent the continuation of a broken line. + +@item @code{ada-indent-comment-col-0} (default value: nil) +If non-nil, comments currently starting in column 0 are left in column +0. Otherwise, they are indented with previous comments or code. + +@item @code{ada-indent-label} (default value: -3) +Number of columns to indent a label. + +@item @code{ada-indent-record-rel-type} (default value: 3) +Indentation for @code{record} relative to @code{type} or @code{use}. + +@item @code{ada-indent-renames} (default value: 2) +Indentation for @code{renames} relative to the matching subprogram keyword. + +If the subprogram has parameters then if @code{ada-indent-renames} is +zero or less the indentation is abs @code{ada-indent-renames} relative +to the open parenthesis; if @code{ada-indent-renames} is one or more +the indentation is relative to the line containing the keyword. + +If the subprogram has no parameters then @code{ada-indent-broken} the +indentation is relative to the indentation of the line containing +the keyword. + +@item @code{ada-indent-return} (default value: 0) +Indentation for @code{return} relative to the matching + @code{function}. + +If the function has parameters, then if @code{ada-indent-return} is +zero or less the indentation is abs @code{ada-indent-return} relative +to the open parenthesis; if @code{ada-indent-return} is one or more, +indentation is relative to line containing @code{function}. + +If the function has no parameters, @code{ada-indent-broken} is used +relative to line containing @code{function}. + +@item @code{ada-indent-use} (default value: ada-indent-broken) +Indentation for the lines in a @code{use} statement. + +@item @code{ada-indent-when} (default value: 3) +Indentation for @code{when} relative to @code{exception}, @code{case}, +or @code{or} in @code{select}. + +@item @code{ada-indent-with} (default value: ada-indent-broken) +Indentation for the lines in a @code{with} context clause. + +@end table + +The indentation variables are buffer local; the global value may be +overridden in an elisp file invoked by an @code{el_file} Emacs Ada +mode project file statement, or in a file local variable section. + +The following keys indent portions of the text: +@table @kbd + +@item RET +Insert and indent a new line. + +@item TAB +Indent the current line, or the current region. + +@item C-c TAB +Indent the current statement or declaration. + +@end table + +The indentation algorithm relies on a grammar parser to identify the +syntactic role for keywords and other words in the code. If the code +is accepted by the parser, the indentation is done according to the +rules in the indentation engine. + +If the code is not accepted (because it is partially complete during +editing), the indentation engine falls back to the trivial algorithm +of indenting each new line the same as the previous line. Once enough +new text has been entered to make the code acceptable to the parser, +the statement or declaration is properly indented. + +For example, if you are entering this code: + +@example +if A then + B; +end if; +@end example + +when you type @kbd{RET B}, @code{B} is indented to the same column as +@code{if}, because the parser does not find @code{end if;}. Then when +you type the final @code{;} followed by @key{TAB}, all three lines are +indented, putting @code{B} where it belongs. + +To be more user friendly, the parser accepts a superset of the Ada +grammer. For example, the parser accepts this code for an @code{if} +statement: + +@example +if then +end if; +@end example + +In general, any sequence of statements, and many expressions, may be +omitted. + +One way to easily insert empty statements like this is using +@ref{Statement skeletons}. + +In rare cases, the parser gets confused; it can be reset by invoking +menu @key{Ada | Misc | Reset parser}. Please report such cases as a +bug. + +@node Statement skeletons, Aligning code, Indentation, Top +@chapter Statement skeletons + +@kbd{C-c C-e} expands the previous one or two words into a statment +skeleton. For example, @kbd{i f C-c C-e} expands to: + +@example +if then +elsif then +else +end if; +@end example + +All skeleton expansions are accepted by the indentation parser, so +this is a convenient way to insert statements with correct +indentation. + +For named statements (packages, loops, etc), the name is taken from +the word before point, and the name of the statement from the word +before that. + +Some expansions prompt for more information, such as +whether a spec or body is desired. For example, @kbd{package A_Package +C-c C-e} first prompts for ``body'' or ``spec''. If ``spec'' is +selected, the following code is inserted: + +@example +package A_Package is +private +end A_Package; +@end example + +Named blocks work similarly: @kbd{declare A_Block C-c C-e} expands +(without prompting) to: + +@example +A_Block: + declare + begin + exception + end A_Block; +@end example + +Note that the order of the keyword @code{declare} and the name +@code{A_Block} are reversed in the expansion; this may take some +getting used to. Alternately, if no name is present in the buffer, you +are prompted for a name: @kbd{declare C-c C-e} first prompts for a +name, then expands to the above. + +The variable @code{ada-skel-initial-string} defines what to insert in +a newly created empty buffer. It defaults to @code{@{header@}}, which +is a placeholder defined by @code{ada-skel-header}, which inserts a +typical header with a copyright license (choice of GPL or +restricted). Users will typically want to override the definition of +@code{ada-skel-initial-string} and/or @code{ada-skel-header}, or +provide more choices of copyright license. + +@node Aligning code, Automatic casing, Statement skeletons, Top +@chapter Aligning code + +Aligning code adds space in each line so that similar parts of +successive lines are aligned vertically. For example, a sequence of +declarations: + +@example +A : Integer; +Another : Float := 1.0; +More : Integer := 2; +@end example + +changes to this when aligned: + +@example +A : Integer; +Another : Float := 1.0; +More : Integer := 2; +@end example + +Alignment is invoked by @kbd{C-c C-a}, which aligns the sequence of +statements surrounding point, or within the selected region. + +Parameter lists are also aligned: + +@example + procedure Foo + (A : in Integer; + Another : out Float := 1.0; + More : in out Integer := 2); +@end example + +is aligned to: + +@example + procedure Foo + (A : in Integer; + Another : out Float := 1.0; + More : in out Integer := 2); +@end example + +@node Automatic casing, Comment Handling, Aligning code, Top +@chapter Automatic casing + +Casing of identifiers, attributes and keywords is automatically +performed while typing when the variable @code{ada-auto-case} is +non-nil (the default). Every time you type a word separator, the +previous word is automatically cased. + +You can customize the automatic casing with the following variables: + +@table @code +@item ada-case-keyword +Value must be one of: +@table @code +@item downcase-word +Ada keywords will be lowercase. + +@item upcase-word +Ada keywords will be uppercase. +@end table + +@item ada-case-strict +If non-nil, all identifiers are forced to @code{Mixed_Case}; first +letter, and letter following ``_'' are uppercase; rest are +lowercase. + +If nil, the mixed case characters in identifiers are forced to upper +case, but the other characters are not modified. That allows typing +all uppercase identifiers without defining a casing exception. +@end table + +You can define exceptions to these rules, in files specified by the +variable @code{ada-case-exception-file}. Each line in a case exception +file specifies the casing of one word or word fragment. If an +exception is defined in multiple files, the first occurrence is used. + +If the word starts with an asterisk (@code{*}), it defines the casing +of a word fragemnt (or ``substring''); part of a word between two +underscores or word boundary. + +For example: + +@example +DOD +*IO +GNAT +@end example + +The word fragment @code{*IO} applies to any word containing ``_io''; +@code{Text_IO}, @code{Hardware_IO}, etc. + +@findex ada-case-create-exception +There are two ways to add new items to this file: you can simply edit +it as you would edit any text file. Or you can position point on the +word you want to add, and select menu @samp{Ada | Casing | Create full +exception} or @samp{Ada | Casing | Create partial exception}. The +word will be added to the current list of exceptions and to the file. + +It is sometimes useful to have multiple exception files. For +example, one could be the standard Ada acronyms, the second some +company specific exceptions, and the last one some project specific +exceptions. If you set up the variable @code{ada-case-exception-file} +as a list of files, each of them will be parsed and used in your emacs +session. When you create a new exception, you are prompted for the +file to save it in. + +Other keys and menu entries are defined: + +@table @kbd +@item C-c C-w +@findex ada-case-adjust-at-point +Adjust case of the word at point. With prefix arg, adjust case even if +in comment. Normally, comments are not affected by case adjust. + +@item Ada | Casing | Adjust case region +Adjust case in the active region. + +@item Ada | Casing | Adjust case buffer +Adjust case in the active buffer. + +@end table + +@node Comment Handling, Key summary, Automatic casing, Top +@chapter Comment Handling + +By default, comment lines get indented like Ada code. There are a few +additional functions to handle comments: + +@table @kbd +@item M-; +@findex comment-dwim +If the region is active, comment or uncomment it. + +If the current line is empty, start a comment. + +Otherwise, add a comment at the end of the line, in a column given by +@code{comment-column}. + +@item M-q +@findex fill-paragraph +Fill the current comment paragraph. +@end table + +@node Key summary, Developer overview, Comment Handling, Top +@chapter Key summary +@c search for @kbd and @key. Alphabetical by key sequence + +This table summarizes the keys described in this manual. Other keys +are bound by Ada mode; see @key{C-h b} for a complete list. The +Ada menu also displays keys bound to menu operations. + +@table @kbd +@item M-/ +@xref{Identifier completion}. +Complete the word before point; repeat to cycle thru possible +completions. + +@item M-; +@xref{Comment Handling}. +If the region is active, comment or uncomment it. + +@item M-q +@xref{Comment Handling}. +Fill the current comment paragraph. + +@item RET +@xref{Indentation}. +Insert and indent a new line. + +@item TAB +@xref{Indentation}. +Indent the current line, or the current region. + +@item C-c TAB +@xref{Indentation}. +Indent the current statement or declaration. + +@item C-c ` +@xref{Compiler errors}. +Move to the location of the secondary reference in the current compilation error. + +@item C-c C-a +@xref{Aligning code}. +Align code. + +@item C-c C-c +@xref{Compile commands}. +Build the current main program. + +@item C-c C-d +@xref{Moving Through Ada Code}. +Move from any use of an identifier to its declaration, for from a declaration to its body. + +@item C-c M-d +@xref{Moving Through Ada Code}. +Move from a child type declaration to the parent type declaration. + +@item C-c C-e +@xref{Statement skeletons}. +Expand previous one or two words into a statement or declaration +skeleton. + +@item C-c C-c +@xref{Compile commands}. +Build the current file. + +@item C-c C-n +@xref{Moving Through Ada Code}. +Move to the next keyword in the current statement. + +@item C-c C-o +@xref{Moving Through Ada Code}. +Switch between corresponding spec and body, or find other spec. + +@item C-c C-p +@xref{Moving Through Ada Code}. +Move to the previous keyword in the current statement. + +@item C-c C-r +@xref{Moving Through Ada Code}. +Show all references to the identifier surrounding point. + +@item C-c C-w +@xref{Automatic casing}. +Adjust case of the word at point. With prefix arg, adjust case even if +in comment. + +@item C-c C-x +@xref{Moving Through Ada Code}. +Show all declarations that override the primitive procedure at +point. + +@item C-c C-y +@xref{Automatic casing}. +Create case exception. + +@item C-c ` +@xref{Compiler errors}. +Move to the location of the next secondary compilation error. + +@item C-x ` +@xref{Compiler errors}. +Move to the location of the next compilation error or show result. + +@item M-q +@xref{Comment Handling}. +Fill the current comment paragraph. + +@end table + +@node Developer overview, GNU Free Documentation License, Key summary, Top +@chapter Developer overview +If you'd like to contribute to Ada mode, or just understand the +sources, here's an overview. + +@menu +* Directory structure:: +* Package organization:: +* OpenToken:: +* ELPA:: +@end menu + +@node Directory structure, Package organization, Developer overview, Developer overview +@section Directory structure +@table @file +@item org.emacs.ada-mode +Main source. + +File extensions: +@table @file +@item *.el +Elisp files; main code. + +@item *.elc +Byte-compiled elisp files, not in the distribution. Generated by the +Makefile target @code{byte-compile}, or by the Emacs package installer. + +Compiling the parse tables (@file{*-wy.el}) speeds up loading them +significantly. Compiling other files speeds up parsing, but not +noticeably. + +One reason to byte-compile files is to find errors; the byte compiler +reports undefined variables, wrong argument counts, etc. + +@item *-wy.el +Parse tables, generated from the corresponding grammar @file{*.wy} by +the OpenToken tool @file{wisi-generate.exe}. These are in the tarball +distribution and the monotone repository so users and Elisp developers +don't have to install OpenToken. + +@item *-wy.output +Diagnostic output from @file{wisi-generate.exe}, useful for tracing +parses while debugging a grammar issue. Not in the tarball +distribution or the monotone repository. + +@item *.wy +Grammar files, specifying the language to be parsed. The syntax for +these grammar files is similar to that for bison and wisent, but not +the same; see the OpenToken documentation for more info. + +The wisi parser (in @file{wisi-parse.el}) is a generalized LALR +parser, so it tolerates some conflicts and ambiguities. This makes the +grammars easier to write, and in particular makes it possible to let +the Ada grammar closely match Annex P of the Ada Language Reference +Manual (the syntax summary). + +@item *.texi +Texinfo source for the user guides. + +@item *.html +Generated user guide in HTML format. + +@item *.info +Generated user guide in Emacs info format. + + +@end table + +@item build +Makefile for building the user guides, publishing to the web page or +Gnu ELPA. Test drivers. + +@item build/wisi +Makefile for building and testing with the wisi-based +parser. Separate from @file{build}, because there used to be a +SMIE-based parser, and there might be another parser someday. + +The emacs used to byte-compile and run tests is given by the 'make' +variable EMACS_EXE, which defaults to 'emacs'; it can be overridden on +the make command line or by an environment variable. + +@item test +All tests for Ada mode, gpr mode, parser. + +Each test is run in a separate invocation of Emacs, so it is +completely independent of all other tests. + +The tests are driven by the elisp code in @file{build/*.el}. + +In general, the Ada mode tests open the file, execute test actions, +re-indent, and re-captialize the entire file. The result is diffed +with the original, and must match. + +The test actions are defined by comments with the prefix +@code{--EMACSCMD:}; they are elisp forms that invoke Ada mode +functions. This is used to test navigation features and other parser +effects. + +@item test/Example_* +Starting files for examples in user guide. + +@item test/gpr +Tests for gpr mode. + +@item test/subdir +More tests; allows testing path search features. + +@item test/wisi +Tests of the elisp wisi grammar compiler and parser. +@end table + +@node Package organization, OpenToken, Directory structure, Developer overview +@section Package organization + +@menu +* Ada mode:: +* gpr mode:: +* GNAT core:: +* Wisi:: +@end menu + +@node Ada mode, gpr mode, Package organization, Package organization +@subsection Ada mode +Ada mode consists of all files with @file{ada-} prefix in the file +name. + +@table @file +@item ada-mode.el +The main file, implementing the keymap, menu, and top level +functionality. + +It allows for different backend implementations for compiling, +cross-referencing, and indenting. The functions for each of these +backends dispatch thru global variables that are set by Emacs Ada mode +project files. They default to the GNAT compiler, the gnatxref cross +reference tool, and the ada-wisi indentation engine. + +@item ada-build.el +Provides functions for compiling Ada files without a Makefile (or +similar tool). + +@item ada-fix-error.el +Provides an interface to utilities for automatically fixing errors +reported by the compiler. It dispatches to a compiler-specific +backend. + +@item ada-gnat-compile.el +Implements the Ada mode compiler functions for the GNAT compiler. + +@item ada-gnat-xref.el +Implements the Ada mode cross reference functions for the GNAT compiler. + +@item ada-grammar.* +The Ada language grammar, and files generated from it by the OpenToken +tool @file{wisi-generate.exe}. + +@item ada-indent-user-options.el +All user-settable options for the Ada indentation engine. + +@item ada-mode-compat-23.4.el +Defines functions used by Ada mode that are not in Emacs 23.4. + +Emacs Ada mode is written for Emacs 24.3. Emacs version 23.4 is +partially supported. Earlier versions of Emacs are not supported. + +@item ada-mode.texi +The Ada mode user guide source and compiled versions. + +@item ada-skel.el +Skeletons for expansion of Ada syntax (@pxref{Statement +skeletons}). Extends the Emacs skeleton functions with ``tokens'', +inspired by the lamented Else package (which was inspired by DEC LSE). + +@item ada-wisi-opentoken.el +Indentation functions useful when editing OpenToken code; an example +of extending the Ada mode indentation engine for special +circumstances. + +@item ada-wisi.el +Implements the Ada mode indentation functions for the wisi indentation +engine backend. + +@end table + +@node gpr mode, GNAT core, Ada mode, Package organization +@subsection gpr mode + +gpr mode consists of all files with @file{gpr-} prefix in the file +name. The functions in each file are similar to the similarly-named +Ada mode files. + +@node GNAT core, Wisi, gpr mode, Package organization +@subsection GNAT core +@table @file + +@item gnat-core.el +GNAT is actually a multi-language tool; it builds on top of the +multi-language gcc. + +@file{gnat-core.el} is a start at a language-agnostic interface to the +GNAT tools. It was first factored out from @file{ada-gnat.el} and +@file{ada-mode.el} to support the multi-language +@file{gnat-inspect.el}, which is still experimental. + +More code currently in @file{ada-mode.el} could be migrated to +@file{gnat-core.el}, in particular the project file support. + +@item gnat-inspect.el +Provides an experimental interface to the experimental multi-language +cross-reference tool @file{gnatinspect} from AdaCore, which will +supercede @file{gnatxref}. + +Implements the Ada mode cross-reference functions for the +@file{gnatinspect} backend, and a minor mode providing similar +functions for C++. + +@end table + +@node Wisi, , GNAT core, Package organization +@subsection Wisi + +The ``wisi'' parser. ``wisi'' used to be an acronym, but now it's just +a name. + +@table @file +@item wisi.el +Implements the lexer, the main parser driver, +parser actions that cache parser information in text properties, +utilities for indenting and navigating using the cached information, +and general setup. + +@item wisi-compile.el +Implements the parse table +compiler. @file{wisi-generate.exe} processes the grammar source +@file{*.wy} into an elisp source representation of a parse table +@file{*-wy.el}. That is compiled into an internal structure containing +the state transitions and executable actions. The actions can be any +elisp form; the intent is that they be calls to the action functions +provided by @file{wisi.el}. @file{wisi-compile.el} uses some features +provided by @code{semantic}. + +@item wisi-parse.el +Implements the generalized LALR parser. +@end table + +@node OpenToken, ELPA, Package organization, Developer overview +@section OpenToken +Ada mode uses the OpenToken tool @file{wisi-generate.exe} to process +the grammar sources into elisp parse tables. See +@uref{http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html} for +current information about which version of OpenToken is required, and +how to get it. + +The Makefile variable @code{WISI_OPENTOKEN} gives the path to the +build directory for OpenToken; you probably need to override it with +an external environment variable or on the @code{make} command line. + +@node ELPA, , OpenToken, Developer overview +@section ELPA +Ada mode is published via the Gnu ELPA archive. To test a new version +of Ada mode, we use a local Gnu ELPA archive. That requires fetching +Gnu ELPA via git: + +@example +cd /Projects +git clone git://git.savannah.gnu.org/emacs/elpa.git +@end example + +If you have an Emacs Savannah developer account, you can use: + +@example +cd /Projects +git clone @@git.savannah.gnu.org/emacs/elpa.git +@end example + +@file{build/Makefile} contains targets for copying Ada mode source to +the elpa workspace, and for building the elpa archive there. + +@node GNU Free Documentation License, Index, Developer overview, Top +@appendix GNU Free Documentation License +@include doclicense.texi + +@node Index, , GNU Free Documentation License, Top +@unnumbered Index + +@printindex fn + +@bye diff --git a/packages/ada-mode/ada-wisi.el b/packages/ada-mode/ada-wisi.el index c5ce9c212..d86e93ae8 100755 --- a/packages/ada-mode/ada-wisi.el +++ b/packages/ada-mode/ada-wisi.el @@ -1002,12 +1002,6 @@ cached token, return new indentation for point." ;; 1 => (+ (current-column) 1)) - (OF - ;; ada_mode-nominal.ads - ;; Anon_Array_2 : array (1 .. 10) of - ;; Integer; - (ada-wisi-indent-containing ada-indent-broken cache)) - (NEW ;; ada_mode-nominal.ads ;; type Limited_Derived_Type_2 is abstract limited new Private_Type_1 with @@ -1019,6 +1013,12 @@ cached token, return new indentation for point." ;; 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 @@ -1041,12 +1041,6 @@ cached token, return new indentation for point." ;; Constant_Indexing => Constant_Reference, ;; indenting 'Constant_Indexing'; point is on 'with' (+ (current-indentation) ada-indent-broken)) - - (raise_statement - ;; raise_statement: test/ada_mode-nominal.adb - ;; raise Constraint_Error with - ;; "help!"; - (ada-wisi-indent-containing ada-indent-broken cache nil)) )) ;; otherwise just hanging @@ -1193,6 +1187,8 @@ Also return cache at start." (defun ada-wisi-goto-declaration-end () "For `ada-goto-declaration-end', which see." + ;; first goto-declaration-start, so we get the right end, not just + ;; the current statement end. (wisi-goto-end-1 (ada-wisi-goto-declaration-start))) (defun ada-wisi-goto-declarative-region-start () diff --git a/packages/ada-mode/gnat-core.el b/packages/ada-mode/gnat-core.el index 2637c8934..dad377a8c 100755 --- a/packages/ada-mode/gnat-core.el +++ b/packages/ada-mode/gnat-core.el @@ -166,9 +166,10 @@ Uses 'gnat list'. Returns new '(src-dirs prj-dirs)." (setq prj-dirs (cadr res)))) (gpr_query - (require 'gpr-query) - (setq src-dirs (gpr-query-get-src-dirs src-dirs)) - (setq prj-dirs (gpr-query-get-prj-dirs prj-dirs))) + (when (ada-prj-get 'gpr_file) + (require 'gpr-query) + (setq src-dirs (gpr-query-get-src-dirs src-dirs)) + (setq prj-dirs (gpr-query-get-prj-dirs prj-dirs)))) ) (setq project (plist-put project 'src_dir (reverse src-dirs))) diff --git a/packages/ada-mode/gnat-inspect.el b/packages/ada-mode/gnat-inspect.el index b55b2cd63..1c05fa8d2 100755 --- a/packages/ada-mode/gnat-inspect.el +++ b/packages/ada-mode/gnat-inspect.el @@ -519,6 +519,7 @@ Enable mode if ARG is positive" (setq ada-make-package-body nil) (setq ada-syntax-propertize-hook (delq 'gnatprep-syntax-propertize ada-syntax-propertize-hook)) + (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize ada-syntax-propertize-hook)) (setq ada-mode-hook (delq 'ada-gnat-inspect-setup ada-mode-hook)) (setq ada-xref-other-function nil) diff --git a/packages/ada-mode/gpr-mode.texi b/packages/ada-mode/gpr-mode.texi new file mode 100755 index 000000000..def679723 --- /dev/null +++ b/packages/ada-mode/gpr-mode.texi @@ -0,0 +1,305 @@ +\input texinfo @c -*-texinfo-*- +@setfilename ../../info/gpr-mode +@settitle gpr Mode + +@copying +Copyright @copyright{} 2013 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', +and with the Back-Cover Texts as in (a) below. A copy of the license +is included in the section entitled ``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and +modify this GNU manual. Buying copies from the FSF supports it in +developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@dircategory Emacs editing modes +@direntry +* gpr mode: (gpr-mode). Emacs mode for editing and navigating gpr files (gnat project files). +@end direntry + +@titlepage +@sp 10 +@title{gpr Mode} +@sp 2 +@subtitle An Emacs major mode for editing and navigating gpr files +@sp 2 +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@node Top, Overview, (dir), (dir) + +@ifnottex +@insertcopying +@end ifnottex + +@menu +* Overview:: +* Installation:: +* Customization:: +* Moving Through Gpr Code:: +* Identifier completion:: +* Indentation:: +* Statement skeletons:: +* GNU Free Documentation License:: +* Index:: +@end menu + +@node Overview, Installation, Top, Top +@chapter Overview +gpr files are the project files used by the GNAT compiler and +associated tools. They describe search paths, compiler options, etc. + +@xref{GNAT Project Manager,,GNAT Project Manager,gnat_ugn,GNAT Pro +User's Guide}, for general information on gpr files. + +The Emacs mode for gpr files helps the user in reading +existing code and facilitates writing new code. + +When you open a file with a file extension of @file{.gpr}, Emacs will +automatically load and activate gpr mode. + +@node Installation, Customization, Overview, Top +@chapter Installation + +gpr mode is distributed in the Gnu ELPA package archive, bundled with +Ada mode; it can be installed via @code{M-x list-packages} +(@pxref{Packages,,,emacs,Emacs User Guide}). + +gpr mode is also available as a separate distribution bundled with +Ada mode, from the Emacs Ada mode website +@uref{http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html}. The +separate distribution may be more recent. + +For installing the separate distribution, see the @file{README} file +in the distribution. + +gpr mode does not have a separate version; it uses the Ada mode +version number. To see what version of Ada mode you have installed, do +@kbd{M-x ada-mode-version}. + +@node Customization, Moving Through Gpr Code, Installation, Top +@chapter Customization + +gpr mode uses the Ada mode indentation variables; they can be set via +the menu @samp{Ada | Customize} from an Ada mode buffer. Click on the +@samp{Help} button there for help on using customize. + +To modify a specific variable, you can directly call the function +@code{customize-variable}; just type @kbd{M-x customize-variable +@key{RET} @var{variable-name} @key{RET}}). + +Alternately, you can specify variable settings in the Emacs +configuration file, @file{~/.emacs}. This file is coded in Emacs lisp, +and the syntax to set a variable is the following: +@example +(setq variable-name value) +@end example + +Some general Emacs settings that are useful for gpr files: +@table @code +@item delete-trailing-whitespace +Deletes space, tab at end of line and blank lines at end of buffer. +@item untabify +Deletes tab characters that have crept into the file. +@item indent-tabs-mode +Don't insert tab characters when indenting. +@item hippie-expand +Bind @code{hippie-expand} to a key; it expands the word before point, +using words from current buffer, other buffers, file names, etc; see +@code{hippie-expand-try-functions-list}. You can also add +@code{skeleton-hippie-try} to that list (@pxref{Statement skeletons}). +@end table + +The above can all be set by the following code in your +@file{~/.emacs}. Note that some are functions are added to +@code{before-save-hook}; they run just before a buffer is written to disk. +@example +(setq-default indent-tabs-mode nil) +(require 'gpr-mode) +(add-to-list 'hippie-expand-try-functions-list 'skeleton-hippie-try) +(define-key gpr-mode-map "\C-e" 'hippie-expand) +(add-hook 'gpr-mode-hook + (lambda () + (add-hook 'before-save-hook 'delete-trailing-whitespace nil t) + (add-hook 'before-save-hook + (lambda () (untabify (point-min) (point-max))) + nil t))) +@end example + +@node Moving Through Gpr Code, Identifier completion, Customization, Top +@chapter Moving Through Gpr Code + +These commands navigate through gpr code. All these functions are +available through the gpr menu and keybindings. + +@table @kbd +@item C-c C-o +@findex ff-find-other-file +If point is on a @code{with} clause, position point on the +corresponding package declaration. + +@item C-u SPACE +Jump back to the previous location. + +@end table + +@node Identifier completion, Indentation, Moving Through Gpr Code, Top +@chapter Identifier completion + +Emacs provides a general way of completing identifiers: @kbd{M-/} +(bound to @code{dabbrev-expand}). This is an easy way to type faster: +you just have to type the first few letters of an identifier, and then +loop through all the possible completions. + +@kbd{M-/} works by parsing all open gpr files for possible +completions. + +For instance, if the words @samp{my_identifier} and @samp{my_subprogram} +are the only words starting with @samp{my} in any of the open gpr files, +then you will have this scenario: + +@example +You type: my@kbd{M-/} +Emacs inserts: @samp{my_identifier} +If you press @kbd{M-/} once again, Emacs replaces @samp{my_identifier} with +@samp{my_subprogram}. +Pressing @kbd{M-/} once more will bring you back to @samp{my_identifier}. +@end example + +This is a very fast way to do completion, and the casing of words will +also be respected. + +@node Indentation, Statement skeletons, Identifier completion, Top +@chapter Indentation + +gpr mode comes with a full set of rules for automatic indentation. You +can also configure the indentation, via the following variables: + +@table @asis +@item @code{ada-indent} (default value: 3) +Number of columns for default indentation. + +@item @code{ada-indent-broken} (default value: 2) +Number of columns to indent the continuation of a broken line. + +@item @code{ada-indent-when} (default value: 3) +Indentation for @code{when} relative to @code{exception}, @code{case}, +or @code{or} in @code{select}. + +@item @code{ada-indent-with} (default value: ada-indent-broken) +Indentation for the lines in a @code{with} context clause. + +@end table + +The following keys indent portions of the text: +@table @kbd + +@item RET +Insert and indent a new line. + +@item TAB +Indent the current line, or the current region. + +@item C-c TAB +Indent the current declaration. + +@end table + +The indentation algorithm relies on a grammar parser to identify the +syntactic role for keywords and other words in the code. If the code +is accepted by the parser, the indentation is done according to the +rules in the indentation engine. + +If the code is not accepted (because it is partially complete during +editing), the indentation engine falls back to the trivial algorithm +of indenting each new line the same as the previous line. Once enough +new text has been entered to make the code acceptable to the parser, +the declaration is properly indented. + +For example, if you are entering this code: + +@example + for Source_Dirs use + ("../../1553/test", + "../../system/test"); +@end example + +when you type @kbd{RET (}, @code{(} is indented to the same column as +@code{for}, because the parser does not find @code{);}. Then when +you type the final @code{;} followed by @key{TAB}, all three lines are +indented, putting @code{(} where it belongs. + +To be more user friendly, the parser accepts a superset of the gpr +grammer. For example, the parser accepts this code for a @code{case} +statement: + +@example +case is +end case; +@end example + +In general, any sequence of statements, and many expressions, may be +omitted. + +One way to easily insert empty statements like this is using +@ref{Statement skeletons}. + +In rare cases, the parser gets confused; it can be reset by invoking +menu @key{gpr | Misc | Reset parser}. Please report such cases as a +bug. + +@node Statement skeletons, GNU Free Documentation License, Indentation, Top +@chapter Statement skeletons + +@kbd{C-c C-e} expands the previous one or two words into a statment +skeleton. For example, @kbd{c a s e C-c C-e} expands to: + +@example +case is +when => +end case; +@end example + +All skeleton expansions are accepted by the indentation parser, so +this is a convenient way to insert statements with correct +indentation. + +For named packages, the name is taken from +the word before point, and the package keyword from the word +before that: + +@example +package A_Package +@end example + +expands to: + +@example +package A_Package is +end A_Package; +@end example + +Some expansions prompt for more information, such as +a choice of license. + +@node GNU Free Documentation License, Index, Statement skeletons, Top +@appendix GNU Free Documentation License +@include doclicense.texi + +@node Index, , GNU Free Documentation License, Top +@unnumbered Index + +@printindex fn + +@bye diff --git a/packages/ada-mode/gpr-query.el b/packages/ada-mode/gpr-query.el index 7fe7c0e02..71761c3ed 100755 --- a/packages/ada-mode/gpr-query.el +++ b/packages/ada-mode/gpr-query.el @@ -31,6 +31,7 @@ ;; M-x gpr-query (require 'ada-mode) ;; for ada-prj-*, some other things +(require 'gnat-core) (require 'cl-lib) (require 'compile) @@ -114,6 +115,7 @@ (defun gpr-query-session-wait (session) "Wait for the current command to complete." (unless (process-live-p (gpr-query--session-process session)) + (gpr-query-show-buffer session) (error "gpr-query process died")) (with-current-buffer (gpr-query--session-buffer session) @@ -132,6 +134,7 @@ (setq wait-count (1+ wait-count))) (if (process-live-p process) (message (concat "running gpr_query ... done")) + (gpr-query-show-buffer session) (error "gpr_query process died")) ))) @@ -147,8 +150,10 @@ If WAIT is non-nil, wait for command to complete. Return buffer that holds output." (gpr-require-prj) (let ((session (gpr-query-cached-session))) + ;; always wait for previous command to complete; also checks for + ;; dead process. + (gpr-query-session-wait session) (with-current-buffer (gpr-query--session-buffer session) - ;; FIXME: Check prev command complete (might not have waited); look for prompt at EOB (erase-buffer) (process-send-string (gpr-query--session-process session) (concat cmd "\n")) @@ -170,10 +175,10 @@ Return buffer that holds output." (message "Killed %d sessions" count) )) -(defun gpr-query-show-buffer () - "Show gpr-query buffer for current project." +(defun gpr-query-show-buffer (&optional session) + "For `ada-show-xref-tool-buffer'; show gpr-query buffer for current project." (interactive) - (pop-to-buffer (gpr-query--session-buffer (gpr-query-cached-session)))) + (pop-to-buffer (gpr-query--session-buffer (or session (gpr-query-cached-session))))) ;;;;; utils @@ -440,7 +445,8 @@ Enable mode if ARG is positive" (cond ((looking-at gpr-query-ident-file-type-regexp) ;; process line - (let* ((found-file (match-string 1)) + ;; 'expand-file-name' converts Windows directory separators to normal Emacs + (let* ((found-file (expand-file-name (match-string 1))) (found-line (string-to-number (match-string 2))) (found-col (string-to-number (match-string 3))) (found-type (match-string 4)) @@ -544,6 +550,7 @@ Enable mode if ARG is positive" (setq ada-make-package-body 'ada-gnat-make-package-body) (add-hook 'ada-syntax-propertize-hook 'gnatprep-syntax-propertize) + (add-hook 'ada-syntax-propertize-hook 'ada-gnat-syntax-propertize) ;; must be after indentation engine setup, because that resets the ;; indent function list. @@ -567,6 +574,7 @@ Enable mode if ARG is positive" (setq ada-make-package-body nil) (setq ada-syntax-propertize-hook (delq 'gnatprep-syntax-propertize ada-syntax-propertize-hook)) + (setq ada-syntax-propertize-hook (delq 'ada-gnat-syntax-propertize ada-syntax-propertize-hook)) (setq ada-mode-hook (delq 'ada-gpr-query-setup ada-mode-hook)) (setq ada-xref-other-function nil) diff --git a/packages/wisi/NEWS b/packages/wisi/NEWS index a1da0cf37..9aa593854 100755 --- a/packages/wisi/NEWS +++ b/packages/wisi/NEWS @@ -7,6 +7,13 @@ Please send wisi bug reports to bug-gnu-emacs@gnu.org, with 'wisi' in the subject. If possible, use M-x report-emacs-bug. +* wisi 1.0.5 +12 Jul 2014 + +** wisi-parse-max-parallel-current - new variable for debugging slow parsing issues + +** wisi-set-end - new algorithm giving significant speedup + * wisi 1.0.4 19 Apr 2014 diff --git a/packages/wisi/wisi-parse.el b/packages/wisi/wisi-parse.el index 906d19b04..bd7ce7eec 100755 --- a/packages/wisi/wisi-parse.el +++ b/packages/wisi/wisi-parse.el @@ -75,6 +75,10 @@ If a file needs more than this, it's probably an indication that the grammar is excessively redundant.") +(defvar wisi-parse-max-parallel-current (cons 0 0) + "Cons (count . point); Maximum number of parallel parsers used in most recent parse, +point at which that max was spawned.") + (defvar wisi-debug 0 "wisi debug mode: 0 : normal - ignore parse errors, for indenting new code @@ -107,6 +111,8 @@ the grammar is excessively redundant.") (token (funcall lexer)) some-pending) + (setq wisi-parse-max-parallel-current (cons 0 0)) + (aset (wisi-parser-state-stack (aref parser-states 0)) 0 0) ;; Initial state (while (not (eq active 'accept)) @@ -144,6 +150,8 @@ the grammar is excessively redundant.") ))) ) (setq active-parser-count (1+ active-parser-count)) + (when (> active-parser-count (car wisi-parse-max-parallel-current)) + (setq wisi-parse-max-parallel-current (cons active-parser-count (point)))) (setf (wisi-parser-state-label result) j) (aset parser-states j result)) (when (> wisi-debug 1) diff --git a/packages/wisi/wisi.el b/packages/wisi/wisi.el index 02a2b6ecd..d4cd8e6df 100755 --- a/packages/wisi/wisi.el +++ b/packages/wisi/wisi.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2012 - 2014 Free Software Foundation, Inc. ;; ;; Author: Stephen Leake -;; Version: 1.0.4 +;; Version: 1.0.5 ;; package-requires: ((cl-lib "0.4") (emacs "24.2")) ;; URL: http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html ;; @@ -333,12 +333,16 @@ wisi-forward-token, but does not look up symbol." (defvar-local wisi-change-need-invalidate nil) +(defvar wisi-end-caches nil + "List of buffer positions of caches in current statement that need wisi-cache-end set.") + (defun wisi-invalidate-cache() "Invalidate the wisi token cache for the current buffer. Also invalidate the Emacs syntax cache." (interactive) (setq wisi-cache-max 0) (setq wisi-parse-try t) + (setq wisi-end-caches nil) (syntax-ppss-flush-cache (point-min)) (with-silent-modifications (remove-text-properties (point-min) (point-max) '(wisi-cache)))) @@ -527,31 +531,29 @@ Point must be at cache." ;;;; parse actions -(defun wisi-set-end (tokens end-mark) - "Set END-MARK on all unset caches in TOKENS." - (let ((tokens-t tokens)) - (while tokens-t - (let* ((token (pop tokens-t)) - (region (cddr token)) - cache) - (when region - (goto-char (car region)) - (setq cache (wisi-get-cache (car region))) - (when (not cache) - ;; token is non-terminal; first terminal doesn't have cache. - (setq cache (wisi-forward-cache))) - (while (and cache - (< (point) (cdr region))) - (if (not (wisi-cache-end cache)) - (setf (wisi-cache-end cache) end-mark) - (goto-char (wisi-cache-end cache)) - ) - (setq cache (wisi-forward-cache)) - )) - )) - )) +(defun wisi-set-end (start-mark end-mark) + "Set END-MARK on all caches in `wisi-end-caches' in range START-MARK END-MARK, +delete from `wisi-end-caches'." + (let ((i 0) + pos cache) + (while (< i (length wisi-end-caches)) + (setq pos (nth i wisi-end-caches)) + (setq cache (wisi-get-cache pos)) + + (if (and (>= pos start-mark) + (< pos end-mark)) + (progn + (setf (wisi-cache-end cache) end-mark) + (setq wisi-end-caches (delq pos wisi-end-caches))) + + ;; else not in range + (setq i (1+ i))) + ))) + +(defvar wisi-tokens nil) +;; keep byte-compiler happy; `wisi-tokens' is bound in action created +;; by wisi-semantic-action -(defvar wisi-tokens nil);; keep byte-compiler happy; `wisi-tokens' is bound in action created by wisi-semantic-action (defun wisi-statement-action (&rest pairs) "Cache information in text properties of tokens. Intended as a grammar non-terminal action. @@ -618,22 +620,27 @@ that token. Use in a grammar action as: (1+ (car region)) 'wisi-cache (wisi-cache-create - :nonterm $nterm;; $nterm defined in wisi-semantic-action - :token token - :last (- (cdr region) (car region)) - :class (or override-start class) - :containing first-keyword-mark) - ))) + :nonterm $nterm;; $nterm defined in wisi-semantic-action + :token token + :last (- (cdr region) (car region)) + :class (or override-start class) + :containing first-keyword-mark) + )) + (if wisi-end-caches + (push (car region) wisi-end-caches) + (setq wisi-end-caches (list (car region))) + )) (when first-item (setq first-item nil) (when (or override-start + ;; FIXME: why block-middle here? (memq class '(block-middle block-start statement-start))) (setq override-start nil) (setq first-keyword-mark mark))) (when (eq class 'statement-end) - (wisi-set-end wisi-tokens (copy-marker (1+ (car region))))) + (wisi-set-end (1- first-keyword-mark) (copy-marker (1+ (car region))))) ) ;; region is nil when a production is empty; if the first