On Tue, Feb 28, 2017 at 3:12 PM, Ben Coman <b...@openinworld.com> wrote:

>
>
> On Tue, Feb 28, 2017 at 11:28 AM, Offray Vladimir Luna Cárdenas <
> offray.l...@mutabit.com> wrote:
>
>> Hi,
>>
>> I would like to store the object resulting from executing a playground.
>> This would imply two steps:
>>
>> - Knowing that the playground content was executed (via the play button
>> or its shortcuts Ctrl + Shift + g or Ctrl + g).
>> - Getting the results of that execution. For example if the result at the
>> end is a string or a dictionary, I would like to get that string or
>> dictionary.
>>
>> Any pointers on how to make that will be welcomed.
>>
>> Cheers,
>>
>> Offray
>>
>> Ps: I still get lost when I search by myself trying to answer questions
>> like the ones above. I imagine that in some way is related with
>> evaluationAction and presentations, by looking for the source code of "do
>> it and go", but still I can't get a functional code snippet to start
>> prototyping.
>>
>>
> In playground, if you evaluate "self halt. 42" at top of the debug stack
> you'll see method...
>    Undefined>>DoIt
>        self halt.
>        ^ 42
>
> where stepping
> OVER returns 42 into "value" variable in OpalCompiler>>evaluate
> OVER returns 42 into "result" variable in RubSmalltalkEditor>>evaluate:
> andDo:
> at the end of which stepping
> INTO "^aBlock value: result"  takes you to 
> RubSmalltalkEditor>>highlightEvaluateAndDo:,
> where
> INTO "[:result | aBlock value: result]"    takes you to
> GLMPharoScriptPResentation(GLMRubricSmalltalkCodePresentation)>>
> executionSelectionActions
> where changing "aPresentation highlightEvaluateAndDo: [ :result | ] ];
>                       to "aPresentation highlightEvaluateAndDo: [ :result
> | self inform: 'Result ' , result printString] ]; "
>    and opening a new Playground, then evaluating "42" informs us that 42
> is the result.
>
> Stepping further along, in GLMMorphicPharoScriptRenderer(
> GLMMorphicPharoCodePresentation)>>highlightEvaluateAndDo::
> the value returned from...
>     self
>   evaluate: self highlightedTextAsStream
>   andDo: [:result | aBlock value: result. ].
>
> is not 42 but aGLMPharoScriptPresentation.  it might help to change that
> to...
>   andDo: [:result | aBlock value: result.  result ].
> but anyway that return value is thrown away in
> GLMMorphicPharoScriptRenderer(GLMMorphicPharoCodePresentatio
> n)>>actOnHighlightAndEvaluate:
>
>
> So subclassing GLMRubricSmalltalkCodePresentation and overriding
> #executionSelectionActions
> is perhaps your best bet.  Or some GLM expert provides a nice way for a
> user to set this customAssignmentBlock...
>       aPresentation highlightEvaluateAndDo: [ :result |
> customAssignmentBlock value: result ].
> in #executionSelectionActions.
>
> cheers -ben
>
>
>> Ps: I still get lost when I search by myself trying to answer questions
like the ones above. I imagine that in some way is related with
evaluationAction and presentations, by looking for the source code of "do
it and go", but still I can't get a functional code snippet to start
prototyping.

btw, I didn't know any of that 10 minutes ago.  I find it hard to answer
such questions looking at static code. The trick is finding the right place
to drop a "haltOnce" so you can observe the flow of live objects.
Prospective breakpoints generally come from peeking behind menus and button
using halos, or searching for their label strings using Tools > Finder >>
Source.  In this case it was easier since I knew the DoIt was compiled into
code that returned the result and could just trace that flow through.

cheers -ben

Reply via email to