aboutsummaryrefslogtreecommitdiff
path: root/tools/tree-sitter/test/corpus/generic_arguments.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tools/tree-sitter/test/corpus/generic_arguments.txt')
-rw-r--r--tools/tree-sitter/test/corpus/generic_arguments.txt167
1 files changed, 167 insertions, 0 deletions
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)))))))