[squeak-dev] The Inbox: Environments-cmm.57.mcz

Chris Muller ma.chris.m at gmail.com
Tue Mar 24 15:47:57 UTC 2015


Oh that is so much better; use the existing API's which we know work
rather than another path through the code which modifies the state of
the object.

I just tried it and it worked, thanks Levente!  I'll commit it to trunk.

On Mon, Mar 23, 2015 at 10:22 PM, Levente Uzonyi <leves at elte.hu> wrote:
> On Mon, 23 Mar 2015, Chris Muller wrote:
>
>> To define a global variable in code, while taking care not to
>> over-write it if it already is defined, I wrote:
>>
>>   Smalltalk at: #MyGlobal ifAbsentPut: [myValue].
>>
>> But this only put it in the Smalltalk environments 'declarations', not
>> its 'bindings', which renders MyGlobal inaccessible from any code.
>>
>> I don't really like this nesting of at:ifAbsentPut: into 'bindings',
>> but it does solve the bug for the basic case.  Is it the right way to
>> fix it?
>
>
> No, it's a hack. The right way to do it is to use #bind:to: to create a new
> binding. Something like this should work:
>
> at: aSymbol ifAbsentPut: aBlock
>
>         ^self at: aSymbol ifAbsent: [
>                 self at: aSymbol put: aBlock value ]
>
> Levente
>
>>
>> On Mon, Mar 23, 2015 at 1:58 PM,  <commits at source.squeak.org> wrote:
>>>
>>> Chris Muller uploaded a new version of Environments to project The Inbox:
>>> http://source.squeak.org/inbox/Environments-cmm.57.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Environments-cmm.57
>>> Author: cmm
>>> Time: 23 March 2015, 1:58:37.126 pm
>>> UUID: 6e10d99c-b424-4f94-9152-18ccd72ca623
>>> Ancestors: Environments-topa.56
>>>
>>> Fix access to globals which were defined by:  Smalltalk at: #MyGlobal
>>> ifAbsentPut: [myValue].
>>>
>>> =============== Diff against Environments-topa.56 ===============
>>>
>>> Item was changed:
>>>   ----- Method: Environment>>at:ifAbsentPut: (in category 'emulating')
>>> -----
>>> + at: aSymbol ifAbsentPut: aBlock
>>> - at: aSymbol ifAbsentPut: aBlock
>>>         ^ declarations
>>>                 at: aSymbol
>>> +               ifAbsentPut:
>>> +                       [ bindings
>>> +                               at: aSymbol
>>> +                               ifAbsentPut: aBlock ]!
>>> -               ifAbsentPut: aBlock!
>>>
>>>
>>
>>
>


More information about the Squeak-dev mailing list