From a9f6cfb6a8b6d38057faca067c015da1f72cf62d Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Mon, 5 Oct 2026 00:26:05 +0200 Subject: Add a treesitter grammar --- .../tree-sitter/test/corpus/generic_arguments.txt | 167 +++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 tools/tree-sitter/test/corpus/generic_arguments.txt (limited to 'tools/tree-sitter/test/corpus/generic_arguments.txt') diff --git a/tools/tree-sitter/test/corpus/generic_arguments.txt b/tools/tree-sitter/test/corpus/generic_arguments.txt new file mode 100644 index 0000000..3f325de --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_arguments.txt @@ -0,0 +1,167 @@ +================== +generic_arguments +================== + +program() +type + File = record + fd: Int + end + + Pair#[K, V] = record + key: ^K; + value: ^V + end + +var + entry: Pair#[File, Word8] + +proc allocate#[T](size: Word) -> ^T +extern + +proc first#[K, V](entry_ptr: ^Pair#[K, V]) -> ^K +return entry_ptr^.key + +begin + entry.key := allocate#[File](#size(File)); + assert(#size(Pair#[File, Word8]) = #size(Pointer) * 2u); + assert(#offset(Pair#[File, Word8], value) = #size(Pointer)); + assert(first#[File, Word8](@entry) = entry.key) +end. + +--- + +(source_file + (program_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (identifier)))) + (type_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier) + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier))))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier))) + (pointer_type + (identifier))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier) + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier)))))) + (pointer_type + (identifier)) + (procedure_body + (return_clause + (field_expression + (dereference_expression + (identifier)) + (identifier))))) + (assignment_statement + (field_expression + (identifier) + (identifier)) + (call_expression + (generic_type + (identifier) + (type_arguments + (identifier))) + (argument_list + (traits_expression + (trait) + (identifier))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (traits_expression + (trait) + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier)))) + (binary_expression + (traits_expression + (trait) + (identifier)) + (literal + (integer)))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (traits_expression + (trait) + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier))) + (identifier)) + (traits_expression + (trait) + (identifier))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (call_expression + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier))) + (argument_list + (unary_expression + (identifier)))) + (field_expression + (identifier) + (identifier))))))) -- cgit v1.2.3