<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -17,6 +17,13 @@ I will try to make a better fix soon. Sorry about that.
 v0.5
 ----
 
+Added macro list*.
+
+Added a new shell command to set variables in the shell.
+
+Cleaned up compiler options and made them more like the vanilla
+compiler.
+
 Added unicode types to binaries: utf-8, utf-16 and utf-32.
 
 Shell and compiler now print error data in LFE instead of vanilla.
@@ -32,6 +39,8 @@ formatted output while lfe_io:format1 returns the string.
 
 Improved pretty-printing.
 
+Many internal improvements.
+
 v0.4
 ----
 This will be the last development version for Erlang R12B-5 and older,</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,26 @@
+2009-10-14  Robert Virding  &lt;rv@stanislaw.local&gt;
+
+	* lfe_macro.erl (exp_predef): Added macro list* and restructured
+	code a little.
+
+2009-10-13  Robert Virding  &lt;rv@stanislaw.local&gt;
+
+	* lfe_eval.lfe (eval-binary, match-binary): Restructured code.
+
+	* lfe_eval.erl (eval_binary, match_binary): Restructured code.
+
+2009-10-06  Robert Virding  &lt;rv@stanislaw.local&gt;
+
+	* lfe_codegen.erl (comp_args, comp_call): Sequentialised
+	evaluation of arguments enforcing left-to-right semantics.
+
 2009-10-02  Robert Virding  &lt;rv@stanislaw.local&gt;
 
 	* lfe_codegen.erl: Cleaned up handling of literals.
 
 2009-09-26  Robert Virding  &lt;rv@stanislaw.local&gt;
 
-	* lfe-eval.erl (eval-binary, match-binary): Cleaned up handling of
+	* lfe_eval.lfe (eval-binary, match-binary): Cleaned up handling of
 	binaries.
 
 	* lfe_eval.erl (eval_binary, match_binary): Cleaned up handling of</diff>
      <filename>src/ChangeLog</filename>
    </modified>
    <modified>
      <diff>@@ -224,24 +224,27 @@ comp_expr(Bin, _, _, St) when is_binary(Bin) -&gt;
 %% Handle the Core data special forms.
 
 comp_call([quote,E], _, _, St) -&gt; {comp_lit(E),St};
-comp_call([cons,H,T], Env, L, St0) -&gt;
-    {Ch,St1} = comp_expr(H, Env, L, St0),
-    {Ct,St2} = comp_expr(T, Env, L, St1),
-    {c_cons(Ch, Ct),St2};
+comp_call([cons,H,T], Env, L, St) -&gt;
+    Call = fun ([Ch,Ct], _, _, St) -&gt; {c_cons(Ch, Ct),St} end,
+    comp_args([H,T], Call, Env, L, St);
+%%     {Ch,St1} = comp_expr(H, Env, L, St0),
+%%     {Ct,St2} = comp_expr(T, Env, L, St1),
+%%     {c_cons(Ch, Ct),St2};
 comp_call([car,E], Env, L, St) -&gt;		%Provide lisp names
     comp_call([hd,E], Env, L, St);
 comp_call([cdr,E], Env, L, St) -&gt;
     comp_call([tl,E], Env, L, St);
 comp_call([list|Es], Env, L, St) -&gt;
-    foldr(fun (E, {T,St0}) -&gt;
-		  {Ce,St1} = comp_expr(E, Env, L, St0),
-		  {c_cons(Ce, T),St1}
-	  end, {c_nil(),St}, Es);
-comp_call([tuple|As], Env, L, St0) -&gt;
-    {Cas,St1} = comp_args(As, Env, L, St0),
-    sequentialise_args(Cas, fun (Args, _, _, St) -&gt;
-				    {c_tuple(Args),St}
-			    end, Env, L, St1);
+    Call = fun (Ces, _, _, St) -&gt;
+		   {foldr(fun (E, T) -&gt; c_cons(E, T) end, c_nil(), Ces),St}
+	   end,
+    comp_args(Es, Call, Env, L, St);
+%%     foldr(fun (E, {T,St0}) -&gt;
+%% 		  {Ce,St1} = comp_expr(E, Env, L, St0),
+%% 		  {c_cons(Ce, T),St1}
+%% 	  end, {c_nil(),St}, Es);
+comp_call([tuple|As], Env, L, St) -&gt;
+    comp_args(As, fun (Args, _, _, St) -&gt; {c_tuple(Args),St} end, Env, L, St);
 %%     {Cas,St1} = comp_args(As, Env, L, St0),
 %%     {c_tuple(Cas),St1};
 comp_call([binary|Segs], Env, L, St) -&gt;
