@@ -59,7 +59,7 @@ defmodule ElixirScript.Translate.Forms.Pattern do
5959 end
6060
6161 defp process_pattern ( { :_ , _ , _ } , _ ) do
62- { [ PM . wildcard ( ) ] , [ J . identifier ( :_ ) ] }
62+ { [ PM . parameter ( ) ] , [ J . identifier ( :_ ) ] }
6363 end
6464
6565 defp process_pattern ( { a , b } , state ) do
@@ -110,20 +110,40 @@ defmodule ElixirScript.Translate.Forms.Pattern do
110110 end
111111
112112 defp process_pattern ( { :% , _ , [ module , { :%{} , _ , props } ] } , state ) do
113- process_pattern ( { :%{} , [ ] , [ __struct__ : module ] ++ props } , state )
113+ process_pattern ( { :%{} , [ ] , [ __module__struct__ : module ] ++ props } , state )
114114 end
115115
116116 defp process_pattern ( { :%{} , _ , props } , state ) do
117- properties = Enum . map ( props , fn ( { key , value } ) ->
118- { pattern , params } = process_pattern ( value , state )
119- property = case key do
120- { :^ , _ , [ the_key ] } ->
121- J . property ( Form . compile! ( the_key , state ) , hd ( List . wrap ( pattern ) ) , :init , false , false , true )
122- _ ->
123- ElixirScript.Translate.Forms.Map . make_property ( Form . compile! ( key , state ) , hd ( List . wrap ( pattern ) ) )
124- end
125-
126- { property , params }
117+ properties = Enum . map ( props , fn
118+ { :__module__struct__ , module } ->
119+ a = J . object_expression ( [ % ESTree.Property {
120+ key: J . identifier ( "__MODULE__" ) ,
121+ value: J . call_expression (
122+ J . member_expression (
123+ J . identifier ( "Symbol" ) ,
124+ J . identifier ( "for" )
125+ ) ,
126+ [ J . literal ( to_string ( module ) ) ]
127+ )
128+ } ] )
129+
130+ property = ElixirScript.Translate.Forms.Map . make_property (
131+ Form . compile! ( :__struct__ , state ) ,
132+ a
133+ )
134+
135+ { property , [ ] }
136+
137+ { key , value } ->
138+ { pattern , params } = process_pattern ( value , state )
139+ property = case key do
140+ { :^ , _ , [ the_key ] } ->
141+ J . property ( Form . compile! ( the_key , state ) , hd ( List . wrap ( pattern ) ) , :init , false , false , true )
142+ _ ->
143+ ElixirScript.Translate.Forms.Map . make_property ( Form . compile! ( key , state ) , hd ( List . wrap ( pattern ) ) )
144+ end
145+
146+ { property , params }
127147 end )
128148
129149 { props , params } = Enum . reduce ( properties , { [ ] , [ ] } , fn ( { prop , param } , { props , params } ) ->
0 commit comments