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 <vitormcruz@gmail.com> 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 <marcus.denker@inria.fr> wrote:


On 25 Oct 2018, at 01:33, Vitor Medina Cruz <vitormcruz@gmail.com> 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