result / optional return type modifiers for functions (one for all returns)

This commit is contained in:
ProgramSnail 2023-07-29 14:26:57 +03:00
parent 9c44228eec
commit 24015fd8df
2 changed files with 43 additions and 7 deletions

View file

@ -219,8 +219,12 @@ parse_number : Unit! = {
bring (); bring ();
} }
: example of or_in and or_out usage for template operators : example of or_in and or_out usage for template operators (tuple input and tuple output)
( & ) |-> 'a |-> 'b <-| 'x <-| 'y = (|-> 'a := <-| 'x) && (|-> 'b := <-| 'y); ( & ) |-> 'a |-> 'b <-| 'x <-| 'y = ('a := 'x) && ('b := 'y);
: function, that return result ('!' not used on calls)
: useful when tuples returned
result_func! 'a 'b -> 'c -> 'd = ?? 'a == 0 => error "some error" !!=> 'c := 'a, 'd := 'b, ()
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -1194,15 +1198,46 @@ parse_number : Unit! = {
(argument_name_identifier) (argument_name_identifier)
(operator_expression (operator_expression
(match (match
(reference_expression (name_expression
(argument_name_identifier)) (argument_name_identifier))
(case (case
(reference_expression (name_expression
(argument_name_identifier)))) (argument_name_identifier))))
(operator) (operator)
(match (match
(reference_expression (name_expression
(argument_name_identifier)) (argument_name_identifier))
(case (case
(reference_expression (name_expression
(argument_name_identifier))))))) (argument_name_identifier))))))
(empty_lines)
(ERROR
(definition_info
(info)
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
(comma_expression
(condition
(operator_expression
(name_expression
(argument_name_identifier))
(operator)
(number_literal))
(name_expression
(simple_name_identifier)
(string_literal))
(name_expression
(argument_name_identifier)))
(ERROR
(argument_name_identifier))
(match
(name_expression
(argument_name_identifier))
(case
(name_expression
(argument_name_identifier)))))
(unit_literal)))

View file

@ -56,6 +56,7 @@ module.exports = grammar({
repeat(seq($.constraint, ';')), repeat(seq($.constraint, ';')),
optional($._var_let), optional($._var_let),
choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')), choice(field('name', $.simple_name_identifier), seq('(', field('name', $.operator), ')')),
optional($._optional_result),
repeat(seq( repeat(seq(
optional($.annotation_identifier), optional($.annotation_identifier),
optional($._reference), optional($._reference),