> On 04 Dec 2015, at 17:11, Mariano Martinez Peck <marianop...@gmail.com> wrote:
> 
> I found a way!!!! Much cleaner and easier. Awesome! 
> I will clean it, test it a bit more and try to package it for public usage :)

Give me a snippet! I want to play with it! :D

> 
> On Fri, Dec 4, 2015 at 12:31 PM, Mariano Martinez Peck <marianop...@gmail.com 
> <mailto:marianop...@gmail.com>> wrote:
> 
> 
> On Fri, Dec 4, 2015 at 12:05 PM, Max Leske <maxle...@gmail.com 
> <mailto:maxle...@gmail.com>> wrote:
> 
>> On 04 Dec 2015, at 14:29, Mariano Martinez Peck <marianop...@gmail.com 
>> <mailto:marianop...@gmail.com>> wrote:
>> 
>> Max...Seaside uses WADynamicVariable (NOT DynamicVariable) which are 
>> completely different. WADynamicVariable uses exception mechanism while 
>> DynamicVariable uses the ProcessSpecificVariable. 
>> But thanks anyway!
> 
> Oh man…. Sorry :)
> 
> I wonder, why WADynamicVariable *isn’t* a DynamicVariable. The semantics are 
> the same if I’m not mistaken (e.g. only available in the current process) and 
> I think access to a dynamic variable may even be faster because it *doesn’t* 
> use the exception mechanism (i.e. no need to walk down the stack). 
> If someone knows the answer, I’d be happy to hear it.
> 
> 
> I bet it's because of portability. For example, i remember in GemStone the 
> ProcessorLocalVariable did not behave the same as in Pharo. And it was 
> actually an experiment. I think you cannot expect all this stuff to be ansi 
> (or easily portable), while exceptions do. 
>  
> I’ve played around with Process>>signalException: and Context>>handleSignal: 
> (which looked quite promising) but didn’t get any results. I’m out of ideas.
> 
> 
> I have played all morning with an idea of using local variables. I arrive to 
> the point where I DO HAVE the request context at hand, but I don't find an 
> easy way to hook into do-its, print-it etc so that the closure evaluated gets 
> the request context plugged. In other ways... let's say I have the context 
> stored somewhere. I am at the SmalltalkEditor >> evaluateSelectionAndDo: 
> aBlock
> 
> and so..somewhere I need to do something like:
> 
> WACurrentRequestContext use: self storedContextSomewhere during: [  self 
> theSelectionToBeEvaluated ]
> 
> and that's where I am now :)
> 
>  
>  
> Cheers,
> Max
> 
>> 
>> On Fri, Dec 4, 2015 at 7:32 AM, Max Leske <maxle...@gmail.com 
>> <mailto:maxle...@gmail.com>> wrote:
>> Here’s a snippet to play with:
>> 
>> p := Processor activeProcess.
>> x := 2.
>> v := TestDynamicVariable value: x during: [   
>>      ((p instVarNamed: 'env') ifNotNil: [ :env|
>>              env copyWithout: nil ]) inspect 
>>      ].
>> 
>> ((p instVarNamed: 'env') ifNotNil: [ :env|
>>      env copyWithout: nil ]) inspect 
>> 
>> Cheers,
>> Max
>> 
>>> On 04 Dec 2015, at 10:47, Max Leske <maxle...@gmail.com 
>>> <mailto:maxle...@gmail.com>> wrote:
>>> 
>>> I feel you :)
>>> 
>>> Without having thought this through completely: if you look at the 
>>> implementation of DynamicVariable>>value:during: you’ll see that the way it 
>>> works is that the variable is bound to the active process. In the debugger 
>>> you have access to the process that is being debugged and thus you should 
>>> have access to the variables bound to it. You could try accessing all such 
>>> variables by iterating over them (which I think will require an extension 
>>> on Process because you’d need to access at least the PSKeys class variable).
>>> 
>>> Cheers,
>>> Max
>>> 
>>>> On 04 Dec 2015, at 00:34, Mariano Martinez Peck <marianop...@gmail.com 
>>>> <mailto:marianop...@gmail.com>> wrote:
>>>> 
>>>> Hi guys,
>>>> 
>>>> This thing I will ask in this email it's in my mind since YEARS. But I 
>>>> have always thought it was like that and that there was nothing we could 
>>>> do. However, I think it's time I ask again :)
>>>> 
>>>> For those that have used Seaside, and you try to debug, you know that upon 
>>>> request processing seaside uses Exceptions mechanisim to always have 
>>>> access to the request, session, etc. They way that is done is very smart :)
>>>> 
>>>>  WACurrentRequestContext use: self during: aBlock
>>>> 
>>>> In that case, "self" is the request instance and aBlock the closure that 
>>>> takes care of the request processing. So, inside that closure, everywhere 
>>>> you do "WACurrentRequestContext value" you get the correct request 
>>>> instance.
>>>> 
>>>> So..that's great for Seaside, but debugging gets complicated. While you 
>>>> can restart, proceed, etc, once inside debugger, you  cannot evaluate any 
>>>> piece of code that will use the session  or request because you get a 
>>>> WARequestContextNotFound. Of course, because I guess the evaluation you do 
>>>> from cmd+d on a piece of text or via the debugger inspector, creates 
>>>> another closure/context which does not receive the WACurrentRequestContext 
>>>> instance. 
>>>> 
>>>> Now....besides WACurrentRequestContext I have my own class 
>>>> UserContextInformation where I basically have a bunch of stuff associated 
>>>> to the logged user. And I do exactly the same as the 
>>>> WACurrentRequestContext. And I have the same problem. I really want to be 
>>>> able to fix this.
>>>> 
>>>> Anyone have an idea on how can I do it? I guess I can change the debugger, 
>>>> in the place where I evaluate code so that I wrap that evaluation with my 
>>>> request context instance???
>>>> 
>>>> Thoughts?
>>>> 
>>>> 
>>>> -- 
>>>> Mariano
>>>> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
>>> 
>> 
>> 
>> 
>> 
>> -- 
>> Mariano
>> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
> 
> 
> 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
> 
> 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>

Reply via email to