fix: Anonymous alias and structural given instances

text_sliders
susliko 2023-05-20 00:37:04 +07:00
parent 5327a37e82
commit 3a69f2c8bd
4 changed files with 17677 additions and 17623 deletions

@ -1102,11 +1102,20 @@ object A:
given intFoo: CanFoo[Int] with
def foo(x: Int): Int = 0
given CanFoo[Int] with
def foo(x: Int): Int = 0
private given listFoo[A1](using ev: CanFoo[A1]): CanFoo[List[A1]] with
def foo(xs: List[A1]): Int = 0
given [T: Ordering]: Ordering[List[T]] with
def x = ()
given Context = ctx
given Context[T] = ctx
--------------------------------------------------------------------------------
(compilation_unit
@ -1132,6 +1141,20 @@ object A:
(type_identifier)))
(type_identifier)
(integer_literal))))
(given_definition
(generic_type
(type_identifier)
(type_arguments
(type_identifier)))
(with_template_body
(function_definition
(identifier)
(parameters
(parameter
(identifier)
(type_identifier)))
(type_identifier)
(integer_literal))))
(given_definition
(modifiers
(access_modifier))
@ -1164,8 +1187,32 @@ object A:
(type_identifier)))))
(type_identifier)
(integer_literal))))
(given_definition
(identifier
(MISSING _alpha_identifier))
(type_parameters
(identifier)
(context_bound
(type_identifier)))
(generic_type
(type_identifier)
(type_arguments
(generic_type
(type_identifier)
(type_arguments
(type_identifier)))))
(with_template_body
(function_definition
(identifier)
(unit))))
(given_definition
(type_identifier)
(identifier))
(given_definition
(generic_type
(type_identifier)
(type_arguments
(type_identifier)))
(identifier)))))
================================================================================

@ -74,6 +74,7 @@ module.exports = grammar({
[$._indentable_expression, $.do_while_expression],
[$.if_expression],
[$.match_expression],
[$._function_constructor, $._type_identifier],
[$._type_identifier, $.identifier],
[$.instance_expression],
],
@ -485,7 +486,7 @@ module.exports = grammar({
)),
// Created for memory-usage optimization during codegen.
_function_constructor: $ => prec.left(PREC.control, seq(
_function_constructor: $ => prec.left(seq(
field('name', $._identifier),
field('type_parameters', optional($.type_parameters)),
field('parameters', repeat($.parameters)),

6
src/grammar.json vendored

@ -2288,7 +2288,7 @@
},
"_function_constructor": {
"type": "PREC_LEFT",
"value": 1,
"value": 0,
"content": {
"type": "SEQ",
"members": [
@ -6722,6 +6722,10 @@
[
"match_expression"
],
[
"_function_constructor",
"_type_identifier"
],
[
"_type_identifier",
"identifier"

35244
src/parser.c vendored

File diff suppressed because it is too large Load Diff