@@ -476,27 +476,36 @@ defmodule Module.Types.Of do
476476 In the stack, we add nodes such as <<expr>>, <<..., expr>>, etc,
477477 based on the position of the expression within the binary.
478478 """
479- # TODO: Return binary, bitstring or bitstring_no_binary
480- def bitstring ( [ ] , _kind , _stack , context ) do
481- { binary ( ) , context }
479+ def bitstring ( meta , parts , kind , stack , context ) do
480+ context = bitstring ( parts , kind , stack , context )
481+
482+ case Keyword . get ( meta , :alignment , :unknown ) do
483+ :unknown -> { bitstring ( ) , context }
484+ 0 -> { binary ( ) , context }
485+ _ -> { bitstring_no_binary ( ) , context }
486+ end
487+ end
488+
489+ defp bitstring ( [ ] , _kind , _stack , context ) do
490+ context
482491 end
483492
484- def bitstring ( [ head ] , kind , stack , context ) do
485- { binary ( ) , bitstring_segment ( head , kind , [ head ] , stack , context ) }
493+ defp bitstring ( [ head ] , kind , stack , context ) do
494+ bitstring_segment ( head , kind , [ head ] , stack , context )
486495 end
487496
488- def bitstring ( [ head | tail ] , kind , stack , context ) do
497+ defp bitstring ( [ head | tail ] , kind , stack , context ) do
489498 context = bitstring_segment ( head , kind , [ head , @ suffix ] , stack , context )
490- { binary ( ) , bitstring_many ( tail , kind , stack , context ) }
499+ bitstring_tail ( tail , kind , stack , context )
491500 end
492501
493- defp bitstring_many ( [ last ] , kind , stack , context ) do
502+ defp bitstring_tail ( [ last ] , kind , stack , context ) do
494503 bitstring_segment ( last , kind , [ @ prefix , last ] , stack , context )
495504 end
496505
497- defp bitstring_many ( [ head | tail ] , kind , stack , context ) do
506+ defp bitstring_tail ( [ head | tail ] , kind , stack , context ) do
498507 context = bitstring_segment ( head , kind , [ @ prefix , head , @ suffix ] , stack , context )
499- bitstring_many ( tail , kind , stack , context )
508+ bitstring_tail ( tail , kind , stack , context )
500509 end
501510
502511 # If the segment is a literal, the compiler has already checked its validity,
0 commit comments