references deduction in function definitions (reference modifiers can be added to argument names)

This commit is contained in:
ProgramSnail 2023-07-19 10:29:07 +03:00
parent 2e0dfdf3fa
commit 8cc264fa5a
2 changed files with 32 additions and 1 deletions

View file

@ -106,6 +106,7 @@ func_2 = {
print t.0;
}
: operator definition example
( - ) 'a 'b = 'a + neg 'b;
test.something = {
@ -187,7 +188,10 @@ test_ref_access_precendence = {
print_two 'a 'b = print 'a, print 'b;
: example of reference args and comma operator
swap 'a 'b : <> 'A <> 'A = %c := <- 'a, 'a := <- 'b, 'b := <- c; // TODO: use move in some way ??
swap 'a 'b : <> 'A <> 'A = %c := <- 'a, 'a := <- 'b, 'b := <- c;
: previous example with automatic type deduction
swap <> 'a <> 'b = %c := <- 'a, 'a := <- 'b, 'b := <- c;
: several outputs example
scan_three : -> String -> String -> String = scan & scan & scan;
@ -591,6 +595,7 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(number_literal)))))
(function_definition
(definition_info)
(operator)
(argument_name_identifier)
(argument_name_identifier)
@ -950,6 +955,31 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(case
(reference
(simple_name_identifier))))))
(function_definition
(definition_info)
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(comma_expression
(comma_expression
(match
(name_definition
(simple_name_identifier))
(case
(reference
(argument_name_identifier))))
(match
(name_expression
(argument_name_identifier))
(case
(reference
(argument_name_identifier)))))
(match
(name_expression
(argument_name_identifier))
(case
(reference
(simple_name_identifier))))))
(function_definition
(definition_info)
(simple_name_identifier)

View file

@ -56,6 +56,7 @@ module.exports = grammar({
choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')),
repeat(seq(
optional($.annotation_identifier),
optional(choice(choice('->', 'out'), choice('<-', 'in'), choice('<>', 'ref'))),
$.argument_name_identifier,
optional('?'),
)),