[squeak-dev] [Environments] ScriptEncoder>>associationForClass problem // globals
H. Hirzel
hannes.hirzel at gmail.com
Sat Oct 14 17:14:11 UTC 2017
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.
>>
>
More information about the Squeak-dev
mailing list
|