[squeak-dev] [Environments] ScriptEncoder>>associationForClass problem // globals
Alan Pinch
alan.c.pinch at gmail.com
Mon Oct 16 18:54:39 UTC 2017
Where could I find these scripts? I have an idea to build financial
contracts that could be scripted securely, but I need a cross=platform
language. Would these Scripts provide a potential language for this use?
On 10/14/2017 01:44 PM, H. Hirzel wrote:
> Another necessary fix is to add
>
> Preferences class
>
> implicitSelfInTiles
> ^ self
> valueOfFlag: #implicitSelfInTiles
> ifAbsent: [false]
>
>
> message protocol: 'standard queries'
>
> On 10/14/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>> The project just needs to be dropped onto the desktop. Ignore the
>> additional error message and try incrementing the 'forward' value of
>> the car.
>>
>> On 10/14/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>> P.S. You can download an example home.pr project from the links given in
>>>
>>> http://wiki.squeak.org/squeak/6531
>>>
>>> On 10/14/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>> Hello
>>>>
>>>> after loading a Etoys project into a most recent trunk image
>>>> incrementing a tile value actually generates an updated script which
>>>> is to be compiled.
>>>>
>>>> Recompiling the script causes an error in
>>>>
>>>> ScriptEncoder>>associationForClass
>>>>
>>>> | assoc |
>>>> assoc := self environment associationAt: cue getClass name
>>>> ifAbsent:
>>>> [nil].
>>>> ^assoc value == cue getClass
>>>> ifTrue: [assoc]
>>>> ifFalse: [Association new value: cue getClass]
>>>>
>>>>
>>>> Replacing
>>>>
>>>> assoc := self environment associationAt: cue getClass name
>>>> ifAbsent:
>>>> [nil].
>>>>
>>>> with
>>>>
>>>> assoc := self environment globals associationAt: cue getClass
>>>> name ifAbsent: [nil].
>>>>
>>>>
>>>> Made the script to work but errors later on came up at the same place
>>>> for other reasons. In particular it was not possible to commit the
>>>> changed 'Compiler' package to the inbox.
>>>>
>>>> Do you have any suggestions how to deal with this problem?
>>>>
>>>> Kind regards
>>>> Hannes
>>>>
>>>>
>>>> ----------------------------------------------------
>>>> The use case in details
>>>> ----------------------------------------------------
>>>>
>>>> I drop an Etoys project into a fully updated trunk image.
>>>>
>>>>
>>>> If I click an arrow the following message is sent to aTileMorph
>>>>
>>>> TileMorph>>arrowAction:
>>>>
>>>> If it is a number a new value is set, for example
>>>>
>>>>
>>>> aTileMorph literal: 9
>>>>
>>>>
>>>> TileMorph>>literal
>>>>
>>>> is
>>>>
>>>> TileMorph>>literal: anObject
>>>>
>>>> literal := anObject.
>>>> self updateLiteralLabel.
>>>> self acceptNewLiteral. "Show that we are out of date,
>>>> install is needed"
>>>>
>>>> #acceptNewLiteral looks for the topScript, i.e. the top morph
>>>> containing the tiles
>>>>
>>>>
>>>> then it calls
>>>>
>>>> topScript installWithNewLiteral
>>>>
>>>>
>>>> The topScript is a "ScriptEditor for #script1 player: Car"
>>>>
>>>>
>>>> ScriptEditorMorph>>installWithNewLiteral
>>>>
>>>> self removeSpaces.
>>>> scriptName ifNotNil:
>>>> [playerScripted ifNotNil:
>>>> [playerScripted acceptScript: self topEditor
>>>> for: scriptName]]
>>>>
>>>>
>>>> playerScripted is aPlayer (Model subclass: #Player)
>>>>
>>>> In
>>>> playerScripted acceptScript: self topEditor for: scriptName
>>>>
>>>> the playerScripted gets a node (class MethodNode) from
>>>> aScriptEditorMorph
>>>>
>>>> The node is told to #generate: the method for aCompiledMethodTrailer
>>>> which has the data
>>>>
>>>>
>>>> 'script1
>>>> (self color: (Color r: 0.419 g: 0.581 b: 1) sees: (Color r: 0.936 g:
>>>> 0.936 b: 0.936))
>>>> ifFalse: [self turn: 160 + 40 random].
>>>> self forward: 9.
>>>> self turn: 1.
>>>> self bounce: ''silence'''
>>>>
>>>> The node in turn asks aScriptEncoder
>>>>
>>>>
>>>> generateMethodOfClass: aCompiledMethodClass trailer: trailer
>>>> from: methodNode
>>>>
>>>>
>>>> aScriptEncoder asks
>>>>
>>>> self allLiterals
>>>>
>>>> and within that
>>>>
>>>>
>>>> self associationForClass
>>>>
>>>>
>>>>
>>>> ScriptEncoder>>associationForClass
>>>> | assoc |
>>>> assoc := self environment associationAt: cue getClass name
>>>> ifAbsent:
>>>> [nil].
>>>> ^assoc value == cue getClass
>>>> ifTrue: [assoc]
>>>> ifFalse: [Association new value: cue getClass]
>>>>
>>>>
>>>> This is the place where the code breaks
>>>>
>>>> cue getClass
>>>>
>>>> is
>>>> Player140132117123
>>>>
>>>>
>>>> self environment
>>>>
>>>> is
>>>> SmalltalkImage
>>>>
>>>>
>>>> First a change from
>>>>
>>>>
>>>> assoc := self environment associationAt: cue getClass name
>>>> ifAbsent: [nil].
>>>>
>>>> to
>>>>
>>>> assoc := self environment globals associationAt: cue getClass
>>>> name ifAbsent: [nil].
>>>>
>>>> worked after adding in addition
>>>>
>>>>
>>>> I could increment and decrement values in a tile.
>>>>
>>>>
>>>> However it was not possible to commit the changes to the inbox. An
>>>> error message appeared at the same place.
>>>>
--
Thank you for your consideration,
Alan
More information about the Squeak-dev
mailing list
|