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 <marcus.den...@inria.fr> 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://pharo.fogbugz.com/f/cases/22641/Semantic-analysis-needs-to-take-instead-preambles-into-account> > https://github.com/pharo-project/pharo/pull/1960 > <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 <vitormc...@gmail.com >> <mailto:vitormc...@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.den...@inria.fr >> <mailto:marcus.den...@inria.fr>> wrote: >> >> >>> On 25 Oct 2018, at 01:33, Vitor Medina Cruz <vitormc...@gmail.com >>> <mailto:vitormc...@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 >> >> >> >> >> >> >> >