[squeak-dev] Class with nil environment?!

Bob Arning arning315 at comcast.net
Wed Jul 10 21:49:48 UTC 2013


Not sure why you think it's busted. It's been that way for a very long 
time and Class>>environment seems to take care of things:

environment

     environment == nil ifTrue: [^ super environment].
     ^ environment

Cheers,
Bob

On 7/10/13 5:38 PM, Frank Shearar wrote:
> On 10 July 2013 22:19, Frank Shearar <frank.shearar at gmail.com> wrote:
>> On 10 July 2013 20:44, David T. Lewis <lewis at mail.msen.com> wrote:
>>> On Wed, Jul 10, 2013 at 07:21:56PM +0100, Frank Shearar wrote:
>>>> On 10 July 2013 19:02, Colin Putney <colin at wiresong.com> wrote:
>>>>>
>>>>>
>>>>> On Wed, Jul 10, 2013 at 6:52 AM, Frank Shearar <frank.shearar at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Er, so should we ever have classes with a nil environment? Is my
>>>>>> proposed change a stinky hack, or the right thing to do to lazily fix
>>>>>> the issue?
>>>>>
>>>>> We should never have classes with a nil environment.
>>>>
>>>> OK, that's what I thought. But I have such an image. In fact, I
>>>> daresay that every alpha image produced in the 4.5 line has for months
>>>> and months had such classes. Making #declare: use the #environment
>>>> method instead of directly accessing the instvar "solves" the problem
>>>> - Morphic-fbs.633 will load - but I have no idea if that's a good
>>>> solution, or a bad, bad bandaid.
>>>>
>>> I have run into the nil environment problem in the course of updating
>>> images from trunk, so I suspect there is or was some kind of problem
>>> at some point. I worked around it manually in the update whenever a
>>> debugger popped up. The "fix" was to look at the class in the debugger,
>>> and do "environment := Array environment" (I used Array, but it could
>>> be any class that does have its environment set properly).
>>>
>>> That seemed to work but I'm sure there must be a better way to do it.
>>> Is there something we should put into the trunk update stream so that
>>> other people don't get stuck on the problem during updates?
>>>
>>> Dave
>> I sort've expected to see an explicit assigning of environments
>> somewhere. But Environment class >> #install doesn't do this. It
>> inserts itself in Smalltalk globals' place, which is great if a (class
>> instVarNamed: 'environment') == Smalltalk globals. But if a class'
>> environment was already nil, installing Environments would not have
>> touched the instvar, leaving busted state. (As in, leaving busted
>> state in the same, busted, state.)
> And lo! In a Squeak 4.4 image:
>
> (Class allSubclasses collect: #theNonMetaClass) select: [:cls | (cls
> instVarNamed: 'environment') isNil]
> "=> " an OrderedCollection(ProtoObject ObjectViewer ObjectOut
> BalloonState SoundCodec UndefinedObject Boolean SimpleMIDIPort
> FillStyle Password SharedQueue MidiPrimTester MailAddressParser
> WindowingTransformation FormButtonCache BalloonEdgeData View
> AbstractScoreEvent LimitingLineStreamWrapper Message
> EllipseMidpointTracer DamageRecorder ImageReadWriter TextContainer
> MIDIScore ClassCategoryReader BalloonSolidFillSimulation
> MorphExtension MIDISynth MIMEDocument FWT TextAttribute MIDIFileReader
> Stream Link BalloonBuffer SerialPort MimeConverter CornerRounder
> CompressedBoundaryShape MailAddressToken BalloonLineSimulation
> DiskProxy LineSegment Point DisplayObject CompressedSoundData
> InstructionStream BalloonFillData GraphicSymbolInstance PluggableTest
> KeyboardBuffer ParseStack Morph MIDISynthChannel DisplayTransform
> ObjectScanner Envelope SampledInstrument MIDIInputParser ClassBuilder
> FFT ExceptionSet ObjectViewer WaveletCodec MuLawCodec GSMCodec
> ADPCMCodec True False OrientedFillStyle SolidFillStyle Pen WarpBlt
> FormView DisplayTextView StringHolderView ListView PluggableButtonView
> Number LookupKey NoteEvent ControlChangeEvent PitchBendEvent
> ProgramChangeEvent AmbientEvent TempoEvent DualChangeSorter
> TranslucentColor PCXReadWriter XBMReadWriter Quadrangle Bag
> SequenceableCollection TextAction TextKern TextEmphasis TextIndent
> TextColor TextFontChange PositionableStream DummyStream
> QuotedPrintableMimeConverter RepeatingSound ScorePlayer
> SequentialSound RestSound ReverbSound FMSound PluckedSound MixedSound
> UnixFileDirectory DosFileDirectory Bezier2Segment Bezier3Segment
> DisplayText DisplayMedium Path InfiniteForm GenericUrl
> PianoRollNoteMorph ImageMorph MenuLineMorph StringMorph BorderedMorph
> MovieMorph MatrixTransform2x3 CompositeTransform MorphicTransform
> VolumeEnvelope RandomEnvelope PitchEnvelope SoundInputStream
> AssignmentNode DecompilerConstructor CascadeNode BraceNode Error
> IllegalResumeAttempt Notification FormMenuController ModalController
> NoController BitmapFillStyle FormHolderView FormInspectView
> FillInTheBlankView PluggableTextView PluggableListView FormEditorView
> ColorSystemView Fraction Association SyntaxError SelectorBrowser
> ArrayedCollection LinkedList OrderedCollection Interval TextDoIt
> TextLink TextURL TextFontReference ReadStream WriteStream
> RFC2047MimeConverter FMClarinetSound FMBassoonSound UnloadedSound Form
> Spline CurveFitter Line LinearFit Arc BlockContext MailtoUrl
> BrowserUrl HttpUrl FtpUrl ThreePhaseButtonMorph Sonogram
> PopUpChoiceMorph MorphicModel RectangleMorph Canvas SelectorNode
> VariableNode LiteralNode MessageAsTempNode ExceptionAboutToReturn
> Warning PluggableListViewByItem SmallInteger LargePositiveInteger
> WeakKeyAssociation OrderedCollectionInspector DictionaryInspector
> InspectorBrowser ChangeList WordArray RunArray Array ShortIntegerArray
> Bitmap FloatArray ShortRunArray ByteArray IntegerArray Semaphore
> GraphicSymbol TextLineInterval IdentityDictionary WeakValueDictionary
> PluggableDictionary TextSqkPageLink LimitedWriteStream ReadWriteStream
> TextStream ListParagraph ColorForm Circle NameStringInHalo
> ProjectController ListController LargeNegativeInteger
> ChangeListForProjects FileContentsBrowser PackagePaneBrowser
> ChangedMessageSet RecentMessageSet TimeProfileBrowser ShortPointArray
> PointArray RWBinaryOrTextStream Transcripter CursorWithMask
> PreDebugWindow SystemWindowWithButton ScorePlayerMorph
> UpdatingSimpleButtonMorph TextMorphForEditView StringMorphEditor
> ColorPatchCanvas PluggableListController PluggableListControllerOfMany
> FillInTheBlankController PluggableTextController
> ReadOnlyTextController)
>
> Note PianoRollNoteMorph's presence in the list! So. It's not
> Environments' fault, because it just replaced Smalltalk globals. It's
> just long old busted state. We thus need (a) an update step to fix the
> busted state or (b) lazily correct it.
>
>> frank
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20130710/647f4b6d/attachment.htm


More information about the Squeak-dev mailing list