diff --git a/corpus/edigits_like.langexp b/corpus/edigits_like.langexp index 14275bf..a41c95c 100644 --- a/corpus/edigits_like.langexp +++ b/corpus/edigits_like.langexp @@ -257,14 +257,17 @@ test_k 'n 'k : Int Int -> Bool = { (simple_name_identifier) (argument_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (simple_type + (simple_type_identifier)) + (simple_type + (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier)))) (block (empty_lines) (condition @@ -355,10 +358,12 @@ test_k 'n 'k : Int Int -> Bool = { (function_definition (simple_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (simple_type + (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier)))) (block (empty_lines) (match @@ -450,12 +455,14 @@ test_k 'n 'k : Int Int -> Bool = { (simple_name_identifier) (argument_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (simple_type + (simple_type_identifier)) + (simple_type + (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier)))) (block (empty_lines) (condition diff --git a/corpus/test.langexp b/corpus/test.langexp index 91494a2..edfb5ff 100644 --- a/corpus/test.langexp +++ b/corpus/test.langexp @@ -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; // ((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 = { %float_number_literal := 1.0f; @@ -247,6 +247,10 @@ literals_test = { %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 @@ -441,11 +445,13 @@ literals_test = { (index_literal))) (simple_name_identifier) (argument_name_identifier) - (annotation_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (annotation_identifier) + (simple_type + (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier)))) (match (name_expression (argument_name_identifier)) @@ -783,10 +789,11 @@ literals_test = { (info)) (simple_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier) + (reference_type (simple_type - (argument_type_identifier))) + (simple_type_identifier) + (simple_type + (argument_type_identifier)))) (block (empty_lines) (match @@ -856,10 +863,11 @@ literals_test = { (info)) (simple_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier) + (reference_type (simple_type - (argument_type_identifier))) + (simple_type_identifier) + (simple_type + (argument_type_identifier)))) (block (empty_lines) (match @@ -1094,10 +1102,13 @@ literals_test = { (simple_name_identifier) (argument_name_identifier) (argument_name_identifier) - (simple_type - (argument_type_identifier)) - (simple_type - (argument_type_identifier)) + (function_type + (reference_type + (simple_type + (argument_type_identifier))) + (reference_type + (simple_type + (argument_type_identifier)))) (comma_expression (comma_expression (match @@ -1150,12 +1161,16 @@ literals_test = { (definition_info (info)) (simple_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier)))) (operator_expression (operator_expression (name_expression @@ -1172,8 +1187,9 @@ literals_test = { (info)) (simple_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier))) (match (name_expression (argument_name_identifier)) @@ -1187,12 +1203,16 @@ literals_test = { (simple_name_identifier) (argument_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier)))) (constructor (simple_type (simple_type_identifier)) @@ -1207,12 +1227,16 @@ literals_test = { (simple_name_identifier) (argument_name_identifier) (argument_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier)) + (function_type + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier))) + (reference_type + (simple_type + (simple_type_identifier)))) (constructor (simple_type (simple_type_identifier)) @@ -1227,10 +1251,12 @@ literals_test = { (empty_lines) (function_definition (simple_name_identifier) - (simple_type - (simple_type_identifier)) - (simple_type - (simple_type_identifier))) + (function_type + (simple_type + (simple_type_identifier)) + (reference_type + (simple_type + (simple_type_identifier))))) (empty_lines) (function_definition (definition_info @@ -1454,4 +1480,37 @@ literals_test = { (case (null_literal))) (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)) diff --git a/grammar.js b/grammar.js index 9c74322..cbaa085 100644 --- a/grammar.js +++ b/grammar.js @@ -53,11 +53,7 @@ module.exports = grammar({ )), optional(seq( ':', - repeat1(seq( - optional($.annotation_identifier), - optional($._reference), - $._scoped_type, - )), + choice($.function_type, $._annotated_type), )), choice(seq('=', choice(prec(2, choice($.block, $.array)), seq($._super_expression, ';'))), ';'), ), @@ -226,6 +222,11 @@ module.exports = grammar({ repeat1(seq('&', $._annotated_type)), ), + function_type: $ => seq( + $._annotated_type, + repeat1($._annotated_type), + ), + // add annotations to in all types ?? _annotated_type: $ => seq(optional($.annotation_identifier), $._scoped_type), @@ -249,6 +250,7 @@ module.exports = grammar({ $.array_type, $.variant_type, $.tuple_type, + $.function_type, ), _scoped_type: $ => choice( @@ -259,7 +261,9 @@ module.exports = grammar({ seq('(', choice( $.variant_type, $.tuple_type, + //$.function_type, ), ')'), + seq('((', $.function_type, '))'), ), // --- comments