@@ -549,10 +549,15 @@ defmodule Spitfire do
549549
550550 { kvs , parser } =
551551 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
556561 end
557562
558563 { [ { token , value } | kvs ] , parser }
@@ -573,15 +578,24 @@ defmodule Spitfire do
573578
574579 { kvs , parser } =
575580 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
580590 end
581591
582592 { [ { atom , value } | kvs ] , parser }
583593 end
584594
595+ defp kw_identifier? ( { :kw_identifier , _ , _ } ) , do: true
596+ defp kw_identifier? ( { :kw_identifier_unsafe , _ , _ } ) , do: true
597+ defp kw_identifier? ( _ ) , do: false
598+
585599 defp parse_assoc_op ( % { current_token: { :assoc_op , _ , _token } } = parser , key ) do
586600 parser = parser |> next_token ( ) |> eat_eol ( )
587601 { value , parser } = parse_expression ( parser , @ assoc_op , false , false , false )
0 commit comments