@@ -279,31 +282,32 @@ comp_call(['funcall',F|As], Env, L, St) -&gt;
     comp_funcall(F, As, Env, L, St);
 %%comp_call([call,[quote,erlang],[quote,primop]|As], Env, L, St) -&gt;
 %% An interesting thought to open up system.
-comp_call([call,M,N|As], Env, L, St0) -&gt;
+comp_call([call,M,N|As], Env, L, St) -&gt;
     %% Call a function in another module.
-    {Cm,St1} = comp_expr(M, Env, L, St0),
-    {Cn,St2} = comp_expr(N, Env, L, St1),
-    {Cas,St3} = comp_args(As, Env, L, St2),
-    {#c_call{anno=[L],module=Cm,name=Cn,args=Cas},St3};
+    Call = fun ([Cm,Cn|Cas], _, L, St) -&gt;
+		   {#c_call{anno=[L],module=Cm,name=Cn,args=Cas},St}
+	   end,
+    comp_args([M,N|As], Call, Env, L, St);
+%%     {[Cm,Cn|Cas],St1} = comp_args([M,N|As], Env, L, St0),
+%%     {#c_call{anno=[L],module=Cm,name=Cn,args=Cas},St1};
 %% General function calls.
-comp_call([Fun|As], Env, L, St0) when is_atom(Fun) -&gt;
+comp_call([Fun|As], Env, L, St) when is_atom(Fun) -&gt;
     %% Fun is a symbol which is either a known BIF or function.
-    {Cas,St1} = comp_args(As, Env, L, St0),
-    Call = fun (Args, Env, L, St) -&gt;
-		   Ar = length(Args),
+    Call = fun (Cas, Env, L, St) -&gt;
+		   Ar = length(Cas),
 		   case get_fbinding(Fun, Ar, Env) of
 		       {yes,M,F} -&gt;				%Import
 			   {#c_call{anno=[L],module=c_atom(M),
-				    name=c_atom(F),args=Args},
-			    St};
+				    name=c_atom(F),args=Cas},St};
 		       {yes,Name} -&gt;
 			   %% Might have been renamed, use real function name.
 			   {#c_apply{anno=[L],op=c_fname(Name, Ar),
-				     args=Args},St}
+				     args=Cas},St}
 		   end
 	   end,
-    sequentialise_args(Cas, Call, Env, L, St1).
+    comp_args(As, Call, Env, L, St).
 
+%%     {Cas,St1} = comp_args(As, Env, L, St),
 %%     Ar = length(As),
 %%     case get_fbinding(Fun, Ar, Env) of
 %% 	{yes,M,F} -&gt;				%Import
