zero length segments!

Bjorn Gustavsson <>
Wed Sep 25 10:25:57 CEST 2002


It is an old bug that the shell allows some bit syntax expressions that
the compiler doesn't allow.

In the upcoming R9 release, the shell evalulator has been corrected.

/Bjorn

"Happi" <> writes:

> The bitsize can not be an arbitrary expression, just bind the size before
> the match:
> 
> t(Bit) when integer(Bit) ->
>   S = (31 - Bit),
>    <<_:S, Flag:1, _:(Bit)>> = <<1:32>>,
>    Flag.
> 
> ----- Original Message -----
> From: "Vance Shipley" <>
> To: <>
> Sent: Tuesday, September 24, 2002 4:02 PM
> Subject: Re: zero length segments!
> 
> 
> >
> > Well didn't I speak too soon!  While this works wonderfully in the shell
> > it won't complile. :(
> >
> >
> > Eshell V5.1.2  (abort with ^G)
> > 1> T = fun(Bit) -> <<_:(31 - Bit), Flag:1, _:(Bit)>> = <<1:32>>, Flag end.
> > #Fun<erl_eval.5.63972567>
> > 2> T(0).
> > 1
> > 3> T(1).
> > 0
> >
> > -module(t).
> > -export([t/1]).
> >
> > t(Bit) when integer(Bit) ->
> >    <<_:(31 - Bit), Flag:1, _:(Bit)>> = <<1:32>>,
> >    Flag.
> >
> > 1> c(t).
> > ./t.erl:5: illegal bit size
> > error
> >
> >
> > The problem seems to be with the expression (31 - Bit).
> >
> > Any idea how to get past this?
> >
> > -Vance

-- 
Björn Gustavsson            Ericsson Utvecklings AB
      ÄT2/UAB/F/P
			    BOX 1505
+46 8 727 56 87 	    125 25 Älvsjö



More information about the erlang-questions mailing list