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(GLMMorphicPharoCodePresentation)>>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