# Old style vs. new style boolean expressions

James Hague <>
Tue Oct 8 22:49:11 CEST 2002


> (I only have R7 at hand, so no andalso, orelse). And run the compiler
> on that, like this:

Here it is under R8:

f3(N) ->
	((N >= $A) andalso (N =< $Z)) orelse
	((N >= $a) andalso (N =< $z)) orelse
	((N >= $0) andalso (N =< $9)) orelse
	(N == $_).

which generates the following monstrosity:

{function, f3, 1, 10}.
  {label,9}.
    {func_info,{atom,f},{atom,f3},1}.
  {label,10}.
    {allocate_zero,1,1}.
    {bif,'>=',{f,0},[{x,0},{integer,65}],{x,1}}.
    {move,{x,0},{y,0}}.
    {test,is_atom,{f,41},[{x,1}]}.
 
{select_val,{x,1},{f,41},{list,[{atom,true},{f,11},{atom,false},{f,14}]}}.
  {label,11}.
    {bif,'=<',{f,0},[{x,0},{integer,90}],{x,1}}.
    {test,is_atom,{f,41},[{x,1}]}.
 
{select_val,{x,1},{f,41},{list,[{atom,true},{f,12},{atom,false},{f,13}]}}.
  {label,12}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {jump,{f,15}}.
  {label,13}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {jump,{f,15}}.
  {label,14}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
  {label,15}.
    {test,is_atom,{f,40},[{x,0}]}.
 
{select_val,{x,0},{f,40},{list,[{atom,false},{f,16},{atom,true},{f,39}]}}.
  {label,16}.
    {bif,'>=',{f,0},[{y,0},{integer,97}],{x,0}}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,17},{atom,false},{f,20}]}}.
  {label,17}.
    {bif,'=<',{f,0},[{y,0},{integer,122}],{x,0}}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,18},{atom,false},{f,19}]}}.
  {label,18}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {jump,{f,21}}.
  {label,19}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {jump,{f,21}}.
  {label,20}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
  {label,21}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,false},{f,22},{atom,true},{f,35}]}}.
  {label,22}.
    {bif,'>=',{f,0},[{y,0},{integer,48}],{x,0}}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,23},{atom,false},{f,26}]}}.
  {label,23}.
    {bif,'=<',{f,0},[{y,0},{integer,57}],{x,0}}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,24},{atom,false},{f,25}]}}.
  {label,24}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {jump,{f,27}}.
  {label,25}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {jump,{f,27}}.
  {label,26}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
  {label,27}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,false},{f,28},{atom,true},{f,31}]}}.
  {label,28}.
    {bif,'==',{f,0},[{y,0},{integer,95}],{x,0}}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,29},{atom,false},{f,30}]}}.
  {label,29}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {jump,{f,32}}.
  {label,30}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {jump,{f,32}}.
  {label,31}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
  {label,32}.
    {test,is_atom,{f,42},[{x,0}]}.
 
{select_val,{x,0},{f,42},{list,[{atom,true},{f,33},{atom,false},{f,34}]}}.
  {label,33}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {jump,{f,36}}.
  {label,34}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {jump,{f,36}}.
  {label,35}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
  {label,36}.
    {test,is_atom,{f,40},[{x,0}]}.
 
{select_val,{x,0},{f,40},{list,[{atom,true},{f,37},{atom,false},{f,38}]}}.
  {label,37}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {deallocate,1}.
    return.
  {label,38}.
    {move,{atom,false},{x,0}}.
    {'%live',1}.
    {deallocate,1}.
    return.
  {label,39}.
    {move,{atom,true},{x,0}}.
    {'%live',1}.
    {deallocate,1}.
    return.
    {'%','Moved code'}.
  {label,40}.
    {test_heap,3,1}.
    {put_tuple,2,{x,1}}.
    {put,{atom,badarg}}.
    {put,{x,0}}.
    {move,{x,1},{x,0}}.
    {'%live',1}.
    {call_ext_last,1,{extfunc,erlang,fault,1},1}.
  {label,41}.
    {test_heap,3,2}.
    {put_tuple,2,{x,0}}.
    {put,{atom,badarg}}.
    {put,{x,1}}.
    {'%live',1}.
    {call_ext,1,{extfunc,erlang,fault,1}}.
  {label,42}.
    {test_heap,3,1}.
    {put_tuple,2,{x,1}}.
    {put,{atom,badarg}}.
    {put,{x,0}}.
    {move,{x,1},{x,0}}.
    {'%live',1}.
    {call_ext,1,{extfunc,erlang,fault,1}}.



More information about the erlang-questions mailing list