@@ -314,31 +318,35 @@ comp_call([Fun|As], Env, L, St0) when is_atom(Fun) -&gt;
 %% 	    {#c_apply{anno=[L],op=c_fname(Name, Ar),args=Cas},St1}
 %%     end.
 
-%% sequentialise_args(CompiledArgs, UseCall, Env, Line, State) -&gt;
-%%      {CoreCall,State}.
+%% comp_args(Args, Env, Line, State) -&gt; {ArgList,State}.
+
+comp_args(As, Env, L, St) -&gt;
+    mapfoldl(fun (A, Sta) -&gt; comp_expr(A, Env, L, Sta) end, St, As).
+
+%% comp_args(Args, CallFun, Env, Line, State) -&gt; {Call,State}.
+%%  Sequentialise the evaluation of Args building the Call at the
+%%  bottom. For non-simple arguments use let to break the arg
+%%  evaluation out from the main call. Cannot use foldr as we pass
+%%  data both in an out.
 
-sequentialise_args(Cas, Call, Env, L, St) -&gt;
-    sequentialise_args(Cas, Call, [], Env, L, St).
+comp_args(As, Call, Env, L, St) -&gt;
+    comp_args(As, Call, [], Env, L, St).
 
-sequentialise_args([Ca|Cas], Call, Sas, Env, L, St0) -&gt;
+comp_args([A|As], Call, Cas, Env, L, St0) -&gt;
+    {Ca,St1} = comp_expr(A, Env, L, St0),
     %% Use erlang core compiler lib which does what we want.
     case core_lib:is_simple(Ca) of
-	true -&gt; sequentialise_args(Cas, Call, [Ca|Sas], Env, L, St0);
+	true -&gt; comp_args(As, Call, [Ca|Cas], Env, L, St1);
 	false -&gt;
-	    {Var,St1} = new_c_var(L, St0),
-	    {Rest,St2} = sequentialise_args(Cas, Call, [Var|Sas], Env, L, St1),
+	    {Cv,St2} = new_c_var(L, St1),
+	    {Rest,St3} = comp_args(As, Call, [Cv|Cas], Env, L, St2),
 	    {#c_let{anno=[L],
-		    vars=[Var],
+		    vars=[Cv],
 		    arg=Ca,
-		    body=Rest},St2}
+		    body=Rest},St3}
     end;
