diff options
Diffstat (limited to 'tools/tree-sitter/test/corpus')
32 files changed, 1966 insertions, 0 deletions
diff --git a/tools/tree-sitter/test/corpus/aliased_type_constant.txt b/tools/tree-sitter/test/corpus/aliased_type_constant.txt new file mode 100644 index 0000000..589c756 --- /dev/null +++ b/tools/tree-sitter/test/corpus/aliased_type_constant.txt @@ -0,0 +1,50 @@ +================== +aliased_type_constant +================== + +module + +type + Handle = Int + +var + limit: const Int := 1 + +proc check() +begin + assert(limit = 1) +return + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (identifier))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (integer)))) + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (integer)))))) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/assign_record_to_base.txt b/tools/tree-sitter/test/corpus/assign_record_to_base.txt new file mode 100644 index 0000000..6488889 --- /dev/null +++ b/tools/tree-sitter/test/corpus/assign_record_to_base.txt @@ -0,0 +1,61 @@ +================== +assign_record_to_base +================== + +program() +type + B = record + x: Int + end + R = record(B) + y: Int + end + +var + x: ^B := nil + y: ^R := nil + +begin + x := y +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)) + (record_type + (identifier) + (field_declaration + (identifier_definition + (identifier)) + (identifier))))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)) + (literal + (nil))) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)) + (literal + (nil)))) + (assignment_statement + (identifier) + (identifier)))) diff --git a/tools/tree-sitter/test/corpus/compile_time_array_length.txt b/tools/tree-sitter/test/corpus/compile_time_array_length.txt new file mode 100644 index 0000000..0e250f2 --- /dev/null +++ b/tools/tree-sitter/test/corpus/compile_time_array_length.txt @@ -0,0 +1,39 @@ +================== +compile_time_array_length +================== + +module + +var + source: const [3]Int := [1, 2, 3] + target: Word := source.length + +end. + +--- + +(source_file + (module_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (array_type + (literal + (integer)) + (identifier))) + (array_constructor + (literal + (integer)) + (literal + (integer)) + (literal + (integer)))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (field_expression + (identifier) + (identifier)))))) diff --git a/tools/tree-sitter/test/corpus/const_alias.txt b/tools/tree-sitter/test/corpus/const_alias.txt new file mode 100644 index 0000000..ae19588 --- /dev/null +++ b/tools/tree-sitter/test/corpus/const_alias.txt @@ -0,0 +1,45 @@ +================== +const_alias +================== + +module + +type + CI = const Int + CCI = const CI + +var + x: CCI := 8 + y: const CI := 9 + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (const_type + (identifier))) + (type_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (literal + (integer))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (integer)))))) diff --git a/tools/tree-sitter/test/corpus/const_element_array.txt b/tools/tree-sitter/test/corpus/const_element_array.txt new file mode 100644 index 0000000..e43c2f1 --- /dev/null +++ b/tools/tree-sitter/test/corpus/const_element_array.txt @@ -0,0 +1,47 @@ +================== +const_element_array +================== + +module + +type + CI = const Int + +var + a: [3]CI := [1, 2, 3] + b: [3]CI + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (array_type + (literal + (integer)) + (identifier)) + (array_constructor + (literal + (integer)) + (literal + (integer)) + (literal + (integer)))) + (variable_declaration + (identifier_definition + (identifier)) + (array_type + (literal + (integer)) + (identifier)))))) diff --git a/tools/tree-sitter/test/corpus/const_extern.txt b/tools/tree-sitter/test/corpus/const_extern.txt new file mode 100644 index 0000000..0fb71bc --- /dev/null +++ b/tools/tree-sitter/test/corpus/const_extern.txt @@ -0,0 +1,21 @@ +================== +const_extern +================== + +module + +var + errno_like: const Int := extern + +end. + +--- + +(source_file + (module_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)))))) diff --git a/tools/tree-sitter/test/corpus/const_negation.txt b/tools/tree-sitter/test/corpus/const_negation.txt new file mode 100644 index 0000000..89e801c --- /dev/null +++ b/tools/tree-sitter/test/corpus/const_negation.txt @@ -0,0 +1,49 @@ +================== +const_negation +================== + +program() +var + x: const Int := -5 + y: const Int := -x + +begin + assert(x = -5); + assert(y = 5); +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (unary_expression + (literal + (integer)))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (unary_expression + (identifier)))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (unary_expression + (literal + (integer)))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (integer))))))) diff --git a/tools/tree-sitter/test/corpus/const_var_chain.txt b/tools/tree-sitter/test/corpus/const_var_chain.txt new file mode 100644 index 0000000..fca40c9 --- /dev/null +++ b/tools/tree-sitter/test/corpus/const_var_chain.txt @@ -0,0 +1,37 @@ +================== +const_var_chain +================== + +program() +var + x: const Int := 42 + y: Int := x + +begin + assert(y = 42) +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (integer))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (identifier))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (integer))))))) diff --git a/tools/tree-sitter/test/corpus/double_literals.txt b/tools/tree-sitter/test/corpus/double_literals.txt new file mode 100644 index 0000000..9dc7cc1 --- /dev/null +++ b/tools/tree-sitter/test/corpus/double_literals.txt @@ -0,0 +1,56 @@ +================== +double_literals +================== + +module + +proc f() +var + x: const Double := 3.14 + y: const Double := 1e10 + z: const Double := 4.567e8 + t: const Double := 2.5E-3 +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))))) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/empty_proc.txt b/tools/tree-sitter/test/corpus/empty_proc.txt new file mode 100644 index 0000000..338c2fb --- /dev/null +++ b/tools/tree-sitter/test/corpus/empty_proc.txt @@ -0,0 +1,21 @@ +================== +empty_proc +================== + +module + +proc f() +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/empty_proc_type_expression.txt b/tools/tree-sitter/test/corpus/empty_proc_type_expression.txt new file mode 100644 index 0000000..3d259a4 --- /dev/null +++ b/tools/tree-sitter/test/corpus/empty_proc_type_expression.txt @@ -0,0 +1,21 @@ +================== +empty_proc_type_expression +================== + +module + +type + P = proc() + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (procedure_type + (parameter_list)))))) diff --git a/tools/tree-sitter/test/corpus/empty_statements_in_a_row.txt b/tools/tree-sitter/test/corpus/empty_statements_in_a_row.txt new file mode 100644 index 0000000..98700ae --- /dev/null +++ b/tools/tree-sitter/test/corpus/empty_statements_in_a_row.txt @@ -0,0 +1,24 @@ +================== +empty_statements_in_a_row +================== + +module + +proc f() +begin + ; +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/generic_alias.txt b/tools/tree-sitter/test/corpus/generic_alias.txt new file mode 100644 index 0000000..54a8ea2 --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_alias.txt @@ -0,0 +1,132 @@ +================== +generic_alias +================== + +program() +type + File = record + fd: Int + end + + Node#[T] = record + next: ^Node#[T]; + value: ^T + end + + Ref#[T] = ^T + + Boxed#[V] = record + inner: ^Node#[V] + end + +var + chain: Node#[File] + aliased: Ref#[File] + raw: ^File + boxed: Boxed#[File] + +begin + chain.next := nil; + aliased := raw; + raw := aliased; + boxed.inner := @chain +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)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier))))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))))) + (type_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (pointer_type + (identifier))) + (type_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier)))))))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier))))) + (assignment_statement + (field_expression + (identifier) + (identifier)) + (literal + (nil))) + (assignment_statement + (identifier) + (identifier)) + (assignment_statement + (identifier) + (identifier)) + (assignment_statement + (field_expression + (identifier) + (identifier)) + (unary_expression + (identifier))))) 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))))))) diff --git a/tools/tree-sitter/test/corpus/generic_base_chain.txt b/tools/tree-sitter/test/corpus/generic_base_chain.txt new file mode 100644 index 0000000..770b7db --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_base_chain.txt @@ -0,0 +1,144 @@ +================== +generic_base_chain +================== + +program() +type + File = record + fd: Int + end + + Map#[K, V] = record + key: ^K; + value: ^V + end + + Cache#[K, V] = record(Map#[Word8, V]) + newest: ^K + end + +var + store: Cache#[Int, File] + byte_key: ^Word8 + upcast: ^Map#[Word8, File] + +proc put#[K2, V2](target: ^Map#[K2, V2]; key: ^K2) +begin + target^.key := key +return + +begin + upcast := @store; + put(@store, byte_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))))) + (type_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier) + (identifier)) + (record_type + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier) + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier) + (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))))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (procedure_body + (block + (assignment_statement + (field_expression + (dereference_expression + (identifier)) + (identifier)) + (identifier))) + (return_clause))) + (assignment_statement + (identifier) + (unary_expression + (identifier))) + (call_expression + (identifier) + (argument_list + (unary_expression + (identifier)) + (identifier))))) diff --git a/tools/tree-sitter/test/corpus/generic_const_inference.txt b/tools/tree-sitter/test/corpus/generic_const_inference.txt new file mode 100644 index 0000000..e4b5bf9 --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_const_inference.txt @@ -0,0 +1,204 @@ +================== +generic_const_inference +================== + +program() +type + ConstAlias = const ^Word8 + BasePtr = ^Word8 + NestedConst = const BasePtr + +var + slice: []const Word8 + aliased: ConstAlias := nil + nested: NestedConst := nil + direct_const: const ^Word8 := nil + +proc write#[T](fd: Int; buf: ^T; count: Int) -> Int +return 0 + +proc write_const#[T](fd: Int; buf: ^const T; count: Int) -> Int +return 0 + +begin + write(1, slice.ptr, cast(slice.length: Int)); + write(1, aliased, 0); + write(1, nested, 0); + write(1, direct_const, 0); + write_const(1, slice.ptr, cast(slice.length: Int)); + write_const(1, aliased, 0); + write_const(1, nested, 0); + write_const(1, direct_const, 0) +end. + +--- + +(source_file + (program_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (const_type + (pointer_type + (identifier)))) + (type_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))) + (type_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (slice_type + (const_type + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (literal + (nil))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (literal + (nil))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (pointer_type + (identifier))) + (literal + (nil)))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier)) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier))) + (field_declaration + (identifier_definition + (identifier)) + (identifier))) + (identifier) + (procedure_body + (return_clause + (literal + (integer))))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier)) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (const_type + (identifier)))) + (field_declaration + (identifier_definition + (identifier)) + (identifier))) + (identifier) + (procedure_body + (return_clause + (literal + (integer))))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (field_expression + (identifier) + (identifier)) + (cast_expression + (field_expression + (identifier) + (identifier)) + (identifier)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (field_expression + (identifier) + (identifier)) + (cast_expression + (field_expression + (identifier) + (identifier)) + (identifier)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))) + (call_expression + (identifier) + (argument_list + (literal + (integer)) + (identifier) + (literal + (integer)))))) diff --git a/tools/tree-sitter/test/corpus/generic_inference.txt b/tools/tree-sitter/test/corpus/generic_inference.txt new file mode 100644 index 0000000..ccac55c --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_inference.txt @@ -0,0 +1,157 @@ +================== +generic_inference +================== + +program() +type + File = record + fd: Int + end + + Cell#[T] = record + held: ^T + end + +var + files: Cell#[File] + bytes: Cell#[Word8] + f: File + b: Word8 + +proc store#[T](target: ^Cell#[T]; value: ^T) + target^.held := value +return + +proc relay#[T](target: ^Cell#[T]; value: ^T) + store(target, value) +return + +begin + store(@files, @f); + relay(@bytes, @b); + store(@files, nil) +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)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (generic_type + (identifier) + (type_arguments + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier)) + (variable_declaration + (identifier_definition + (identifier)) + (identifier))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier))))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (procedure_body + (block + (assignment_statement + (field_expression + (dereference_expression + (identifier)) + (identifier)) + (identifier))) + (return_clause))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier))))) + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (procedure_body + (block + (call_expression + (identifier) + (argument_list + (identifier) + (identifier)))) + (return_clause))) + (call_expression + (identifier) + (argument_list + (unary_expression + (identifier)) + (unary_expression + (identifier)))) + (call_expression + (identifier) + (argument_list + (unary_expression + (identifier)) + (unary_expression + (identifier)))) + (call_expression + (identifier) + (argument_list + (unary_expression + (identifier)) + (literal + (nil)))))) diff --git a/tools/tree-sitter/test/corpus/generic_pointee.txt b/tools/tree-sitter/test/corpus/generic_pointee.txt new file mode 100644 index 0000000..55f5a1a --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_pointee.txt @@ -0,0 +1,71 @@ +================== +generic_pointee +================== + +program() + +type + File = record + fd: Int + end + +proc allocate#[T](size: Word) -> ^T +extern + +var + f: ^File + +begin + f := allocate#[File](#size(File)); + assert(f = nil) +end. + +--- + +(source_file + (program_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (identifier))))) + (procedure_declaration + (identifier_definition + (identifier)) + (type_parameters + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier))) + (pointer_type + (identifier))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (assignment_statement + (identifier) + (call_expression + (generic_type + (identifier) + (type_arguments + (identifier))) + (argument_list + (traits_expression + (trait) + (identifier))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (nil))))))) diff --git a/tools/tree-sitter/test/corpus/noreturn_procedure.txt b/tools/tree-sitter/test/corpus/noreturn_procedure.txt new file mode 100644 index 0000000..8f8466b --- /dev/null +++ b/tools/tree-sitter/test/corpus/noreturn_procedure.txt @@ -0,0 +1,23 @@ +================== +noreturn_procedure +================== + +module + +proc exit() #{noreturn} +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (attribute + (identifier)) + (procedure_body + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/opaque_type.txt b/tools/tree-sitter/test/corpus/opaque_type.txt new file mode 100644 index 0000000..7182bb9 --- /dev/null +++ b/tools/tree-sitter/test/corpus/opaque_type.txt @@ -0,0 +1,65 @@ +================== +opaque_type +================== + +program() +type + Handle = extern + Alias = Handle + +var + handle: ^Handle := nil + alias: ^Alias + +proc take(h: ^Handle) -> ^Handle +return h + +begin + alias := take(handle) +end. + +--- + +(source_file + (program_declaration + (type_section + (type_declaration + (identifier_definition + (identifier))) + (type_declaration + (identifier_definition + (identifier)) + (identifier))) + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)) + (literal + (nil))) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (pointer_type + (identifier)) + (procedure_body + (return_clause + (identifier)))) + (assignment_statement + (identifier) + (call_expression + (identifier) + (argument_list + (identifier)))))) diff --git a/tools/tree-sitter/test/corpus/pointer_cast.txt b/tools/tree-sitter/test/corpus/pointer_cast.txt new file mode 100644 index 0000000..63a28ab --- /dev/null +++ b/tools/tree-sitter/test/corpus/pointer_cast.txt @@ -0,0 +1,38 @@ +================== +pointer_cast +================== + +program() +var + c: ^Char := nil + p: Pointer := nil + +begin + p := c; + c := p +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)) + (literal + (nil))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (literal + (nil)))) + (assignment_statement + (identifier) + (identifier)) + (assignment_statement + (identifier) + (identifier)))) diff --git a/tools/tree-sitter/test/corpus/pointer_const_conversion.txt b/tools/tree-sitter/test/corpus/pointer_const_conversion.txt new file mode 100644 index 0000000..f134f00 --- /dev/null +++ b/tools/tree-sitter/test/corpus/pointer_const_conversion.txt @@ -0,0 +1,32 @@ +================== +pointer_const_conversion +================== + +program() +var + x: Int + p: ^const Int + +begin + p := @x +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (identifier)) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (const_type + (identifier))))) + (assignment_statement + (identifier) + (unary_expression + (identifier))))) diff --git a/tools/tree-sitter/test/corpus/pointer_subtraction.txt b/tools/tree-sitter/test/corpus/pointer_subtraction.txt new file mode 100644 index 0000000..3e28de8 --- /dev/null +++ b/tools/tree-sitter/test/corpus/pointer_subtraction.txt @@ -0,0 +1,32 @@ +================== +pointer_subtraction +================== + +module + +proc test(a, b: ^Char) -> Int +return a - b + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (identifier) + (procedure_body + (return_clause + (binary_expression + (identifier) + (identifier))))))) diff --git a/tools/tree-sitter/test/corpus/procedure_forward_reference.txt b/tools/tree-sitter/test/corpus/procedure_forward_reference.txt new file mode 100644 index 0000000..2b8627f --- /dev/null +++ b/tools/tree-sitter/test/corpus/procedure_forward_reference.txt @@ -0,0 +1,40 @@ +================== +procedure_forward_reference +================== + +module + +proc first() -> Int +return second() + 1 + +proc second() -> Int +return 41 + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (identifier) + (procedure_body + (return_clause + (binary_expression + (call_expression + (identifier) + (argument_list)) + (literal + (integer)))))) + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (identifier) + (procedure_body + (return_clause + (literal + (integer))))))) diff --git a/tools/tree-sitter/test/corpus/record_const_base.txt b/tools/tree-sitter/test/corpus/record_const_base.txt new file mode 100644 index 0000000..e6f7cc6 --- /dev/null +++ b/tools/tree-sitter/test/corpus/record_const_base.txt @@ -0,0 +1,76 @@ +================== +record_const_base +================== + +module + +type + B = record + x: Int + end + CB = const B + D = record(CB) + y: Int + end + +proc f() +var + d: D +begin + d.x := 1; + d.y := 2 +return + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (identifier)))) + (type_declaration + (identifier_definition + (identifier)) + (const_type + (identifier))) + (type_declaration + (identifier_definition + (identifier)) + (record_type + (identifier) + (field_declaration + (identifier_definition + (identifier)) + (identifier))))) + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (identifier))) + (assignment_statement + (field_expression + (identifier) + (identifier)) + (literal + (integer))) + (assignment_statement + (field_expression + (identifier) + (identifier)) + (literal + (integer)))) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/self-referencing-record.txt b/tools/tree-sitter/test/corpus/self-referencing-record.txt new file mode 100644 index 0000000..02948f3 --- /dev/null +++ b/tools/tree-sitter/test/corpus/self-referencing-record.txt @@ -0,0 +1,27 @@ +================== +self-referencing-record +================== + +module + +type + R = record + field: ^R + end + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier)) + (record_type + (field_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))))))) diff --git a/tools/tree-sitter/test/corpus/semicolon_parameter_separator.txt b/tools/tree-sitter/test/corpus/semicolon_parameter_separator.txt new file mode 100644 index 0000000..f9c1f14 --- /dev/null +++ b/tools/tree-sitter/test/corpus/semicolon_parameter_separator.txt @@ -0,0 +1,29 @@ +================== +semicolon_parameter_separator +================== + +module + +proc f(a: Int; b: Word) +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list + (field_declaration + (identifier_definition + (identifier)) + (identifier)) + (field_declaration + (identifier_definition + (identifier)) + (identifier))) + (procedure_body + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/single_literals.txt b/tools/tree-sitter/test/corpus/single_literals.txt new file mode 100644 index 0000000..0c7faab --- /dev/null +++ b/tools/tree-sitter/test/corpus/single_literals.txt @@ -0,0 +1,56 @@ +================== +single_literals +================== + +module + +proc f() +var + x: const Single := 3.14f + y: const Single := 1e10f + z: const Single := 4.567e8f + t: const Single := 2.5E-3f +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (float))))) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/slice_index.txt b/tools/tree-sitter/test/corpus/slice_index.txt new file mode 100644 index 0000000..5480038 --- /dev/null +++ b/tools/tree-sitter/test/corpus/slice_index.txt @@ -0,0 +1,58 @@ +================== +slice_index +================== + +module + +proc f() +var + a: []Int + x: Int + p: ^Int +begin + x := a[1]; + a := p[1u to 10u] +return + +end. + +--- + +(source_file + (module_declaration + (procedure_declaration + (identifier_definition + (identifier)) + (parameter_list) + (procedure_body + (block + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (slice_type + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier)) + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (identifier)))) + (assignment_statement + (identifier) + (index_expression + (identifier) + (literal + (integer)))) + (assignment_statement + (identifier) + (slice_expression + (identifier) + (literal + (integer)) + (literal + (integer))))) + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/take_const_address.txt b/tools/tree-sitter/test/corpus/take_const_address.txt new file mode 100644 index 0000000..d84e20f --- /dev/null +++ b/tools/tree-sitter/test/corpus/take_const_address.txt @@ -0,0 +1,35 @@ +================== +take_const_address +================== + +program() +var + x: ^const Int + y: const Int := 1 + +begin + x := @y +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (pointer_type + (const_type + (identifier)))) + (variable_declaration + (identifier_definition + (identifier)) + (const_type + (identifier)) + (literal + (integer)))) + (assignment_statement + (identifier) + (unary_expression + (identifier))))) diff --git a/tools/tree-sitter/test/corpus/trailing_text.txt b/tools/tree-sitter/test/corpus/trailing_text.txt new file mode 100644 index 0000000..bb39c86 --- /dev/null +++ b/tools/tree-sitter/test/corpus/trailing_text.txt @@ -0,0 +1,16 @@ +================== +trailing_text +================== + +module + +end. + +Everything after the module terminator is ignored and is never scanned, so it +does not have to be Elna: proc 1 2 3 "unterminated + +--- + +(source_file + (module_declaration) + (trailing_content)) diff --git a/tools/tree-sitter/test/corpus/traits_size.txt b/tools/tree-sitter/test/corpus/traits_size.txt new file mode 100644 index 0000000..f566e0c --- /dev/null +++ b/tools/tree-sitter/test/corpus/traits_size.txt @@ -0,0 +1,93 @@ +================== +traits_size +================== + +program() +var + i: Int := 1 + s: Int := cast(#size(Int): Int) + a: [10]Int + as: Int := cast(#size([10]Int): Int) + p: Int := cast(#size(Pointer): Int) + +begin + assert(s > 0); + assert(as = 10 * cast(#size(Int): Int)); + assert(p > 0) +end. + +--- + +(source_file + (program_declaration + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (literal + (integer))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (cast_expression + (traits_expression + (trait) + (identifier)) + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (array_type + (literal + (integer)) + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (cast_expression + (traits_expression + (trait) + (array_type + (literal + (integer)) + (identifier))) + (identifier))) + (variable_declaration + (identifier_definition + (identifier)) + (identifier) + (cast_expression + (traits_expression + (trait) + (identifier)) + (identifier)))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (integer))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (binary_expression + (literal + (integer)) + (cast_expression + (traits_expression + (trait) + (identifier)) + (identifier)))))) + (call_expression + (identifier) + (argument_list + (binary_expression + (identifier) + (literal + (integer))))))) |
