logo       

Re: How to know where a BlockClosure finish: msg#00236

lang.smalltalk.squeak.beginners

Subject: Re: How to know where a BlockClosure finish

Marcus Denker a écrit :
>
> On 25.08.2006, at 17:14, Mathieu wrote:
>
>> Hi,
>>
>> I want to execute several block:
>>
>> block1 value
>> block2 value
>> block3 value
>>
>> but if one block return from a retrun statement I want to quit.
>>
>> [^3] <- want to quit here
>> [3 + 4]
>>
>> So is there a way to know when a block evaluation finish by a return?
>>
>
> There is #hasMethodReturn in BlockContext:
>
> [^3] hasMethodReturn --> true
> [3] hasMethodReturn --> false.
>
> But this does a static analysis of the code... even if the ^is not executed
> (e.g.)
> [nil ifNotNil: [^3]] hasMethodReturn --> true
>
> so... it would be harder to analyze that dynamically... e.g. (without
> me thinking
> to much) you could add code (e.g. using ByteSurgeon)
> in front of the return inside a block to set a flag... but I have to
> admit that this
> woud be quite strange stuff...
>
>> I need this to interprete a file containing smalltalk and I want to
>> control the execution beceause I need to add some condition befor
>> evaluate a block.
>
> Why do you need that? I am sure we can find a simple solution if we
> understand
> the problem better.
>
> Marcus
>
>

Yes you are right

In the script I have 2 kind of things:
[
some Smalltalk
]

And:

Class selector
[
some smalltalk
]

So my idea was to call Compiler>>#evaluate:in:to:notifying:ifFail:logged:
on the string inside the [] for the first things.

And for the second I don't know yet but I don't think it's a probleme.

So I evaluate the "block" one by one. I don't think I can put them all
together beceause we can declare new method and use it in the next "block".

But may be I shouln't evaluate right now juste store them in a
CompiledMethod...

Math


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise