Hi All,

    I'm trying to debug remaining limitations in Image Segment support in
Spur using a case provided by Max Leske.  This is a pair of Pharo 6 images,
one of which saves an image segment the other which loads it.  Both use
OSEnvironment>>getEnv: to access environment variables.

The base definition of OSEnvironment>>getEnv: is

!OSEnvironment methodsFor: 'accessing' stamp: 'auto 5/3/2016 10:31'!
getEnv: arg1
        "This method calls the Standard C Library getenv() function. The
name of the argument (arg1) should fit decompiled version."
         ^ self ffiCall: #( String getenv (String arg1) ) module: LibC! !

but as I'm using the VM Simulator to debug the image segment issues I need
to avoid the FFI, which isn't yet simulateable.  So I redefine
OSEnvironment>>getEnv: as follows, and then save and exit.

!OSEnvironment methodsFor: 'accessing' stamp: 'EliotMiranda 02/27/2019
17:09'!
getEnv: aByteStringOrByteArray
        "This method calls the Standard C Library getenv() function. The
name of the argument (arg1) should fit decompiled version."
        <primitive: 'primitiveGetenv' module: '' error: ec>
        ec == #'bad argument' ifTrue:
                [aByteStringOrByteArray isString ifFalse:
                        [^self getEnv: aByteStringOrByteArray asString]].
        self primitiveFail! !

But, and here's the weird bit, when I start up the image, the new
definition has been discarded and replaced by the original.  WTF?!?!  Why
is this happening?  How can I disable this?

The only way that I've found I am able to save with a new version is by
doing a Save As... to a new name.  This is fine, but I find the current
behavior extremely unhelpful.  Is it a bug?  If it is intended, whats the
rationale?
_,,,^..^,,,_
best, Eliot

Reply via email to