@@ -58,12 +58,7 @@ defmodule Msgpax.Unpacker do
5858 for { formats , value } <- primitives , format <- formats do
5959 defp unpack ( << unquote_splicing ( format ) , rest :: bits >> , result , options , outer , index , count ) do
6060 result = [ unquote ( value ) | result ]
61- case index + 1 do
62- ^ count ->
63- unpack_continue ( rest , options , outer , result , count )
64- index ->
65- unpack ( rest , result , options , outer , index , count )
66- end
61+ unpack_continue ( rest , result , options , outer , index , count )
6762 end
6863 end
6964
@@ -76,14 +71,7 @@ defmodule Msgpax.Unpacker do
7671 defp unpack ( << unquote_splicing ( format ) , rest :: bits >> , result , options , outer , index , count ) do
7772 case unquote ( quote ( do: length ) ) do
7873 0 ->
79- result = [ [ ] | result ]
80- case index + 1 do
81- ^ count ->
82- unpack_continue ( rest , options , outer , result , count )
83- index ->
84- unpack ( rest , result , options , outer , index , count )
85- end
86-
74+ unpack_continue ( rest , [ [ ] | result ] , options , outer , index , count )
8775 length ->
8876 unpack ( rest , result , options , [ :list , index , count | outer ] , 0 , length )
8977 end
@@ -99,14 +87,7 @@ defmodule Msgpax.Unpacker do
9987 defp unpack ( << unquote_splicing ( format ) , rest :: bits >> , result , options , outer , index , count ) do
10088 case unquote ( quote ( do: length ) ) do
10189 0 ->
102- result = [ % { } | result ]
103- case index + 1 do
104- ^ count ->
105- unpack_continue ( rest , options , outer , result , count )
106- index ->
107- unpack ( rest , result , options , outer , index , count )
108- end
109-
90+ unpack_continue ( rest , [ % { } | result ] , options , outer , index , count )
11091 length ->
11192 unpack ( rest , result , options , [ :map , index , count | outer ] , 0 , length * 2 )
11293 end
@@ -121,13 +102,7 @@ defmodule Msgpax.Unpacker do
121102 for format <- binaries do
122103 defp unpack ( << unquote_splicing ( format ) , rest :: bits >> , result , options , outer , index , count ) do
123104 value = unpack_binary ( unquote ( quote ( do: content ) ) , options )
124- result = [ value | result ]
125- case index + 1 do
126- ^ count ->
127- unpack_continue ( rest , options , outer , result , count )
128- index ->
129- unpack ( rest , result , options , outer , index , count )
130- end
105+ unpack_continue ( rest , [ value | result ] , options , outer , index , count )
131106 end
132107 end
133108
@@ -144,13 +119,7 @@ defmodule Msgpax.Unpacker do
144119 for format <- extensions do
145120 defp unpack ( << unquote_splicing ( format ) , rest :: bits >> , result , options , outer , index , count ) do
146121 value = unpack_ext ( unquote ( quote ( do: type ) ) , unquote ( quote ( do: content ) ) , options )
147- result = [ value | result ]
148- case index + 1 do
149- ^ count ->
150- unpack_continue ( rest , options , outer , result , count )
151- index ->
152- unpack ( rest , result , options , outer , index , count )
153- end
122+ unpack_continue ( rest , [ value | result ] , options , outer , index , count )
154123 end
155124 end
156125
@@ -162,6 +131,17 @@ defmodule Msgpax.Unpacker do
162131 throw :incomplete
163132 end
164133
134+ @ compile { :inline , [ unpack_continue: 6 ] }
135+
136+ defp unpack_continue ( rest , result , options , outer , index , count ) do
137+ case index + 1 do
138+ ^ count ->
139+ unpack_continue ( rest , options , outer , result , count )
140+ index ->
141+ unpack ( rest , result , options , outer , index , count )
142+ end
143+ end
144+
165145 defp unpack_continue ( << buffer :: bits >> , options , [ kind , index , length | outer ] , result , count ) do
166146 result = build_collection ( result , count , kind )
167147 case index + 1 do
0 commit comments