Allow empty statements of declarations in gnatprep
All runtime files and all the code from Deep Blue Capital are now parsed without errors.
This commit is contained in:
parent
faa006e5fd
commit
d625712fe1
12
grammar.js
12
grammar.js
|
|
@ -2215,16 +2215,16 @@ module.exports = grammar({
|
|||
reservedWord('#if'),
|
||||
field('condition', $.expression),
|
||||
reservedWord('then'),
|
||||
$.non_empty_declarative_part,
|
||||
repeat($._declarative_item_pragma),
|
||||
repeat(seq(
|
||||
reservedWord('#elsif'),
|
||||
field('condition', $.expression),
|
||||
reservedWord('then'),
|
||||
$.non_empty_declarative_part,
|
||||
repeat($._declarative_item_pragma),
|
||||
)),
|
||||
optional(seq(
|
||||
reservedWord('#else'),
|
||||
$.non_empty_declarative_part,
|
||||
repeat($._declarative_item_pragma),
|
||||
)),
|
||||
reservedWord('#end'),
|
||||
reservedWord('if'),
|
||||
|
|
@ -2234,16 +2234,16 @@ module.exports = grammar({
|
|||
reservedWord('#if'),
|
||||
field('condition', $.expression),
|
||||
reservedWord('then'),
|
||||
field('statements', $._sequence_of_statements),
|
||||
repeat($._statement), // can be empty
|
||||
repeat(seq(
|
||||
reservedWord('#elsif'),
|
||||
field('condition', $.expression),
|
||||
reservedWord('then'),
|
||||
field('statements', $._sequence_of_statements),
|
||||
repeat($._statement), // can be empty
|
||||
)),
|
||||
optional(seq(
|
||||
reservedWord('#else'),
|
||||
field('else_statements', $._sequence_of_statements),
|
||||
repeat($._statement), // can be empty
|
||||
)),
|
||||
reservedWord('#end'),
|
||||
reservedWord('if'),
|
||||
|
|
|
|||
|
|
@ -13820,8 +13820,11 @@
|
|||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "non_empty_declarative_part"
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_declarative_item_pragma"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
|
|
@ -13869,8 +13872,11 @@
|
|||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "non_empty_declarative_part"
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_declarative_item_pragma"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -13898,8 +13904,11 @@
|
|||
"value": "#else"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "non_empty_declarative_part"
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_declarative_item_pragma"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -13990,11 +13999,10 @@
|
|||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "statements",
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_sequence_of_statements"
|
||||
"name": "_statement"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -14043,11 +14051,10 @@
|
|||
"value": "then"
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "statements",
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_sequence_of_statements"
|
||||
"name": "_statement"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -14076,11 +14083,10 @@
|
|||
"value": "#else"
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "else_statements",
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_sequence_of_statements"
|
||||
"name": "_statement"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -6105,10 +6105,134 @@
|
|||
},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "non_empty_declarative_part",
|
||||
"type": "at_clause",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "attribute_definition_clause",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "body_stub",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "enumeration_representation_clause",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "exception_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "exception_renaming_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "expression_function_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "full_type_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "generic_instantiation",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "generic_package_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "generic_renaming_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "generic_subprogram_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gnatprep_declarative_if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "incomplete_type_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "null_procedure_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "number_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "object_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "object_renaming_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "package_body",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "package_renaming_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "package_specification",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "pragma_g",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "private_extension_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "private_type_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "protected_body",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "record_representation_clause",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "subprogram_body",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "subprogram_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "subprogram_renaming_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "subtype_declaration",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "task_body",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "use_clause",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
|
|
@ -6127,211 +6251,109 @@
|
|||
"named": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"else_statements": {
|
||||
"multiple": true,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "abort_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "accept_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "assignment_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "asynchronous_select",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "block_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "case_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "conditional_entry_call",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_relative_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_until_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "exit_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "extended_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gnatprep_if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "goto_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "loop_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "null_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "pragma_g",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "procedure_call_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "raise_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "requeue_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "selective_accept",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "simple_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "timed_entry_call",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"statements": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "abort_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "accept_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "assignment_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "asynchronous_select",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "block_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "case_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "conditional_entry_call",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_relative_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_until_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "exit_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "extended_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gnatprep_if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "goto_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "loop_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "null_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "pragma_g",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "procedure_call_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "raise_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "requeue_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "selective_accept",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "simple_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "timed_entry_call",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "abort_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "accept_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "assignment_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "asynchronous_select",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "block_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "case_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "conditional_entry_call",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_relative_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "delay_until_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "exit_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "extended_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gnatprep_if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "goto_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "if_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "loop_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "null_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "pragma_g",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "procedure_call_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "raise_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "requeue_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "selective_accept",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "simple_return_statement",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "timed_entry_call",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
|||
79538
src/parser.c
79538
src/parser.c
File diff suppressed because it is too large
Load Diff
|
|
@ -23,13 +23,12 @@ end;
|
|||
(term
|
||||
(factor_not
|
||||
(identifier))))
|
||||
(non_empty_declarative_part
|
||||
(pragma_g
|
||||
(identifier)
|
||||
(pragma_argument_association
|
||||
(expression
|
||||
(term
|
||||
(identifier))))))))
|
||||
(pragma_g
|
||||
(identifier)
|
||||
(pragma_argument_association
|
||||
(expression
|
||||
(term
|
||||
(identifier)))))))
|
||||
(handled_sequence_of_statements
|
||||
(null_statement)))))
|
||||
|
||||
|
|
@ -53,3 +52,32 @@ end;
|
|||
(expression
|
||||
(term
|
||||
(gnatprep_identifier)))))))
|
||||
|
||||
================================================================================
|
||||
Preprocess empty (GNAT)
|
||||
================================================================================
|
||||
|
||||
procedure P is
|
||||
#if not CHECKING_MODE then
|
||||
-- pragma Suppress (Access_Checks);
|
||||
#end if;
|
||||
begin
|
||||
null;
|
||||
end;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(compilation
|
||||
(compilation_unit
|
||||
(subprogram_body
|
||||
(procedure_specification
|
||||
(identifier))
|
||||
(non_empty_declarative_part
|
||||
(gnatprep_declarative_if_statement
|
||||
(expression
|
||||
(term
|
||||
(factor_not
|
||||
(identifier))))
|
||||
(comment)))
|
||||
(handled_sequence_of_statements
|
||||
(null_statement)))))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user