[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