From 134d3ac4caff6d87c79b0892e57073594cb0064c Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 9 Oct 2026 14:43:11 +0200 Subject: Remove Pointer and nil support --- tools/tree-sitter/grammar.js | 12 +++-- tools/tree-sitter/queries/elna/highlights.scm | 7 ++- tools/tree-sitter/queries/elna/locals.scm | 2 +- .../test/corpus/assign_record_to_base.txt | 16 +++---- tools/tree-sitter/test/corpus/block_variables.txt | 25 ++++++++++ tools/tree-sitter/test/corpus/comments.txt | 4 +- tools/tree-sitter/test/corpus/generic_alias.txt | 38 +++++++++------- .../tree-sitter/test/corpus/generic_arguments.txt | 38 ++++++++-------- .../tree-sitter/test/corpus/generic_base_chain.txt | 30 ++++++------ .../test/corpus/generic_const_inference.txt | 50 +++++++++++--------- tools/tree-sitter/test/corpus/generic_export.txt | 53 ++++++++++++++++++++++ .../tree-sitter/test/corpus/generic_inference.txt | 39 ++++++++-------- tools/tree-sitter/test/corpus/generic_pointee.txt | 22 +++------ tools/tree-sitter/test/corpus/opaque_type.txt | 8 ++-- tools/tree-sitter/test/corpus/pointer_cast.txt | 27 ++++++----- .../test/corpus/pointer_subtraction.txt | 4 +- .../tree-sitter/test/corpus/record_const_base.txt | 4 +- .../test/corpus/self-referencing-record.txt | 2 +- .../test/corpus/semicolon_parameter_separator.txt | 4 +- tools/tree-sitter/test/corpus/traits_size.txt | 5 +- 20 files changed, 239 insertions(+), 151 deletions(-) create mode 100644 tools/tree-sitter/test/corpus/block_variables.txt create mode 100644 tools/tree-sitter/test/corpus/generic_export.txt (limited to 'tools') diff --git a/tools/tree-sitter/grammar.js b/tools/tree-sitter/grammar.js index b854e82..9e62a78 100644 --- a/tools/tree-sitter/grammar.js +++ b/tools/tree-sitter/grammar.js @@ -102,13 +102,13 @@ module.exports = grammar({ type_declaration: $ => seq( field('name', $.identifier_definition), - optional(field('type_parameters', $.type_parameters)), '=', field('type', choice($._type_expression, 'extern')), ), identifier_definition: $ => seq( field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), optional(field('exported', '*')), repeat($.attribute), ), @@ -149,7 +149,6 @@ module.exports = grammar({ procedure_declaration: $ => seq( 'proc', field('name', $.identifier_definition), - optional(field('type_parameters', $.type_parameters)), field('parameters', $.parameter_list), repeat($.attribute), optional(seq('->', field('return_type', $._type_expression))), @@ -169,8 +168,13 @@ module.exports = grammar({ ')', ), + field_identifier: $ => seq( + field('name', $.identifier), + repeat($.attribute), + ), + field_declaration: $ => seq( - field('names', commaSep1($.identifier_definition)), + field('names', commaSep1($.field_identifier)), ':', field('type', $._type_expression), ), @@ -519,11 +523,9 @@ module.exports = grammar({ $.byte, $.character, $.boolean, - $.nil, ), boolean: $ => choice('true', 'false'), - nil: $ => 'nil', integer: $ => token(choice( seq(/0[xX][0-9a-fA-F]+/, optional(choice('u8', 'u16', 'u32', 'u64'))), diff --git a/tools/tree-sitter/queries/elna/highlights.scm b/tools/tree-sitter/queries/elna/highlights.scm index 4cb3f7c..d9acf8d 100644 --- a/tools/tree-sitter/queries/elna/highlights.scm +++ b/tools/tree-sitter/queries/elna/highlights.scm @@ -52,7 +52,6 @@ (integer) @number (float) @number.float (boolean) @boolean -(nil) @constant.builtin (string) @string (character) @character @@ -73,7 +72,7 @@ "Int8" "Int16" "Int32" "Int64" "Word8" "Word16" "Word32" "Word64" "Single" "Double" - "Char" "Pointer" "Bool")) + "Char" "Bool")) ; Declarations and Definitions (type_declaration @@ -112,12 +111,12 @@ exported: "*" @punctuation.special) (field_declaration - names: (identifier_definition + names: (field_identifier name: (identifier) @variable.member)) (parameter_list (field_declaration - names: (identifier_definition + names: (field_identifier name: (identifier) @variable.parameter))) (variable_declaration diff --git a/tools/tree-sitter/queries/elna/locals.scm b/tools/tree-sitter/queries/elna/locals.scm index 1e9bb70..ad0af7e 100644 --- a/tools/tree-sitter/queries/elna/locals.scm +++ b/tools/tree-sitter/queries/elna/locals.scm @@ -19,7 +19,7 @@ (parameter_list (field_declaration - names: (identifier_definition + names: (field_identifier name: (identifier) @local.definition))) (for_statement diff --git a/tools/tree-sitter/test/corpus/assign_record_to_base.txt b/tools/tree-sitter/test/corpus/assign_record_to_base.txt index 6488889..f0d44c6 100644 --- a/tools/tree-sitter/test/corpus/assign_record_to_base.txt +++ b/tools/tree-sitter/test/corpus/assign_record_to_base.txt @@ -12,8 +12,8 @@ type end var - x: ^B := nil - y: ^R := nil + x: ^B + y: ^R begin x := y @@ -29,7 +29,7 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration @@ -38,7 +38,7 @@ end. (record_type (identifier) (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))))) (var_section @@ -46,16 +46,12 @@ end. (identifier_definition (identifier)) (pointer_type - (identifier)) - (literal - (nil))) + (identifier))) (variable_declaration (identifier_definition (identifier)) (pointer_type - (identifier)) - (literal - (nil)))) + (identifier)))) (assignment_statement (identifier) (identifier)))) diff --git a/tools/tree-sitter/test/corpus/block_variables.txt b/tools/tree-sitter/test/corpus/block_variables.txt new file mode 100644 index 0000000..8c6698c --- /dev/null +++ b/tools/tree-sitter/test/corpus/block_variables.txt @@ -0,0 +1,25 @@ +================== +block_variables +================== + +program() + +begin + block b + var + x: Int + end +end. + +--- + +(source_file + (program_declaration + (block_statement + (identifier) + (block + (var_section + (variable_declaration + (identifier_definition + (identifier)) + (identifier))))))) diff --git a/tools/tree-sitter/test/corpus/comments.txt b/tools/tree-sitter/test/corpus/comments.txt index 8c933ea..2048f53 100644 --- a/tools/tree-sitter/test/corpus/comments.txt +++ b/tools/tree-sitter/test/corpus/comments.txt @@ -6,10 +6,10 @@ module (* This is multi-line - dockblock + docblock *) --- This is a one-line comment. +-- This is a single-line comment. end. diff --git a/tools/tree-sitter/test/corpus/generic_alias.txt b/tools/tree-sitter/test/corpus/generic_alias.txt index 54a8ea2..c335afa 100644 --- a/tools/tree-sitter/test/corpus/generic_alias.txt +++ b/tools/tree-sitter/test/corpus/generic_alias.txt @@ -26,7 +26,7 @@ var boxed: Boxed#[File] begin - chain.next := nil; + chain.next := cast(0u: ^Node#[File]); aliased := raw; raw := aliased; boxed.inner := @chain @@ -42,17 +42,17 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -60,25 +60,25 @@ end. (type_arguments (identifier))))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier))))) (type_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (pointer_type (identifier))) (type_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -116,8 +116,14 @@ end. (field_expression (identifier) (identifier)) - (literal - (nil))) + (cast_expression + (literal + (integer)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier)))))) (assignment_statement (identifier) (identifier)) diff --git a/tools/tree-sitter/test/corpus/generic_arguments.txt b/tools/tree-sitter/test/corpus/generic_arguments.txt index 3f325de..227efd9 100644 --- a/tools/tree-sitter/test/corpus/generic_arguments.txt +++ b/tools/tree-sitter/test/corpus/generic_arguments.txt @@ -24,8 +24,8 @@ 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(#size(Pair#[File, Word8]) = #size(^Word8) * 2u); + assert(#offset(Pair#[File, Word8], value) = #size(^Word8)); assert(first#[File, Word8](@entry) = entry.key) end. @@ -39,23 +39,23 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration (identifier_definition - (identifier)) - (type_parameters (identifier) - (identifier)) + (type_parameters + (identifier) + (identifier))) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))))) @@ -70,25 +70,25 @@ end. (identifier))))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))) (pointer_type (identifier))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters (identifier) - (identifier)) + (type_parameters + (identifier) + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -131,7 +131,8 @@ end. (binary_expression (traits_expression (trait) - (identifier)) + (pointer_type + (identifier))) (literal (integer)))))) (call_expression @@ -148,7 +149,8 @@ end. (identifier)) (traits_expression (trait) - (identifier))))) + (pointer_type + (identifier)))))) (call_expression (identifier) (argument_list diff --git a/tools/tree-sitter/test/corpus/generic_base_chain.txt b/tools/tree-sitter/test/corpus/generic_base_chain.txt index 770b7db..c208c76 100644 --- a/tools/tree-sitter/test/corpus/generic_base_chain.txt +++ b/tools/tree-sitter/test/corpus/generic_base_chain.txt @@ -42,32 +42,32 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration (identifier_definition - (identifier)) - (type_parameters (identifier) - (identifier)) + (type_parameters + (identifier) + (identifier))) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier))))) (type_declaration (identifier_definition - (identifier)) - (type_parameters (identifier) - (identifier)) + (type_parameters + (identifier) + (identifier))) (record_type (generic_type (identifier) @@ -75,7 +75,7 @@ end. (identifier) (identifier))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))))) @@ -104,13 +104,13 @@ end. (identifier)))))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters (identifier) - (identifier)) + (type_parameters + (identifier) + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -119,7 +119,7 @@ end. (identifier) (identifier))))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))) diff --git a/tools/tree-sitter/test/corpus/generic_const_inference.txt b/tools/tree-sitter/test/corpus/generic_const_inference.txt index e4b5bf9..677db20 100644 --- a/tools/tree-sitter/test/corpus/generic_const_inference.txt +++ b/tools/tree-sitter/test/corpus/generic_const_inference.txt @@ -10,9 +10,9 @@ type var slice: []const Word8 - aliased: ConstAlias := nil - nested: NestedConst := nil - direct_const: const ^Word8 := nil + aliased: ConstAlias := cast(0u: ConstAlias) + nested: NestedConst := cast(0u: NestedConst) + direct_const: const ^Word8 := cast(0u: const ^Word8) proc write#[T](fd: Int; buf: ^T; count: Int) -> Int return 0 @@ -63,39 +63,47 @@ end. (identifier_definition (identifier)) (identifier) - (literal - (nil))) + (cast_expression + (literal + (integer)) + (identifier))) (variable_declaration (identifier_definition (identifier)) (identifier) - (literal - (nil))) + (cast_expression + (literal + (integer)) + (identifier))) (variable_declaration (identifier_definition (identifier)) (const_type (pointer_type (identifier))) - (literal - (nil)))) + (cast_expression + (literal + (integer)) + (const_type + (pointer_type + (identifier)))))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))) (identifier) @@ -105,22 +113,22 @@ end. (integer))))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (const_type (identifier)))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))) (identifier) diff --git a/tools/tree-sitter/test/corpus/generic_export.txt b/tools/tree-sitter/test/corpus/generic_export.txt new file mode 100644 index 0000000..52e767e --- /dev/null +++ b/tools/tree-sitter/test/corpus/generic_export.txt @@ -0,0 +1,53 @@ +================== +generic_export +================== + +module + +type + Stack#[T]* = record + item: ^T + end + +proc push#[T]*(s: ^Stack#[T]; item: ^T) +return + +end. + +--- + +(source_file + (module_declaration + (type_section + (type_declaration + (identifier_definition + (identifier) + (type_parameters + (identifier))) + (record_type + (field_declaration + (field_identifier + (identifier)) + (pointer_type + (identifier)))))) + (procedure_declaration + (identifier_definition + (identifier) + (type_parameters + (identifier))) + (parameter_list + (field_declaration + (field_identifier + (identifier)) + (pointer_type + (generic_type + (identifier) + (type_arguments + (identifier))))) + (field_declaration + (field_identifier + (identifier)) + (pointer_type + (identifier)))) + (procedure_body + (return_clause))))) diff --git a/tools/tree-sitter/test/corpus/generic_inference.txt b/tools/tree-sitter/test/corpus/generic_inference.txt index ccac55c..1ee0b71 100644 --- a/tools/tree-sitter/test/corpus/generic_inference.txt +++ b/tools/tree-sitter/test/corpus/generic_inference.txt @@ -29,7 +29,7 @@ return begin store(@files, @f); relay(@bytes, @b); - store(@files, nil) + store(@files, cast(0u: ^File)) end. --- @@ -42,17 +42,17 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))))) @@ -81,12 +81,12 @@ end. (identifier))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -94,7 +94,7 @@ end. (type_arguments (identifier))))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))) @@ -109,12 +109,12 @@ end. (return_clause))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (generic_type @@ -122,7 +122,7 @@ end. (type_arguments (identifier))))) (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))) @@ -153,5 +153,8 @@ end. (argument_list (unary_expression (identifier)) - (literal - (nil)))))) + (cast_expression + (literal + (integer)) + (pointer_type + (identifier))))))) diff --git a/tools/tree-sitter/test/corpus/generic_pointee.txt b/tools/tree-sitter/test/corpus/generic_pointee.txt index 55f5a1a..515e985 100644 --- a/tools/tree-sitter/test/corpus/generic_pointee.txt +++ b/tools/tree-sitter/test/corpus/generic_pointee.txt @@ -16,8 +16,7 @@ var f: ^File begin - f := allocate#[File](#size(File)); - assert(f = nil) + f := allocate#[File](#size(File)) end. --- @@ -30,17 +29,17 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))))) (procedure_declaration (identifier_definition - (identifier)) - (type_parameters - (identifier)) + (identifier) + (type_parameters + (identifier))) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))) (pointer_type @@ -61,11 +60,4 @@ end. (argument_list (traits_expression (trait) - (identifier))))) - (call_expression - (identifier) - (argument_list - (binary_expression - (identifier) - (literal - (nil))))))) + (identifier))))))) diff --git a/tools/tree-sitter/test/corpus/opaque_type.txt b/tools/tree-sitter/test/corpus/opaque_type.txt index 7182bb9..e4fba94 100644 --- a/tools/tree-sitter/test/corpus/opaque_type.txt +++ b/tools/tree-sitter/test/corpus/opaque_type.txt @@ -8,7 +8,7 @@ type Alias = Handle var - handle: ^Handle := nil + handle: ^Handle alias: ^Alias proc take(h: ^Handle) -> ^Handle @@ -35,9 +35,7 @@ end. (identifier_definition (identifier)) (pointer_type - (identifier)) - (literal - (nil))) + (identifier))) (variable_declaration (identifier_definition (identifier)) @@ -48,7 +46,7 @@ end. (identifier)) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))) diff --git a/tools/tree-sitter/test/corpus/pointer_cast.txt b/tools/tree-sitter/test/corpus/pointer_cast.txt index 63a28ab..42d66fa 100644 --- a/tools/tree-sitter/test/corpus/pointer_cast.txt +++ b/tools/tree-sitter/test/corpus/pointer_cast.txt @@ -4,12 +4,12 @@ pointer_cast program() var - c: ^Char := nil - p: Pointer := nil + c: ^Char + b: ^Word8 begin - p := c; - c := p + b := cast(c: ^Word8); + c := cast(b: ^Char) end. --- @@ -21,18 +21,21 @@ end. (identifier_definition (identifier)) (pointer_type - (identifier)) - (literal - (nil))) + (identifier))) (variable_declaration (identifier_definition (identifier)) - (identifier) - (literal - (nil)))) + (pointer_type + (identifier)))) (assignment_statement (identifier) - (identifier)) + (cast_expression + (identifier) + (pointer_type + (identifier)))) (assignment_statement (identifier) - (identifier)))) + (cast_expression + (identifier) + (pointer_type + (identifier)))))) diff --git a/tools/tree-sitter/test/corpus/pointer_subtraction.txt b/tools/tree-sitter/test/corpus/pointer_subtraction.txt index 3e28de8..9b9b687 100644 --- a/tools/tree-sitter/test/corpus/pointer_subtraction.txt +++ b/tools/tree-sitter/test/corpus/pointer_subtraction.txt @@ -18,9 +18,9 @@ end. (identifier)) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) - (identifier_definition + (field_identifier (identifier)) (pointer_type (identifier)))) diff --git a/tools/tree-sitter/test/corpus/record_const_base.txt b/tools/tree-sitter/test/corpus/record_const_base.txt index e6f7cc6..2d7f96c 100644 --- a/tools/tree-sitter/test/corpus/record_const_base.txt +++ b/tools/tree-sitter/test/corpus/record_const_base.txt @@ -33,7 +33,7 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)))) (type_declaration @@ -47,7 +47,7 @@ end. (record_type (identifier) (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))))) (procedure_declaration diff --git a/tools/tree-sitter/test/corpus/self-referencing-record.txt b/tools/tree-sitter/test/corpus/self-referencing-record.txt index 02948f3..00a37e9 100644 --- a/tools/tree-sitter/test/corpus/self-referencing-record.txt +++ b/tools/tree-sitter/test/corpus/self-referencing-record.txt @@ -21,7 +21,7 @@ end. (identifier)) (record_type (field_declaration - (identifier_definition + (field_identifier (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 index f9c1f14..df5e335 100644 --- a/tools/tree-sitter/test/corpus/semicolon_parameter_separator.txt +++ b/tools/tree-sitter/test/corpus/semicolon_parameter_separator.txt @@ -18,11 +18,11 @@ end. (identifier)) (parameter_list (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier)) (field_declaration - (identifier_definition + (field_identifier (identifier)) (identifier))) (procedure_body diff --git a/tools/tree-sitter/test/corpus/traits_size.txt b/tools/tree-sitter/test/corpus/traits_size.txt index f566e0c..b9a96b0 100644 --- a/tools/tree-sitter/test/corpus/traits_size.txt +++ b/tools/tree-sitter/test/corpus/traits_size.txt @@ -8,7 +8,7 @@ var s: Int := cast(#size(Int): Int) a: [10]Int as: Int := cast(#size([10]Int): Int) - p: Int := cast(#size(Pointer): Int) + p: Int := cast(#size(^Word8): Int) begin assert(s > 0); @@ -62,7 +62,8 @@ end. (cast_expression (traits_expression (trait) - (identifier)) + (pointer_type + (identifier))) (identifier)))) (call_expression (identifier) -- cgit v1.2.3