Re: [Pharo-users] MetaLink>>level: failing?

2018-11-22 Thread Vitor Medina Cruz
It works like a charm now!!! Thanks!

On Tue, Nov 13, 2018 at 11:23 AM Marcus Denker 
wrote:

> More progress… in the latest Pharo7 this is now working... (#operation
> reifies the original operation):
>
> | link choice |
>
> choice := true.
> link := MetaLink new metaObject: [ :operation |
>   UIManager default alert:
> 'Linked Version'.
>   choice ifTrue: [operation
> value ].
>];
> selector: #value:;
> arguments: #(#operation);
> control: #instead.
>
>
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
>
> No need for using #level: as #operation for method execution is reifying
> the *original* method that would have been executed without the link.
>
> (this then is, too, what will be used to make finally “turning off”
> instead links work correctly: if the instead link is not active (due to a
> condition or level), it will
> instead execute “operation value”, that is, what would have been done
> without the #instead link present.
>
> Marcus
>
> On 7 Nov 2018, at 15:47, Marcus Denker  wrote:
>
> Hi,
>
> I added
>
>
> https://pharo.fogbugz.com/f/cases/22642/instead-links-and-meta-level-original-code-not-executed
>
> as a workaround, you can use a #before link with an explicit return:
>
>
> choice := true.
> link := MetaLink new metaObject: [ :object :selector :arguments :context |
>   UIManager default alert:
> 'Linked Version'.
>   choice ifTrue: [ context
> sender sender sender sender return: (object perform: selector
> withArguments: arguments)].
>];
> selector: #value:value:value:value:;
>  arguments: #(#object #selector #arguments #context);
>  control: #before;
>  level: 0.
>
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
>
> (yes, the  context sender sender sender  shows that #context needs to do
> the right thing when using  level: 0. or not… another thing to fix)
>
> Marcus
>
> On 7 Nov 2018, at 15:08, Marcus Denker  wrote:
>
> Hello,
>
> I added a fist issue (and fix) for parts of the problem
>
>
> https://pharo.fogbugz.com/f/cases/22641/Semantic-analysis-needs-to-take-instead-preambles-into-account
> https://github.com/pharo-project/pharo/pull/1960
>
> But after this, it does not work as the level just turns off calling the
> meta level code, but does not execute the
> original code where the #instead is put.
> (#instead in general needs more work in this implementation).
>
> I will open another issue for that.
>
> Marcus
>
> On 31 Oct 2018, at 18:03, Vitor Medina Cruz  wrote:
>
> Thanks! Is there an issue on fogbuzz where I can be notified of
> resolution? Do you need me to create it?
>
> After that how can update the code? Software update is safe or should I
> create a new image?
>
> regards,
> Vitor
>
> On Mon, Oct 29, 2018 at 12:08 PM Marcus Denker 
> wrote:
>
>>
>>
>> On 25 Oct 2018, at 01:33, Vitor Medina Cruz  wrote:
>>
>> Hello,
>>
>> I am playing with MetaLink, really cool!, but I am having issues that I
>> am unsure if it's some erro or if I am doing something wrong (I am using
>> Pharo 6.1 32 bits in windows.). Consider:
>>
>> TestMetaLink>>execute
>> UIManager default alert: 'Actual Version'.
>>
>> And in Playground:
>>
>> | link |
>>
>> link := MetaLink new metaObject: [ :object | UIManager default alert:
>> 'Linked Version' ];
>> selector: #value:;
>>  arguments: #(#object);
>>  control: #instead.
>>
>>
>> (TestMetaLink >> #execute) ast link: link.
>> TestMetaLink new execute.
>> link uninstall.
>>
>> This works as expected, an alert with 'Linked Version' is promped. But
>> then suppose I want to execute the actual node alongside with the linked
>> one considering some condition:
>>
>> | link choice |
>>
>> choice := true.
>> link := MetaLink new metaObject: [ :object :selector :arguments |
>>   UIManager default alert:
>> 'Linked Version'.
>>   choice ifTrue: [ object
>> perform: selector withArguments: arguments].
>>];
>> selector: #value:value:value:;
>>  arguments: #(#object #selector #arguments);
>>  control: #instead;
>> * level: 0*.
>>
>>
>> (TestMetaLink >> #execute) ast link: link.
>> TestMetaLink new execute.
>> link uninstall.
>>
>> As I understand, level:0 is necessary in order to avoid an infinite loop,
>> but then I get an error:
>>
>> KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary
>>
>> Am I doing something wrong? Is that an error?
>>
>> Hello,
>>
>> Yes, this 

Re: [Pharo-users] MetaLink>>level: failing?

2018-11-13 Thread Marcus Denker
More progress… in the latest Pharo7 this is now working... (#operation reifies 
the original operation):

| link choice | 

choice := true.
link := MetaLink new metaObject: [ :operation | 
  UIManager default alert: 'Linked 
Version'.
  choice ifTrue: [operation value ].
   ]; 
selector: #value:;
arguments: #(#operation);
control: #instead.


(TestMetaLink >> #execute) ast link: link.
TestMetaLink new execute.
link uninstall.

No need for using #level: as #operation for method execution is reifying the 
*original* method that would have been executed without the link.

(this then is, too, what will be used to make finally “turning off” instead 
links work correctly: if the instead link is not active (due to a condition or 
level), it will
instead execute “operation value”, that is, what would have been done without 
the #instead link present.

Marcus

> On 7 Nov 2018, at 15:47, Marcus Denker  wrote:
> 
> Hi,
> 
> I added 
> 
>   
> https://pharo.fogbugz.com/f/cases/22642/instead-links-and-meta-level-original-code-not-executed
>  
> 
> 
> as a workaround, you can use a #before link with an explicit return:
> 
> 
> choice := true.
> link := MetaLink new metaObject: [ :object :selector :arguments :context | 
>   UIManager default alert: 
> 'Linked Version'.
>   choice ifTrue: [ context sender 
> sender sender sender return: (object perform: selector withArguments: 
> arguments)].
>]; 
> selector: #value:value:value:value:;
>  arguments: #(#object #selector #arguments #context);
>  control: #before;
>level: 0.
> 
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
> 
> (yes, the  context sender sender sender  shows that #context needs to do the 
> right thing when using  level: 0. or not… another thing to fix)
> 
>   Marcus
> 
>> On 7 Nov 2018, at 15:08, Marcus Denker > > wrote:
>> 
>> Hello,
>> 
>> I added a fist issue (and fix) for parts of the problem
>> 
>> https://pharo.fogbugz.com/f/cases/22641/Semantic-analysis-needs-to-take-instead-preambles-into-account
>>  
>> 
>> https://github.com/pharo-project/pharo/pull/1960 
>> 
>> 
>> But after this, it does not work as the level just turns off calling the 
>> meta level code, but does not execute the
>> original code where the #instead is put.
>> (#instead in general needs more work in this implementation).
>> 
>> I will open another issue for that.
>> 
>>  Marcus
>> 
>>> On 31 Oct 2018, at 18:03, Vitor Medina Cruz >> > wrote:
>>> 
>>> Thanks! Is there an issue on fogbuzz where I can be notified of resolution? 
>>> Do you need me to create it?
>>> 
>>> After that how can update the code? Software update is safe or should I 
>>> create a new image?
>>> 
>>> regards,
>>> Vitor
>>> 
>>> On Mon, Oct 29, 2018 at 12:08 PM Marcus Denker >> > wrote:
>>> 
>>> 
 On 25 Oct 2018, at 01:33, Vitor Medina Cruz >>> > wrote:
 
 Hello,
 
 I am playing with MetaLink, really cool!, but I am having issues that I am 
 unsure if it's some erro or if I am doing something wrong (I am using 
 Pharo 6.1 32 bits in windows.). Consider:
 
 TestMetaLink>>execute
 UIManager default alert: 'Actual Version'.
 
 And in Playground:
 
 | link | 
 
 link := MetaLink new metaObject: [ :object | UIManager default alert: 
 'Linked Version' ];
 selector: #value:;
  arguments: #(#object);
  control: #instead.
 
 
 (TestMetaLink >> #execute) ast link: link.
 TestMetaLink new execute.
 link uninstall.
 
 This works as expected, an alert with 'Linked Version' is promped. But 
 then suppose I want to execute the actual node alongside with the linked 
 one considering some condition:
 
 | link choice | 
 
 choice := true.
 link := MetaLink new metaObject: [ :object :selector :arguments | 
   UIManager default alert: 
 'Linked Version'.
   choice ifTrue: [ object 
 perform: selector withArguments: arguments].
]; 
 selector: 

Re: [Pharo-users] MetaLink>>level: failing?

2018-11-07 Thread Marcus Denker
Hi,

I added 


https://pharo.fogbugz.com/f/cases/22642/instead-links-and-meta-level-original-code-not-executed

as a workaround, you can use a #before link with an explicit return:


choice := true.
link := MetaLink new metaObject: [ :object :selector :arguments :context | 
  UIManager default alert: 'Linked 
Version'.
  choice ifTrue: [ context sender 
sender sender sender return: (object perform: selector withArguments: 
arguments)].
   ]; 
selector: #value:value:value:value:;
 arguments: #(#object #selector #arguments #context);
 control: #before;
 level: 0.

(TestMetaLink >> #execute) ast link: link.
TestMetaLink new execute.
link uninstall.

(yes, the  context sender sender sender  shows that #context needs to do the 
right thing when using  level: 0. or not… another thing to fix)

Marcus

> On 7 Nov 2018, at 15:08, Marcus Denker  wrote:
> 
> Hello,
> 
> I added a fist issue (and fix) for parts of the problem
> 
> https://pharo.fogbugz.com/f/cases/22641/Semantic-analysis-needs-to-take-instead-preambles-into-account
>  
> 
> https://github.com/pharo-project/pharo/pull/1960 
> 
> 
> But after this, it does not work as the level just turns off calling the meta 
> level code, but does not execute the
> original code where the #instead is put.
> (#instead in general needs more work in this implementation).
> 
> I will open another issue for that.
> 
>   Marcus
> 
>> On 31 Oct 2018, at 18:03, Vitor Medina Cruz > > wrote:
>> 
>> Thanks! Is there an issue on fogbuzz where I can be notified of resolution? 
>> Do you need me to create it?
>> 
>> After that how can update the code? Software update is safe or should I 
>> create a new image?
>> 
>> regards,
>> Vitor
>> 
>> On Mon, Oct 29, 2018 at 12:08 PM Marcus Denker > > wrote:
>> 
>> 
>>> On 25 Oct 2018, at 01:33, Vitor Medina Cruz >> > wrote:
>>> 
>>> Hello,
>>> 
>>> I am playing with MetaLink, really cool!, but I am having issues that I am 
>>> unsure if it's some erro or if I am doing something wrong (I am using Pharo 
>>> 6.1 32 bits in windows.). Consider:
>>> 
>>> TestMetaLink>>execute
>>> UIManager default alert: 'Actual Version'.
>>> 
>>> And in Playground:
>>> 
>>> | link | 
>>> 
>>> link := MetaLink new metaObject: [ :object | UIManager default alert: 
>>> 'Linked Version' ];
>>> selector: #value:;
>>>  arguments: #(#object);
>>>  control: #instead.
>>> 
>>> 
>>> (TestMetaLink >> #execute) ast link: link.
>>> TestMetaLink new execute.
>>> link uninstall.
>>> 
>>> This works as expected, an alert with 'Linked Version' is promped. But then 
>>> suppose I want to execute the actual node alongside with the linked one 
>>> considering some condition:
>>> 
>>> | link choice | 
>>> 
>>> choice := true.
>>> link := MetaLink new metaObject: [ :object :selector :arguments | 
>>>   UIManager default alert: 
>>> 'Linked Version'.
>>>   choice ifTrue: [ object 
>>> perform: selector withArguments: arguments].
>>>]; 
>>> selector: #value:value:value:;
>>>  arguments: #(#object #selector #arguments);
>>>  control: #instead;
>>>  level: 0.
>>> 
>>> 
>>> (TestMetaLink >> #execute) ast link: link.
>>> TestMetaLink new execute.
>>> link uninstall.
>>> 
>>> As I understand, level:0 is necessary in order to avoid an infinite loop, 
>>> but then I get an error:
>>> 
>>> KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary
>>> 
>>> Am I doing something wrong? Is that an error? 
>>> 
>> Hello,
>> 
>> Yes, this looks like a bug. I will fix it over the next days.
>> 
>>  Marcus
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 



Re: [Pharo-users] MetaLink>>level: failing?

2018-11-07 Thread Marcus Denker
Hello,

I added a fist issue (and fix) for parts of the problem

https://pharo.fogbugz.com/f/cases/22641/Semantic-analysis-needs-to-take-instead-preambles-into-account
https://github.com/pharo-project/pharo/pull/1960

But after this, it does not work as the level just turns off calling the meta 
level code, but does not execute the
original code where the #instead is put.
(#instead in general needs more work in this implementation).

I will open another issue for that.

Marcus

> On 31 Oct 2018, at 18:03, Vitor Medina Cruz  wrote:
> 
> Thanks! Is there an issue on fogbuzz where I can be notified of resolution? 
> Do you need me to create it?
> 
> After that how can update the code? Software update is safe or should I 
> create a new image?
> 
> regards,
> Vitor
> 
> On Mon, Oct 29, 2018 at 12:08 PM Marcus Denker  > wrote:
> 
> 
>> On 25 Oct 2018, at 01:33, Vitor Medina Cruz > > wrote:
>> 
>> Hello,
>> 
>> I am playing with MetaLink, really cool!, but I am having issues that I am 
>> unsure if it's some erro or if I am doing something wrong (I am using Pharo 
>> 6.1 32 bits in windows.). Consider:
>> 
>> TestMetaLink>>execute
>> UIManager default alert: 'Actual Version'.
>> 
>> And in Playground:
>> 
>> | link | 
>> 
>> link := MetaLink new metaObject: [ :object | UIManager default alert: 
>> 'Linked Version' ];
>> selector: #value:;
>>  arguments: #(#object);
>>  control: #instead.
>> 
>> 
>> (TestMetaLink >> #execute) ast link: link.
>> TestMetaLink new execute.
>> link uninstall.
>> 
>> This works as expected, an alert with 'Linked Version' is promped. But then 
>> suppose I want to execute the actual node alongside with the linked one 
>> considering some condition:
>> 
>> | link choice | 
>> 
>> choice := true.
>> link := MetaLink new metaObject: [ :object :selector :arguments | 
>>   UIManager default alert: 
>> 'Linked Version'.
>>   choice ifTrue: [ object 
>> perform: selector withArguments: arguments].
>>]; 
>> selector: #value:value:value:;
>>  arguments: #(#object #selector #arguments);
>>  control: #instead;
>>  level: 0.
>> 
>> 
>> (TestMetaLink >> #execute) ast link: link.
>> TestMetaLink new execute.
>> link uninstall.
>> 
>> As I understand, level:0 is necessary in order to avoid an infinite loop, 
>> but then I get an error:
>> 
>> KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary
>> 
>> Am I doing something wrong? Is that an error? 
>> 
> Hello,
> 
> Yes, this looks like a bug. I will fix it over the next days.
> 
>   Marcus
> 
> 
> 
> 
> 
> 
> 



Re: [Pharo-users] MetaLink>>level: failing?

2018-10-31 Thread Vitor Medina Cruz
Thanks! Is there an issue on fogbuzz where I can be notified of resolution?
Do you need me to create it?

After that how can update the code? Software update is safe or should I
create a new image?

regards,
Vitor

On Mon, Oct 29, 2018 at 12:08 PM Marcus Denker 
wrote:

>
>
> On 25 Oct 2018, at 01:33, Vitor Medina Cruz  wrote:
>
> Hello,
>
> I am playing with MetaLink, really cool!, but I am having issues that I am
> unsure if it's some erro or if I am doing something wrong (I am using Pharo
> 6.1 32 bits in windows.). Consider:
>
> TestMetaLink>>execute
> UIManager default alert: 'Actual Version'.
>
> And in Playground:
>
> | link |
>
> link := MetaLink new metaObject: [ :object | UIManager default alert:
> 'Linked Version' ];
> selector: #value:;
>  arguments: #(#object);
>  control: #instead.
>
>
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
>
> This works as expected, an alert with 'Linked Version' is promped. But
> then suppose I want to execute the actual node alongside with the linked
> one considering some condition:
>
> | link choice |
>
> choice := true.
> link := MetaLink new metaObject: [ :object :selector :arguments |
>   UIManager default alert:
> 'Linked Version'.
>   choice ifTrue: [ object
> perform: selector withArguments: arguments].
>];
> selector: #value:value:value:;
>  arguments: #(#object #selector #arguments);
>  control: #instead;
> * level: 0*.
>
>
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
>
> As I understand, level:0 is necessary in order to avoid an infinite loop,
> but then I get an error:
>
> KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary
>
> Am I doing something wrong? Is that an error?
>
> Hello,
>
> Yes, this looks like a bug. I will fix it over the next days.
>
> Marcus
>
>
>
>
>
>
>
>


Re: [Pharo-users] MetaLink>>level: failing?

2018-10-29 Thread Marcus Denker


> On 25 Oct 2018, at 01:33, Vitor Medina Cruz  wrote:
> 
> Hello,
> 
> I am playing with MetaLink, really cool!, but I am having issues that I am 
> unsure if it's some erro or if I am doing something wrong (I am using Pharo 
> 6.1 32 bits in windows.). Consider:
> 
> TestMetaLink>>execute
> UIManager default alert: 'Actual Version'.
> 
> And in Playground:
> 
> | link | 
> 
> link := MetaLink new metaObject: [ :object | UIManager default alert: 'Linked 
> Version' ];
> selector: #value:;
>  arguments: #(#object);
>  control: #instead.
> 
> 
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
> 
> This works as expected, an alert with 'Linked Version' is promped. But then 
> suppose I want to execute the actual node alongside with the linked one 
> considering some condition:
> 
> | link choice | 
> 
> choice := true.
> link := MetaLink new metaObject: [ :object :selector :arguments | 
>   UIManager default alert: 
> 'Linked Version'.
>   choice ifTrue: [ object 
> perform: selector withArguments: arguments].
>]; 
> selector: #value:value:value:;
>  arguments: #(#object #selector #arguments);
>  control: #instead;
>  level: 0.
> 
> 
> (TestMetaLink >> #execute) ast link: link.
> TestMetaLink new execute.
> link uninstall.
> 
> As I understand, level:0 is necessary in order to avoid an infinite loop, but 
> then I get an error:
> 
> KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary
> 
> Am I doing something wrong? Is that an error? 
> 
Hello,

Yes, this looks like a bug. I will fix it over the next days.

Marcus









[Pharo-users] MetaLink>>level: failing?

2018-10-24 Thread Vitor Medina Cruz
Hello,

I am playing with MetaLink, really cool!, but I am having issues that I am
unsure if it's some erro or if I am doing something wrong (I am using Pharo
6.1 32 bits in windows.). Consider:

TestMetaLink>>execute
UIManager default alert: 'Actual Version'.

And in Playground:

| link |

link := MetaLink new metaObject: [ :object | UIManager default alert:
'Linked Version' ];
selector: #value:;
 arguments: #(#object);
 control: #instead.


(TestMetaLink >> #execute) ast link: link.
TestMetaLink new execute.
link uninstall.

This works as expected, an alert with 'Linked Version' is promped. But then
suppose I want to execute the actual node alongside with the linked one
considering some condition:

| link choice |

choice := true.
link := MetaLink new metaObject: [ :object :selector :arguments |
  UIManager default alert:
'Linked Version'.
  choice ifTrue: [ object
perform: selector withArguments: arguments].
   ];
selector: #value:value:value:;
 arguments: #(#object #selector #arguments);
 control: #instead;
* level: 0*.


(TestMetaLink >> #execute) ast link: link.
TestMetaLink new execute.
link uninstall.

As I understand, level:0 is necessary in order to avoid an infinite loop,
but then I get an error:

KeyNotFound: key #RFArgumentsReificationVar not found in Dictionary

Am I doing something wrong? Is that an error?

Best Regards,
Vitor