Redirecting functions calls ?

yerl <>
Fri Apr 23 09:57:50 CEST 2004


Hi Sean,

Incredible bug!! Is it fixed?
The test/1 guard (i.e. when fred) is responsible of the error.
Any onther idea to achieve what I want?

Lot of thanks
Younès


----Message d'origine----
>Copie à: 
>De: Sean Hinde <>
>Sujet: Re: Redirecting functions calls ?
>Date: Thu, 22 Apr 2004 23:18:18 +0100
>A: 
>
>Hi,
>
>
>On 23 Apr 2004, at 00:39,  wrote:
>
>> Hi All,
>> Is there a method to redirect the call of a function and execute  
>> another one instead.
>> For exemple, lets assume 2 functions "foo" and "bar":
>>
>> foo(X) ->
>>  blablabla,
>>  26.
>>
>> bar(Y) ->
>>  blablabla,
>>  38.
>>
>> When calling foo(10), I want to intercept this call and replace with  
>> bar(10). Of course, the result of foo(10) is replaced by the one of  
>> bar(10).
>>
>> Can anyboby help me!
>
>Actually this is almost possible - I discovered a compiler bug just  
>today:
>
>-module(compiler_bug).
>-export([test/1, wow/1]).
>
>test(A) when fred ->
>     {ok, A}.
>
>wow(A) ->
>     wow.
>
>This compiles fine. Trying this out:
>
>175> compiler_bug:test(1).
>
>=ERROR REPORT==== 22-Apr-2004::23:11:45 ===
>Error in process <0.1000.0> on node '' with exit  
>value:  
>{function_clause,[{compiler_bug,wow,[1]},{erl_eval,do_apply,5},{shell,ev 
>al_loop,2}]}
>
>** exited: {function_clause,[{compiler_bug,wow,[1]},
>                              {erl_eval,do_apply,5},
>                              {shell,eval_loop,2}]} **
>
>I haven't managed to make it correctly call wow(1), but the error  
>report suggests that my call to test/1 did indeed result in a call to  
>wow/1
>
>:-)
>
>Sean
>
>




More information about the erlang-bugs mailing list