function type added

This commit is contained in:
ProgramSnail 2023-08-14 10:07:35 +03:00
parent 6b093311df
commit 754d207af5
3 changed files with 133 additions and 63 deletions

View file

@ -257,14 +257,17 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (reference_type
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier)))
(reference_type
(simple_type
(simple_type_identifier))))
(block (block
(empty_lines) (empty_lines)
(condition (condition
@ -355,10 +358,12 @@ test_k 'n 'k : Int Int -> Bool = {
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (reference_type
(simple_type
(simple_type_identifier))))
(block (block
(empty_lines) (empty_lines)
(match (match
@ -450,12 +455,14 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (reference_type
(simple_type
(simple_type_identifier))))
(block (block
(empty_lines) (empty_lines)
(condition (condition

View file

@ -230,7 +230,7 @@ result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> ('c := 'a
tuple_argument_test 'x : (A & B & C) = do_something; tuple_argument_test 'x : (A & B & C) = do_something;
// ((A1 & A2) | B | C) same to Variant[Tuple[A1 A2] B C] // ((A1 & A2) | B | C) same to Variant[Tuple[A1 A2] B C]
variant_argument_test 'x : ((A1 & A2) | B | C) = do_something; variant_argument_test 'x : ( (A1 & A2) | B | C) = do_something;
literals_test = { literals_test = {
%float_number_literal := 1.0f; %float_number_literal := 1.0f;
@ -247,6 +247,10 @@ literals_test = {
%null_literal := null; %null_literal := null;
} }
array_argument_test 'x 'y : [[ Int ]] = do_something;
functional_arguments_test 'x 'y : (( Int -> Int )) (( Float <- Float -> Float )) = do_something;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(source_file (source_file
@ -441,11 +445,13 @@ literals_test = {
(index_literal))) (index_literal)))
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(annotation_identifier) (function_type
(simple_type (annotation_identifier)
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier)) (reference_type
(simple_type
(simple_type_identifier))))
(match (match
(name_expression (name_expression
(argument_name_identifier)) (argument_name_identifier))
@ -783,10 +789,11 @@ literals_test = {
(info)) (info))
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (reference_type
(simple_type_identifier)
(simple_type (simple_type
(argument_type_identifier))) (simple_type_identifier)
(simple_type
(argument_type_identifier))))
(block (block
(empty_lines) (empty_lines)
(match (match
@ -856,10 +863,11 @@ literals_test = {
(info)) (info))
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (reference_type
(simple_type_identifier)
(simple_type (simple_type
(argument_type_identifier))) (simple_type_identifier)
(simple_type
(argument_type_identifier))))
(block (block
(empty_lines) (empty_lines)
(match (match
@ -1094,10 +1102,13 @@ literals_test = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(argument_type_identifier)) (reference_type
(simple_type (simple_type
(argument_type_identifier)) (argument_type_identifier)))
(reference_type
(simple_type
(argument_type_identifier))))
(comma_expression (comma_expression
(comma_expression (comma_expression
(match (match
@ -1150,12 +1161,16 @@ literals_test = {
(definition_info (definition_info
(info)) (info))
(simple_name_identifier) (simple_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (reference_type
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier)))
(simple_type (reference_type
(simple_type_identifier)) (simple_type
(simple_type_identifier)))
(reference_type
(simple_type
(simple_type_identifier))))
(operator_expression (operator_expression
(operator_expression (operator_expression
(name_expression (name_expression
@ -1172,8 +1187,9 @@ literals_test = {
(info)) (info))
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (reference_type
(simple_type_identifier)) (simple_type
(simple_type_identifier)))
(match (match
(name_expression (name_expression
(argument_name_identifier)) (argument_name_identifier))
@ -1187,12 +1203,16 @@ literals_test = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (reference_type
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier)))
(simple_type (reference_type
(simple_type_identifier)) (simple_type
(simple_type_identifier)))
(reference_type
(simple_type
(simple_type_identifier))))
(constructor (constructor
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier))
@ -1207,12 +1227,16 @@ literals_test = {
(simple_name_identifier) (simple_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(argument_name_identifier) (argument_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (reference_type
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier)))
(simple_type (reference_type
(simple_type_identifier)) (simple_type
(simple_type_identifier)))
(reference_type
(simple_type
(simple_type_identifier))))
(constructor (constructor
(simple_type (simple_type
(simple_type_identifier)) (simple_type_identifier))
@ -1227,10 +1251,12 @@ literals_test = {
(empty_lines) (empty_lines)
(function_definition (function_definition
(simple_name_identifier) (simple_name_identifier)
(simple_type (function_type
(simple_type_identifier)) (simple_type
(simple_type (simple_type_identifier))
(simple_type_identifier))) (reference_type
(simple_type
(simple_type_identifier)))))
(empty_lines) (empty_lines)
(function_definition (function_definition
(definition_info (definition_info
@ -1454,4 +1480,37 @@ literals_test = {
(case (case
(null_literal))) (null_literal)))
(empty_lines))) (empty_lines)))
(empty_lines)
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(array_type
(simple_type
(simple_type_identifier)))
(name_expression
(simple_name_identifier)))
(empty_lines)
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(function_type
(function_type
(simple_type
(simple_type_identifier))
(reference_type
(simple_type
(simple_type_identifier))))
(function_type
(simple_type
(simple_type_identifier))
(reference_type
(simple_type
(simple_type_identifier)))
(reference_type
(simple_type
(simple_type_identifier)))))
(name_expression
(simple_name_identifier)))
(empty_lines)) (empty_lines))

View file

@ -53,11 +53,7 @@ module.exports = grammar({
)), )),
optional(seq( optional(seq(
':', ':',
repeat1(seq( choice($.function_type, $._annotated_type),
optional($.annotation_identifier),
optional($._reference),
$._scoped_type,
)),
)), )),
choice(seq('=', choice(prec(2, choice($.block, $.array)), seq($._super_expression, ';'))), ';'), choice(seq('=', choice(prec(2, choice($.block, $.array)), seq($._super_expression, ';'))), ';'),
), ),
@ -226,6 +222,11 @@ module.exports = grammar({
repeat1(seq('&', $._annotated_type)), repeat1(seq('&', $._annotated_type)),
), ),
function_type: $ => seq(
$._annotated_type,
repeat1($._annotated_type),
),
// add annotations to in all types ?? // add annotations to in all types ??
_annotated_type: $ => seq(optional($.annotation_identifier), $._scoped_type), _annotated_type: $ => seq(optional($.annotation_identifier), $._scoped_type),
@ -249,6 +250,7 @@ module.exports = grammar({
$.array_type, $.array_type,
$.variant_type, $.variant_type,
$.tuple_type, $.tuple_type,
$.function_type,
), ),
_scoped_type: $ => choice( _scoped_type: $ => choice(
@ -259,7 +261,9 @@ module.exports = grammar({
seq('(', choice( seq('(', choice(
$.variant_type, $.variant_type,
$.tuple_type, $.tuple_type,
//$.function_type,
), ')'), ), ')'),
seq('((', $.function_type, '))'),
), ),
// --- comments // --- comments