-sequentialise_args([], Call, Sas, Env, L, St) -&gt;
-    Call(reverse(Sas), Env, L, St).
-
-%% comp_args(Args, Env, Line, State) -&gt; {ArgList,State}.
-
-comp_args(As, Env, L, St) -&gt;
-    mapfoldl(fun (A, Sta) -&gt; comp_expr(A, Env, L, Sta) end, St, As).
+comp_args([], Call, Cas, Env, L, St) -&gt;
+    Call(reverse(Cas), Env, L, St).
 
 %% comp_lambda(Args, Body, Env, Line, State) -&gt; {#c_fun{},State}.
 %% Compile a (lambda (...) ...).
@@ -395,7 +403,7 @@ comp_match_clause([Pats|Body], Env0, L, St0) -&gt;
 
 %% comp_let(VarBindings, Body, Env, L, State) -&gt; {#c_let{}|#c_case{},State}.
 %% Compile a let expr. We are a little cunning in that we specialise
-%% the the case where all the patterns are variables and there a re no
+%% the the case where all the patterns are variables and there are no
 %% guards, the simple case.
 
 comp_let(Vbs, B, Env, L, St0) -&gt;
@@ -714,9 +722,8 @@ comp_funcall(F, As, Env, L, St0) -&gt;
     comp_funcall_1(F, As, Env, L, St0).		%Naively just do it.
 
 comp_funcall_1(F, As, Env, L, St0) -&gt;
-    {Cf,St1} = comp_expr(F, Env, L, St0),
-    {Cas,St2} = comp_args(As, Env, L, St1),
-    {#c_apply{anno=[L],op=Cf,args=Cas},St2}.
+    {[Cf|Cas],St1} = comp_args([F|As], Env, L, St0),
+    {#c_apply{anno=[L],op=Cf,args=Cas},St1}.
 
 %% comp_binary(Segs, Env, Line, State) -&gt; {#c_binary{},State}.
 </diff>
      <filename>src/lfe_codegen.erl</filename>
    </modified>
    <modified>
      <diff>@@ -117,7 +117,7 @@ scan_and_parse(Io, Ts0) -&gt;
 		E -&gt; exit(E)
 	    end
     end.
-    
+
 %% print([IoDevice], Sexpr) -&gt; ok.
 %% print1(Sexpr) -&gt; [char()].
 %% print1(Sexpr, Depth) -&gt; [char()].
@@ -189,7 +189,7 @@ print1_bits(Bits, _) -&gt;				%0 &lt; Size &lt; 8
 %% Print the tail of a list. We know about dotted pairs.
 
 print1_tail([], _) -&gt; &quot;&quot;;
-print1_tail(_, 1) -&gt; &quot; ...&quot;;    
+print1_tail(_, 1) -&gt; &quot; ...&quot;;
 print1_tail([S|Ss], D) -&gt;
     [$\s,print1(S, D-1)|print1_tail(Ss, D-1)];
 print1_tail(S, D) -&gt; [&quot; . &quot;|print1(S, D-1)].</diff>
      <filename>src/lfe_io.erl</filename>
    </modified>
    <modified>
      <diff>@@ -135,7 +135,7 @@ is_fbound(N, A, [{function,N,A,_,_}|_]) -&gt; true;
 is_fbound(N, _, [{macro,N,_}|_]) -&gt; false;	%Macros shadow
 is_fbound(N, A, [_|Env]) -&gt; is_fbound(N, A, Env);
 is_fbound(N, A, []) -&gt; is_bif(N, A).    	%Known BIF, LFE or erlang
-    
+
 get_fbinding(N, A, [{function,N,A,V}|_]) -&gt; {yes,V};
 get_fbinding(N, A, [{function,N,A,M,F}|_]) -&gt; {yes,M,F};	%Import
 get_fbinding(N, _, [{macro,N,_}|_]) -&gt; no;			%Macros shadow
@@ -175,7 +175,7 @@ is_mbound(N, [{function,N,_,_,_}|_]) -&gt; false;	%Functions shadow
 is_mbound(N, [{macro,N,_}|_]) -&gt; true;
 is_mbound(N, [_|Env]) -&gt; is_mbound(N, Env);
 is_mbound(_, []) -&gt; false.
-    
+
 get_mbinding(N, [{function,N,_,_}|_]) -&gt; no;	%Functions shadow
 get_mbinding(N, [{function,N,_,_,_}|_]) -&gt; no;	%Functions shadow
 get_mbinding(N, [{macro,N,V}|_]) -&gt; {yes,V};
@@ -355,8 +355,8 @@ subst(_, _, Tree) -&gt; Tree.
 		_ -&gt; Tree
 	    end
     end.
-    
-eval(Sexpr) -&gt; lfe_eval:eval(Sexpr, new_env()).	%Empty environment.
+
+eval(Sexpr) -&gt; lfe_eval:expr(Sexpr, new_env()).	%Empty environment.
 
 %% Miscellaneous useful LFE functions.
 </diff>
      <filename>src/lfe_lib.erl</filename>
    </modified>
    <modified>
      <diff>@@ -607,7 +607,7 @@ check_try_catch([['catch'|Cls],['after'|B]], Env, L, St0) -&gt;
     check_body(B, Env, L, St1);
 check_try_catch([['after'|B]], Env, L, St) -&gt;
     check_body(B, Env, L, St);
-check_try_catch(C, _, L, St) -&gt; bad_form_error(L, {'try',C}, St).
+check_try_catch(_, _, L, St) -&gt; bad_form_error(L, 'try', St).
 
 %% check_pat_guard([Pat{,Guard}|Body, Env, L, State) -&gt;
 %%      {Body,PatVars,Env,State}.</diff>
      <filename>src/lfe_lint.erl</filename>
    </modified>
    <modified>
      <diff>@@ -293,7 +293,7 @@ def_record(Name, Fdefs, Env, St0) -&gt;
 	     [[rec],['is_record',rec,[quote,Name],length(Fields)+1]]],
 	    ['defmacro',Match,
 	     [fds,
-	      ['let',[[def,[list|lists:duplicate(length(Fields), ?Q('_'))]]],
+	      ['let',[[def,[list|lists:duplicate(length(Fields),?Q('_'))]]],
 	       [backquote,
 		[tuple,?Q(Name),['unquote-splicing',[Fu,fds,def]]]]]]],
 	    ['defmacro',Set,
@@ -569,38 +569,49 @@ exp_macro([Mac|Args], Def0, Env, St0) -&gt;
 exp_predef([backquote,Bq], _, St) -&gt;
     {yes,bq_expand(Bq),St};
 exp_predef(['++'|Abody], _, St) -&gt;
-    case Abody of
-	[E] -&gt; {yes,E,St};
-	[E|Es] -&gt; {yes,[call,?Q(erlang),?Q('++'),E,['++'|Es]],St};
-	[] -&gt; {yes,[],St}
-    end;
+    Exp = case Abody of
+	      [E] -&gt; E;
+	      [E|Es] -&gt; [call,?Q(erlang),?Q('++'),E,['++'|Es]];
+	      [] -&gt; []
+	  end,
+    {yes,Exp,St};
 exp_predef([':',M,F|As], _, St) -&gt;
     {yes,['call',?Q(M),?Q(F)|As], St};
 exp_predef(['?'], _, St) -&gt;
     {yes,['receive',['omega','omega']], St};
+exp_predef(['list*'|As], _, St) -&gt;
+    Exp = case As of
+	      [E] -&gt; E;
+	      [E|Es] -&gt; [cons,E,['list*'|Es]];
+	      [] -&gt; []
+	  end,
+    {yes,Exp,St};
 exp_predef(['let*'|Lbody], _, St) -&gt;
-    case Lbody of
-	[[Vb|Vbs]|B] -&gt; {yes,['let',[Vb],['let*',Vbs|B]], St};
-	[[]|B] -&gt; {yes,['progn'|B], St};
-	[Vb|B] -&gt; {yes,['let',Vb|B], St}	%Pass error to let for lint.
-    end;
+    Exp = case Lbody of
+	      [[Vb|Vbs]|B] -&gt; ['let',[Vb],['let*',Vbs|B]];
+	      [[]|B] -&gt; ['progn'|B];
+	      [Vb|B] -&gt; ['let',Vb|B]		%Pass error to let for lint.
+	  end,
+    {yes,Exp,St};
 exp_predef(['flet*'|Lbody], _, St) -&gt;
-    case Lbody of
-	[[Vb|Vbs]|B] -&gt; {yes,['flet',[Vb],['flet*',Vbs|B]], St};
-	[[]|B] -&gt; {yes,['progn'|B], St};
-	[Vb|B] -&gt; {yes,['flet',Vb|B], St}	%Pass error to flet for lint.
-    end;
+    Exp = case Lbody of
+	      [[Vb|Vbs]|B] -&gt; ['flet',[Vb],['flet*',Vbs|B]];
+	      [[]|B] -&gt; ['progn'|B];
+	      [Vb|B] -&gt; ['flet',Vb|B]		%Pass error to flet for lint.
+	  end,
+    {yes,Exp,St};
 exp_predef(['cond'|Cbody], _, St) -&gt;
-    case Cbody of
-	[['else'|B]] -&gt; {yes,['progn'|B], St};
-	[[['?=',P,E]|B]|Cond] -&gt;
-	    {yes,['case',E,[P|B],['_',['cond'|Cond]]], St};
-	[[['?=',P,['when',_]=G,E]|B]|Cond] -&gt;
-	    {yes,['case',E,[P,G|B],['_',['cond'|Cond]]], St};
-	[[Test|B]|Cond] -&gt;
-	    {yes,['if',Test,['progn'|B],['cond'|Cond]], St};
-	[] -&gt; {yes,?Q(false),St}
-    end;
+    Exp = case Cbody of
+	      [['else'|B]] -&gt; ['progn'|B];
+	      [[['?=',P,E]|B]|Cond] -&gt;
+		  ['case',E,[P|B],['_',['cond'|Cond]]];
+	      [[['?=',P,['when',_]=G,E]|B]|Cond] -&gt;
+		  ['case',E,[P,G|B],['_',['cond'|Cond]]];
+	      [[Test|B]|Cond] -&gt;
+		  ['if',Test,['progn'|B],['cond'|Cond]];
+	      [] -&gt; ?Q(false)
+	  end,
+    {yes,Exp,St};
 exp_predef(['do'|Dbody], _, St0) -&gt;
     %% (do ((v i c) ...) (test val) . body) but of limited use as it
     %% stands as we have to everything in new values.
@@ -625,21 +636,21 @@ exp_predef([bc|Bbody], _, St0) -&gt;
     {Exp,St1} = bc_te(E, Qs, St0),
     {yes,Exp,St1};
 exp_predef(['andalso'|Abody], _, St) -&gt;
-    case Abody of
-	[E] -&gt; {yes,E,St};
-	[E|Es] -&gt;
-	    Exp = ['case',E,[?Q(true),['andalso'|Es]],[?Q(false),?Q(false)]],
-	    {yes,Exp,St};
-	[] -&gt; {yes,?Q(true),St}
-    end;
+    Exp = case Abody of
+	      [E] -&gt; E;				%Let user check last call
+	      [E|Es] -&gt;
+		  ['case',E,[?Q(true),['andalso'|Es]],[?Q(false),?Q(false)]];
+	      [] -&gt; ?Q(true)
+	  end,
+    {yes,Exp,St};
 exp_predef(['orelse'|Obody], _, St) -&gt;
-    case Obody of
-	[E] -&gt; {yes,E,St};			%Let user check last call
-	[E|Es] -&gt;
-	    Exp = ['case',E,[?Q(true),?Q(true)],[?Q(false),['orelse'|Es]]],
-	    {yes,Exp,St};
-	[] -&gt; {yes,?Q(false),St}
-    end;
+    Exp = case Obody of
+	      [E] -&gt; E;				%Let user check last call
+	      [E|Es] -&gt;
+		  ['case',E,[?Q(true),?Q(true)],[?Q(false),['orelse'|Es]]];
+	      [] -&gt; ?Q(false)
+	  end,
+    {yes,Exp,St};
 exp_predef(['fun',F,Ar], _, St0) when is_atom(F), is_integer(Ar), Ar &gt;= 0 -&gt;
     {Vs,St1} = new_symbs(Ar, St0),
     {yes,['lambda',Vs,[F|Vs]],St1};
@@ -659,13 +670,14 @@ exp_predef(['include-file'|Ibody], _, St) -&gt;
 exp_predef(['begin'|Body], _, St) -&gt;
     {yes,['progn'|Body],St};
 exp_predef(['define',Head|Body], _, St) -&gt;
-    case is_symb_list(Head) of
-	true -&gt;
-	    {yes,['define-function',hd(Head),[lambda,tl(Head)|Body]],St};
-	false -&gt;
-	    %% Let next step catch errors here.
-	    {yes,['define-function',Head|Body],St}
-    end;
+    Exp = case is_symb_list(Head) of
+	      true -&gt;
+		  ['define-function',hd(Head),[lambda,tl(Head)|Body]];
+	      false -&gt;
+		  %% Let next step catch errors here.
+		  ['define-function',Head|Body]
+	  end,
+    {yes,Exp,St};
 exp_predef(['define-record'|Def], _, St) -&gt;
     {yes,[defrecord|Def],St};
 exp_predef(['define-syntax',Name,Def], _, St) -&gt;
@@ -724,11 +736,11 @@ expand_defun(Name, [Args|Rest]) -&gt;
 %%  N.B. New macro definition is function of 1 argument, whole
 %%  argument list of macro call.
 
-expand_defmacro(Name, [Args|Rest]) -&gt;
+expand_defmacro(Name, [Args|Rest]=Cls) -&gt;
     case is_symb_list(Args) of
 	true -&gt; [Name,['match-lambda',[[Args]|Rest]]];
 	false -&gt;
-	    Mcls = map(fun ([Head|Body]) -&gt; [[Head]|Body] end, [Args|Rest]),
+	    Mcls = map(fun ([Head|Body]) -&gt; [[Head]|Body] end, Cls),
 	    [Name,['match-lambda'|Mcls]]
     end.
 </diff>
      <filename>src/lfe_macro.erl</filename>
    </modified>
    <modified>
      <diff>@@ -84,7 +84,7 @@ sexpr1([{'#B(',_}|Ts0]) -&gt;
     case proper_list(Ts0) of
 	{List,[{')',_}|Ts1]} -&gt;
 	    %% Build and eval a binary sexpr.
-	    case catch lfe_eval:eval([binary|List]) of
+	    case catch lfe_eval:expr([binary|List]) of
 		Bin when is_bitstring(Bin) -&gt; {Bin,Ts1};
 		_ -&gt; throw({error,{illegal,binary},Ts1})
 	    end;</diff>
      <filename>src/lfe_parse.erl</filename>
    </modified>
    <modified>
      <diff>@@ -136,9 +136,17 @@ collect_imps(Is, St) -&gt;
 		  S#param{env=Env}
 	  end, St, Is).
     
+%% exp_function(Lambda, State) -&gt; Lambda.
+%%  The resultant code matches the arguments in two steps: first the
+%%  THIS arguemnt is matched and then the expanded function body
+%%  ((match-)lambda) is funcalled. We KNOW that funcall of a
+%%  (match-)lambda is inline expanded into a let or case so this is
+%%  efficient.
+
 exp_function(Lambda, #param{this=Th,env=Env}) -&gt;
     As = new_args(lambda_arity(Lambda)),
     ['match-lambda',[As ++ [Th],[funcall,exp_expr(Lambda, Env)|As]]].
+
 %% exp_function(['match-lambda'|Cls0], #param{this=Th,env=Env}) -&gt;
 %%     Cls1 = map(fun ([As|Body]) -&gt;
 %% 		       exp_clause([As ++ [Th]|Body], Env)</diff>
      <filename>src/lfe_pmod.erl</filename>
    </modified>
    <modified>
      <diff>@@ -106,7 +106,7 @@ update_shell_vars(Form, Value, Env) -&gt;
 	   {'+',Form},
 	   {'***',fetch_vbinding('**', Env)},
 	   {'**',fetch_vbinding('*', Env)},
-	   {'*',Value}]).    
+	   {'*',Value}]).
 
 add_shell_macros(Env0) -&gt;
     %% We write macros in LFE and expand them with macro package.
@@ -239,7 +239,7 @@ set(_, _, _) -&gt; no.
 %%  added to the standard base environment.
 
 -record(slurp, {mod,imps=[]}).			%For slurping
-    
+
 slurp([File], Eenv, Benv) -&gt;
     Name = lfe_eval:expr(File, Eenv),		%Get file name
     {ok,Fs0} = lfe_io:parse_file(Name),
@@ -309,7 +309,7 @@ safe_fetch(Key, D, Def) -&gt;
 	{ok,Val} -&gt; Val;
 	error -&gt; Def
     end.
- 
+
 %% (defsyntax safe_fetch
 %%   ((key d def)
 %%    (case (find key d)</diff>
      <filename>src/lfe_shell.erl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8388e38d5199457623ecc03ec9e0f81c2de5e45f</id>
    </parent>
  </parents>
  <author>
    <name>Robert Virding</name>
    <email>rvirding@gmail.com</email>
  </author>
  <url>http://github.com/rvirding/lfe/commit/79acf10817890d87e4d6b63797b318173416c8ec</url>
  <id>79acf10817890d87e4d6b63797b318173416c8ec</id>
  <committed-date>2009-10-13T16:12:21-07:00</committed-date>
  <authored-date>2009-10-13T16:12:21-07:00</authored-date>
  <message>A maze if twisty little patches, all alike.</message>
  <tree>5a84642da3fa73210d3a8dde46b9ecc6c6643b56</tree>
  <committer>
    <name>Robert Virding</name>
    <email>rvirding@gmail.com</email>
  </committer>
</commit>
