diff --git a/corpus/tasking.txt b/corpus/tasking.txt index 9fec834..81038ff 100644 --- a/corpus/tasking.txt +++ b/corpus/tasking.txt @@ -140,3 +140,62 @@ end P; (identifier))))) (name (identifier)))))) + +================================================================================ +Task types +================================================================================ + +package body P is + task type T1; + task type T is + entry E (A : Integer); + end T; + task type T2 is new T with + entry E2; + end T2; +end; + +-------------------------------------------------------------------------------- + +(compilation + (compilation_unit + (proper_body + (package_body + (name + (identifier)) + (non_empty_declarative_part + (declarative_item_pragma + (type_declaration + (full_type_declaration + (task_type_declaration + (identifier))))) + (declarative_item_pragma + (type_declaration + (full_type_declaration + (task_type_declaration + (identifier) + (task_definition + (task_item + (entry_declaration + (identifier) + (formal_part + (parameter_specification_list + (parameter_specification + (defining_identifier_list + (identifier)) + (name + (identifier))))))) + (identifier)))))) + (declarative_item_pragma + (type_declaration + (full_type_declaration + (task_type_declaration + (identifier) + (interface_list + (name + (identifier))) + (task_definition + (task_item + (entry_declaration + (identifier))) + (identifier))))))))))) diff --git a/grammar.js b/grammar.js index 14d9bcd..8a01dd3 100644 --- a/grammar.js +++ b/grammar.js @@ -763,7 +763,7 @@ module.exports = grammar({ optional($.aspect_specification), ';', ), -// $.task_type_declaration, + $.task_type_declaration, // $.protected_type_declaration, ), private_type_declaration: $ => seq( @@ -1179,6 +1179,23 @@ module.exports = grammar({ optional($.aspect_specification), ';', ), + task_type_declaration: $ => seq( + reservedWord('task'), + reservedWord('type'), + $.identifier, + optional($.known_discriminant_part), + optional($.aspect_specification), + optional(seq( + reservedWord('is'), + optional(seq( + reservedWord('new'), + $.interface_list, + reservedWord('with'), + )), + $.task_definition, + )), + ';', + ), protected_body_stub: $ => seq( reservedWord('protected'), reservedWord('body'), diff --git a/package.json b/package.json index 5520881..b5f5e53 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "scripts": { "generate": "tree-sitter generate", "test": "tree-sitter generate && time tree-sitter test", + "testquick": "time tree-sitter test", "update-test": "tree-sitter test --update" }, "main": "bindings/node"