> Am 24.06.2014 um 00:27 schrieb Eliot Miranda <eliot.mira...@gmail.com>:
> 
> 
> 
> 
>> On Mon, Jun 23, 2014 at 3:04 PM, Norbert Hartl <norb...@hartl.name> wrote:
>> The slice cannot be integrated automatically because there is a modal 
>> popping up
>> 
>> Warning: Process should not be redefined. Proceed to store over it.
>> 
>> Not sure what to do. Manual integration?
> 
> Can you not wrap that in "[] valueSupplyingAnswer: true" ? 
>> 
Sure. But I can only provide the monticello package and this code needs to go 
into the build process. Right? I just wanted to say it early. I think the guys 
know how to treat it. If there is anything I can do....

Norbert
>> Norbert
>> 
>>> Am 23.06.2014 um 23:55 schrieb Norbert Hartl <norb...@hartl.name>:
>>> 
>>> https://pharo.fogbugz.com/default.asp?13378
>>> 
>>> Btw. I tested this as well in 3.0 and a backport would be highly 
>>> appreciated.
>>> 
>>> Norbert
>>> 
>>>> Am 23.06.2014 um 20:08 schrieb stepharo <steph...@free.fr>:
>>>> 
>>>> Thanks Eliot.
>>>> Sven, Norbert if you package that nicely (BTW having some tests would be 
>>>> great) we can include that in 4.0
>>>> 
>>>> Stef
>>>>> On 23/6/14 19:29, Eliot Miranda wrote:
>>>>> and here are the changes I've just committed to Squeak trunk.
>>>>> 
>>>>> 
>>>>>> On Mon, Jun 23, 2014 at 10:05 AM, Eliot Miranda 
>>>>>> <eliot.mira...@gmail.com> wrote:
>>>>>> Hi Norbert,
>>>>>> 
>>>>>>     [ let me try again.  never try and get code out too early in the 
>>>>>> morning ;-) ]
>>>>>> 
>>>>>>     it is the debugger that needs fixing, not your code !! :-).  The 
>>>>>> debugger needs to respect process identity.  Andreas and I (mostly 
>>>>>> Andreas) came up with the following changes at Qwaq.  Your message is a 
>>>>>> good reminder that I need to add this to Squeak asap.
>>>>>> 
>>>>>> The idea is for Process to have an additional inst var 
>>>>>> 'effectiveProcess' that holds the actual process running code.  For the 
>>>>>> most part this is self, but in the debugger we substitute the process 
>>>>>> being debugged:
>>>>>> 
>>>>>> Process methods for accessing
>>>>>> effectiveProcess
>>>>>>  "effectiveProcess is a mechanism to allow process-faithful debugging.  
>>>>>> The debugger executes code
>>>>>>   on behalf of processes, so unless some effort is made the identity of 
>>>>>> Processor activeProcess is not
>>>>>>   correctly maintained when debugging code.  The debugger uses 
>>>>>> evaluate:onBehalfOf: to assign the
>>>>>>   debugged process as the effectiveProcess of the process executing the 
>>>>>> code, preserving process
>>>>>>   identity."
>>>>>>  ^effectiveProcess ifNil: [self]
>>>>>> 
>>>>>> then the relevant methods in Process and processorScheduler defer to 
>>>>>> effectiveProcess, e.g.
>>>>>> 
>>>>>> ProcessorScheduler methods for process state change
>>>>>> terminateActive
>>>>>>  "Terminate the process that is currently running."
>>>>>> 
>>>>>>  activeProcess effectiveProcess terminate
>>>>>> 
>>>>>> and the debugging methods use evaluate:onBehalfOf: to install the 
>>>>>> process being debugged:
>>>>>> 
>>>>>> Process methods for private
>>>>>> evaluate: aBlock onBehalfOf: aProcess
>>>>>>  "Evaluate aBlock setting effectiveProcess to aProcess.  Used
>>>>>>   in the execution simulation machinery to ensure that
>>>>>>   Processor activeProcess evaluates correctly when debugging."
>>>>>>  | oldEffectiveProcess |
>>>>>>  oldEffectiveProcess := effectiveProcess.
>>>>>>  effectiveProcess := aProcess.
>>>>>>  ^aBlock ensure: [effectiveProcess := oldEffectiveProcess]
>>>>>> 
>>>>>> Process methods for changing suspended state
>>>>>> step
>>>>>> 
>>>>>>  ^Processor activeProcess
>>>>>>  evaluate: [suspendedContext := suspendedContext step]
>>>>>>  onBehalfOf: self
>>>>>> 
>>>>>> stepToCallee
>>>>>>  "Step until top context changes"
>>>>>> 
>>>>>>  Processor activeProcess
>>>>>>  evaluate:
>>>>>>  [| ctxt |
>>>>>>  ctxt := suspendedContext.
>>>>>>  [ctxt == suspendedContext] whileTrue: [
>>>>>>  suspendedContext := suspendedContext step]]
>>>>>>  onBehalfOf: self.
>>>>>>  ^suspendedContext
>>>>>> 
>>>>>> etc.  Changes from a Qwaq image attached.
>>>>>> 
>>>>>> HTH
>>>>>> 
>>>>>> 
>>>>>> On Mon, Jun 23, 2014 at 4:50 AM, Norbert Hartl <norb...@hartl.name> 
>>>>>> wrote:
>>>>>>> In my code I'm using a DynamicVariable to request a context object when 
>>>>>>> needed. Until now I knew the name DynamicVariable only from seaside. 
>>>>>>> There it is called WADynamicVariable and it is an exception. So I 
>>>>>>> blindly assumed the pharo DynamicVariable works the same.
>>>>>>> I thought this might be a good optimization not to travel the stack all 
>>>>>>> the time but put in the process.
>>>>>>> Now that I am using it I can see the difference. I find it real hard 
>>>>>>> using it because I don't know how to debug/step in code. 
>>>>>>> DynamicVariable is a process specific variable but as soon as a 
>>>>>>> debugger opens it is very likely to be in another process. This makes 
>>>>>>> stepping in method using the DynamicVariable impossible. The only way 
>>>>>>> round is to set break points after the dynamic lookup and step from 
>>>>>>> there. But this feels just wrong.
>>>>>>> What would be the best way to have DynamicVariable and be able to debug 
>>>>>>> anything? Or is there a variant that uses the stack instead of the 
>>>>>>> "active" process?
>>>>>>> 
>>>>>>> thanks,
>>>>>>> 
>>>>>>> Norbert
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> best,
>>>>>> Eliot
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> best,
>>>>> Eliot
>>>> 
>>> 
>> 
> 
> 
> 
> -- 
> best,
> Eliot

Reply via email to