diff -rc otp_src_R9B-1/lib/compiler/src/sys_pre_expand.erl otp_src_R9B-1-apr/lib/compiler/src/sys_pre_expand.erl
*** otp_src_R9B-1/lib/compiler/src/sys_pre_expand.erl	Wed Oct  2 23:16:55 2002
--- otp_src_R9B-1-apr/lib/compiler/src/sys_pre_expand.erl	Tue Apr  1 11:15:43 2003
***************
*** 343,348 ****
--- 343,355 ----
  expr({bin,Line,Es0}, Vs, St0) ->
      {Es1,Esvs,Esus,St1} = expr_bin(Es0, Vs, St0),
      {{bin,Line,Es1},Esvs,Esus,St1};
+ expr({varset,L,{var,Vl,Var}, Es0}, Vs, St0) ->
+     {Es,Esvs,Esus,St1} = expr(Es0, Vs, St0),
+     {{call,L,{remote,L,{atom,L,erlang},{atom,L,put}}, [{atom,Vl,Var},Es]},
+      Esvs,Esus,St1};
+ expr({varget,L,{var,Vl,Var}}, Vs, St) ->
+     {{call,L,{remote,L,{atom,L,erlang},{atom,L,get}},[{atom,Vl,Var}]},
+      [],[],St};
  expr({block,Line,Es0}, Vs, St0) ->
      {Es,Esvs,Esus,St1} = exprs(Es0, Vs, St0),
      {{block,Line,Es},Esvs,Esus,St1};
diff -rc otp_src_R9B-1/lib/stdlib/src/erl_eval.erl otp_src_R9B-1-apr/lib/stdlib/src/erl_eval.erl
*** otp_src_R9B-1/lib/stdlib/src/erl_eval.erl	Wed Oct  2 23:14:50 2002
--- otp_src_R9B-1-apr/lib/stdlib/src/erl_eval.erl	Tue Apr  1 11:15:11 2003
***************
*** 109,114 ****
--- 109,127 ----
      exit({undef_record,Name});
  expr({record,_,_,Name,_}, _, _) ->
      exit({undef_record,Name});
+ expr({varset,_,{var,_,V}, E}, Bs0, Lf) ->
+     {value,Val,Bs} = expr(E, Bs0, Lf),
+     if V == '_' ->
+ 	    {value, self() ! Val, Bs};
+        true ->
+ 	    {value, put(V, Val), Bs}
+     end;
+ expr({varget,_,{var,_,V}}, Bs, Lf) ->
+     if V == '_' ->
+ 	    {value, receive Val -> Val end, Bs};
+        true ->
+ 	    {value, get(V), Bs}
+     end;
  expr({block,_,Es}, Bs, Lf) ->
      exprs(Es, Bs, Lf);
  expr({'if',_,Cs}, Bs, Lf) ->
diff -rc otp_src_R9B-1/lib/stdlib/src/erl_lint.erl otp_src_R9B-1-apr/lib/stdlib/src/erl_lint.erl
*** otp_src_R9B-1/lib/stdlib/src/erl_lint.erl	Wed Oct  2 23:14:58 2002
--- otp_src_R9B-1-apr/lib/stdlib/src/erl_lint.erl	Tue Apr  1 11:15:22 2003
***************
*** 1167,1172 ****
--- 1167,1176 ----
      end;
  expr({bin,Line,Fs}, Vt, St) ->
      expr_bin(Line, Fs, Vt, St, fun expr/3);
+ expr({varset,_,{var,_,V}, E}, Vt, St) ->
+     expr(E, Vt, St);
+ expr({varget,_,{var,_,V}}, Vt, St) ->
+     {[], St};
  expr({block,_Line,Es}, Vt, St) ->
      %% Unfold block into a sequence.
      exprs(Es, Vt, St);
diff -rc otp_src_R9B-1/lib/stdlib/src/erl_parse.yrl otp_src_R9B-1-apr/lib/stdlib/src/erl_parse.yrl
*** otp_src_R9B-1/lib/stdlib/src/erl_parse.yrl	Wed Oct  2 23:18:20 2002
--- otp_src_R9B-1-apr/lib/stdlib/src/erl_parse.yrl	Tue Apr  1 11:14:45 2003
***************
*** 45,51 ****
  Terminals
  char integer float atom string var
  
! '(' ')' ',' '->' ':-' '{' '}' '[' ']' '|' '||' '<-' ';' ':' '#' '.'
  'after' 'begin' 'case' 'try' 'catch' 'end' 'fun' 'if' 'of' 'receive' 'when'
  'andalso' 'orelse' 'query'
  'bnot' 'not'
--- 45,51 ----
  Terminals
  char integer float atom string var
  
! '(' ')' ',' '->' ':-' ':=' '{' '}' '[' ']' '|' '||' '<-' ';' ':' '#' '.'
  'after' 'begin' 'case' 'try' 'catch' 'end' 'fun' 'if' 'of' 'receive' 'when'
  'andalso' 'orelse' 'query'
  'bnot' 'not'
***************
*** 133,138 ****
--- 133,139 ----
  expr_900 -> expr_max : '$1'.
  
  expr_max -> var : '$1'.
+ expr_max -> '*' var : {varget,line('$2'),'$2'}.
  expr_max -> atomic : '$1'.
  expr_max -> list : '$1'.
  expr_max -> binary : '$1'.
***************
*** 140,145 ****
--- 141,147 ----
  expr_max -> tuple : '$1'.
  %%expr_max -> struct : '$1'.
  expr_max -> '(' expr ')' : '$2'.
+ expr_max -> var ':=' expr_max : {varset,line('$2'),'$1','$3'}.
  expr_max -> 'begin' exprs 'end' : {block,line('$1'),'$2'}.
  expr_max -> if_expr : '$1'.
  expr_max -> case_expr : '$1'.
diff -rc otp_src_R9B-1/lib/stdlib/src/erl_scan.erl otp_src_R9B-1-apr/lib/stdlib/src/erl_scan.erl
*** otp_src_R9B-1/lib/stdlib/src/erl_scan.erl	Wed Oct  2 23:15:08 2002
--- otp_src_R9B-1-apr/lib/stdlib/src/erl_scan.erl	Tue Apr  1 11:14:56 2003
***************
*** 357,362 ****
--- 357,364 ----
      scan1(Cs, [{'||',Pos}|Toks], Pos);
  scan1([$:,$-|Cs], Toks, Pos) ->
      scan1(Cs, [{':-',Pos}|Toks], Pos);
+ scan1([$:,$=|Cs], Toks, Pos) ->
+     scan1(Cs, [{':=',Pos}|Toks], Pos);
  scan1([$.|Cs], Toks, Pos) ->
      scan_dot(Cs, Toks, Pos);
  scan1([C|Cs], Toks, Pos) ->				%Punctuation character
