@@ -549,10 +549,15 @@ defmodule Spitfire do
549
549
550
550
{ kvs , parser } =
551
551
while2 peek_token ( parser ) == :"," <- parser do
552
- parser = parser |> next_token ( ) |> next_token ( )
553
- { pair , parser } = parse_kw_identifier ( parser )
554
-
555
- { pair , parser }
552
+ if kw_identifier? ( current_token ( parser ) ) do
553
+ parser = parser |> next_token ( ) |> next_token ( )
554
+ { pair , parser } = parse_kw_identifier ( parser )
555
+ { pair , parser }
556
+ else
557
+ parser = parser |> next_token ( ) |> next_token ( )
558
+ { item , parser } = parse_expression ( parser , @ kw_identifier , true , false , false )
559
+ { item , parser }
560
+ end
556
561
end
557
562
558
563
{ [ { token , value } | kvs ] , parser }
@@ -573,15 +578,24 @@ defmodule Spitfire do
573
578
574
579
{ kvs , parser } =
575
580
while2 peek_token ( parser ) == :"," <- parser do
576
- parser = parser |> next_token ( ) |> next_token ( )
577
- { pair , parser } = parse_kw_identifier ( parser )
578
-
579
- { pair , parser }
581
+ if kw_identifier? ( current_token ( parser ) ) do
582
+ parser = parser |> next_token ( ) |> next_token ( )
583
+ { pair , parser } = parse_kw_identifier ( parser )
584
+ { pair , parser }
585
+ else
586
+ parser = parser |> next_token ( ) |> next_token ( )
587
+ { item , parser } = parse_expression ( parser , @ kw_identifier , true , false , false )
588
+ { item , parser }
589
+ end
580
590
end
581
591
582
592
{ [ { atom , value } | kvs ] , parser }
583
593
end
584
594
595
+ defp kw_identifier? ( { :kw_identifier , _ , _ } ) , do: true
596
+ defp kw_identifier? ( { :kw_identifier_unsafe , _ , _ } ) , do: true
597
+ defp kw_identifier? ( _ ) , do: false
598
+
585
599
defp parse_assoc_op ( % { current_token: { :assoc_op , _ , _token } } = parser , key ) do
586
600
parser = parser |> next_token ( ) |> eat_eol ( )
587
601
{ value , parser } = parse_expression ( parser , @ assoc_op , false , false , false )
0 commit comments