commits | 1 Aug 01:55 2010

Daily Commit Log

Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours:

http://lists.squeakfoundation.org/pipermail/packages/2010-July/003577.html

Name: Morphic-ar.456
Ancestors: Morphic-ar.455

Reclassify methods belonging to Morphic, not Etoys.

=============================================

http://lists.squeakfoundation.org/pipermail/packages/2010-July/003578.html

Name: EToys-ar.72
Ancestors: EToys-ar.71

Reclassify methods belonging to Morphic, not Etoys.

=============================================

Andreas Raab | 1 Aug 04:48 2010
Picon
Picon

SqueakSSL update

Hi -

I've updated the SqueakSSL plugin with a bunch of fixes and a first stab 
at the Mac plugin. The Mac version is currently capable of doing the 
client handshake but can't verify the cert chain quite yet (I can't 
quite wrap my head around the Apple cert APIs) so every cert will look 
as if it's broken. If you want to play with it keep that in mind.

Other than that, I've got new Windows binaries and also Linux binaries 
(the latter fix a resource leak). You can download the binaries and the 
sources from here:

http://squeakvm.org/win32/release/SqueakSSL-bin.zip
http://squeakvm.org/win32/release/SqueakSSL-src.zip

Cheers,
   - Andreas

commits | 1 Aug 02:00 2010

The Inbox: System-cbr.356.mcz

A new version of System was added to project The Inbox:
http://source.squeak.org/inbox/System-cbr.356.mcz

==================== Summary ====================

Name: System-cbr.356
Author: cbr
Time: 31 July 2010, 9:34:13.128 pm
UUID: 30a3d62d-68f5-4f58-8a02-d5190ea0c2c8
Ancestors: System-cbr.355

Method to find author's changes since last release (or last condenseSources, anyway.) Useful for
rescuing unfinished experiments from trunk images, as it filters the noise of trunk changes.

=============== Diff against System-eem.353 ===============

Item was added:
+ ----- Method: SystemNavigation>>browseMyChanges (in category 'browse') -----
+ browseMyChanges
+ 	"Browse only the changes (in the changes file) by the current author."
+ 	self browseAllSelect: [ :method |
+        method fileIndex > 1 "only look at changes file"
+                and: [ method timeStamp beginsWith: Utilities authorInitials ]]!

Casey Ransberger | 1 Aug 06:37 2010
Picon

Re: Re: Image Management

Hah, I love Smalltalk. Added the method. I was expecting a bug when I tried to use it without first having set my initials. Instead, a dialog popped asking for my initials. Hooray. Also checked that nothing blows up when the author hasn't got any changes in the image, that was okay too.


Added SystemNavigation>>browseMyChanges to the inbox. If folks feel like it's useful enough to bring into the trunk, I will write a supporting menu item in a separate commit for ease of use.

On Sat, Jul 31, 2010 at 3:41 PM, Markus Lampert <markuslampert <at> yahoo.com> wrote:
> From: Casey Ransberger

....
> I'm going to add a  method on SystemNavigation (and stick it in a menu) that
>does something like  what Andreas has suggested to my personal images. "show my
>changes"
>
> My  question is: would this be useful to other people, or would it be another
>method/menu item that no one else uses? Should I push the change to the  inbox?

I would find that really useful and use it.

Have fun,
Markus







--
Casey Ransberger

Chris Cunnington | 1 Aug 08:59 2010
Picon

Re: SqueakSSL update

I find that installing SqueakSSL requires some prerequisites. Copying this code in a Workspace and executing each piece one after another did the trick. At the very end it asked for KlattResonatorIndicies. It's a ghost. Press 'Proceed' and ignore. Then the contents of the SqueakSSL repo on SqueakSource can be loaded without incident.

Installer ss project: 'MetacelloRepository'; install: 'ConfiguartionOfFFI'.

ConfigurationOfFFI load.

Installer ss project: 'VMMaker'; var2 install: 'VMMaker'.

This is on Windows. I executed SqueakSSL google: 'Squeak' and it worked. Pretty cool.

Chris


Chris Cunnington | 1 Aug 09:02 2010
Picon

Re: SqueakSSL update

Hmmm... I don't like that extranious "var2". This is more the point, I think.

Installer ss project: 'MetacelloRepository'; install: 'ConfiguartionOfFFI'.

ConfigurationOfFFI load.

Installer ss project: 'VMMaker'; install: 'VMMaker'.


Andreas Raab | 1 Aug 11:22 2010
Picon
Picon

Re: SqueakSSL update

On 7/31/2010 11:59 PM, Chris Cunnington wrote:
> I find that installing SqueakSSL requires some prerequisites. Copying
> this code in a Workspace and executing each piece one after another did
> the trick. At the very end it asked for KlattResonatorIndicies.

None of this is necessary. You're probably trying to load the SqueakSSL 
plugin source which requires VMMaker. However, that is only needed to 
regenerate the plugin, you generally shouldn't be using this. Try just 
installing the following:

	(Installer ss project: 'SqueakSSL)
		install: 'SqueakSSL-Core';
		install: 'SqueakSSL-Tests'.

That's it.

Cheers,
   - Andreas

Edgar J. De Cleene | 1 Aug 12:48 2010
Picon

Re: Image Management




On 7/31/10 5:30 PM, "Casey Ransberger" <casey.obrien.r <at> gmail.com> wrote:

Hey all, 

I have a giant pile of images from the last two years. Many of them have experiments I'd rather not lose, but I tend to meander in a Squeak image, and forget to name the image files well, so I basically have a lot of images that might have interesting changes, and no easy way to figure out which ones I want to keep around, or extract things from.

I've gone through most of them manually. I'd like to be able to search an image for changes that have my initials attached to them, though, because poking around in a change sorter is perilous when there've been changes from the trunk (it's noisy.) I don't know enough about how/where changes are kept in the system to do that though. 

Any help would be much appreciated! I'd love it if I could inspect something in particular and find the data structure that my changes live in.

--
Casey Ransberger

I share the attatched hoping help you

File in 7207UtilitiesmethodsWithInitialsinClass.1.cs in your image
"Create a new Change Set:"
Utilities methodsWithInitials: 'edc' inClass: Object . " choose inspect "
self keysAndValuesDo:[:k :v | ChangeSet current adoptSelector: k forClass: v methodClass ] "Make this in code panel"

Export the .cs , you have the ObjectENH.2.cs (in my case_

Or do

"Utilities methodsWithInitials: 'edc' inPackage: 'Monticello'" (in my fork, so I could have my methods in current trunk”

Edgar
'From MinimalMorphic of 8 December 2006 [latest update: #7269] on 1 August 2010 at 7:29:56
am'!

!CompiledMethod methodsFor: 'printing' stamp: 'edc 10/6/2008 09:54'!
author
 self timeStamp
isEmpty ifFalse: [^self timeStamp substrings first] ifTrue:[^'unknown']

	! !


!Utilities class
methodsFor: 'identification' stamp: 'edc 10/6/2008 09:58'!
methodsWithInitials: targetInitials
inClass: aClass
	"Based on a do-it contributed to the Squeak mailing list by G¦É¬Žran
Hultgen:
 Browse methods whose initials (in the time-stamp, as logged to disk) match the given
initials.
 Print out the complete time-stamp table to the Transcript.
 Answer a list of (initials ->
count) associations.

CAUTION: It may take several minutes for this to complete."

	"Time
millisecondsToRun: [Utilities methodsWithInitials: 'bf']"
	| methodList methodListClass
|
	methodList := aClass methodDict select:[:cm| 
		cm  author = targetInitials].
	methodListClass
:= aClass class methodDict select:[:cm| cm  author =
targetInitials].
		^methodList,methodListClass
	! !

!Utilities class methodsFor:
'identification' stamp: 'edc 4/19/2010 16:54'!
methodsWithInitials: targetInitials inPackage:
aPackage 
	"Utilities methodsWithInitials: 'edc' inPackage: 'Monticello'"
	| methodList
more|
	methodList := OrderedCollection new.
	(PackageInfo named: aPackage) classes
		do: [:ea |
more := (Utilities methodsWithInitials: targetInitials inClass: ea).
			more ifNotEmpty:
[methodList
				add: more ]].
	^ methodList! !

'From MinimalMorphic of 8 December 2006 [latest update: #7246] on 16 February 2010 at 10:58:03
am'!

!Object methodsFor: 'error handling' stamp: 'edc 7/31/2008 06:39'!
dpsTraceUntilRoot:
anObject
	| reportString context count |
	
	Transcript open.
	
	reportString := (anObject
respondsTo: #asString) 
			ifTrue: [anObject asString] ifFalse: [anObject
printString].
	(Smalltalk at: #Decompiler ifAbsent: [nil]) 
	ifNil: 
		[Transcript cr; show:
reportString]
	ifNotNil:
		[context := thisContext.
		count := 1.
		[Transcript
cr.
			Transcript show: count printString, ': '.
			
			reportString
notNil
			ifTrue:
				[Transcript show: context home class name 
			, '/' , context sender selector, 
' (' , reportString , ')'.
				context := context sender.
				reportString :=
nil]
			ifFalse:
				[(context notNil and: [(context := context sender) notNil])
				ifTrue:
[Transcript show: context receiver class name , '/' , context selector.
					count := count +
1]].
	context sender notNil]whileTrue]! !

!Object methodsFor: 'evaluating' stamp: 'edc 7/18/2005
10:51'!
ancestors
|  nonMetaClass  classList |

	nonMetaClass := self
theNonMetaClass.
	
	
	classList := OrderedCollection new.
	
	nonMetaClass allSuperclasses
reverseDo: 
		[:aClass | 
		classList add: aClass name.
		].
	^ classList! !

!Object methodsFor:
'evaluating' stamp: 'edc 7/18/2005 10:51'!
othersClassList
|classList metodosSospechosos |
classList := Set new.
metodosSospechosos := self  methodDict .
metodosSospechosos
isEmpty
		ifFalse: [metodosSospechosos
				collect: [:cm | cm literals
						select: [:any | any
isVariableBinding]
						thenCollect: [:each | (Smalltalk at: each key
ifAbsent:[])
								ifNotNil: [  classList add: each key]]]].
					
metodosSospechosos := self
class methodDict .
metodosSospechosos isEmpty
		ifFalse: [metodosSospechosos
				collect: [:cm
| cm literals
						select: [:any | any isVariableBinding]
						thenCollect: [:each | (Smalltalk
at: each key ifAbsent:[])
								ifNotNil: [classList add: each key]]]].
					classList remove:
self name  ifAbsent: [].
					^classList
					! !

!Object methodsFor: 'objects from disk' stamp:
'edc 9/6/2008 19:40'!
fileOutCompressed

| unzipped zipped buffer aFileName |
aFileName := self
class name asFileName.	"do better?"
	aFileName := UIManager default 
				request: 'File name?'
translated initialAnswer: aFileName.
	aFileName size == 0 ifTrue: [^ Beeper beep].
Cursor
write
showWhile: [unzipped := RWBinaryOrTextStream on: ''.
unzipped fileOutClass: nil andObject:
self.
unzipped reset.
zipped := FileDirectory default newFileNamed: aFileName , 'obz'.
zipped
binary.
zipped := GZipWriteStream on: zipped.
buffer := ByteArray new: 50000.
'Compressing ' , self
name
displayProgressAt: Sensor cursorPoint
from: 0
to: unzipped size
during: [:bar | 
[unzipped
atEnd]
whileFalse: [bar value: unzipped position.
zipped
nextPutAll: (unzipped nextInto:
buffer)].
zipped close.
unzipped close]]! !

!Object methodsFor: 'objects from disk' stamp: 'edc
9/5/2008 08:57'!
saveOnFileNamed: aString 
	"Ask the user for a filename and save myself on
a
	SmartReferenceStream file. Writes out the version and class structure.
	The file is fileIn-able.
UniClasses will be filed out.
	This save objects as .obj"
	| aFileName fileStream |
	aString
isEmpty
		ifTrue: [^ Beeper beep].
	aFileName := ('my {1}' translated format: {self class name})
asFileName.
	"do better?"
	aFileName := aString , '.obj'.
	fileStream := FileStream newFileNamed:
aFileName asFileName.
	fileStream fileOutClass: nil andObject: self! !


!Object class
methodsFor: '*services-extras' stamp: 'edc 2/14/2008 08:24'!
fileReaderServicesForFile:
fullName suffix: suffix
	| services |
	services _ OrderedCollection new.
	
	(fullName asLowercase
endsWith: '.obj')
		ifTrue: [ services add: self serviceLoadObject ].
	^services! !

!Object class
methodsFor: '*services-extras' stamp: 'edc 7/27/2008 08:11'!
readCompressedObject: aFileStream

	
	self readAndInspect: (MultiByteBinaryOrTextStream with: (GZipReadStream on: aFileStream)
upToEnd) reset! !

!Object class methodsFor: '*services-extras' stamp: 'edc 10/25/2006 17:45'!
registeredServices
	^ { 
	Service new
		label: 'Open saved objects';
		shortLabel: 'object'; 
		description: 'load back saved object ';
		action: [:stream | self readAndInspect: (FileStream oldFileOrNoneNamed:stream name)];
		shortcut: nil;
		categories: Service worldServiceCat.} ! !

!Object class methodsFor: '*services-extras' stamp:
'edc 7/27/2008 07:40'!
serviceCompressedObject
	"Answer a service for opening a saved Object"
	^
(SimpleServiceEntry
		provider: Object
		label: 'gz saved Object'
		selector:
#readCompressedObject:
		description: 'open a gz Object'
		buttonLabel:
'object')
		argumentGetter: [:fileList | 
			
			fileList readOnlyStream]! !

!Object class
methodsFor: '*services-extras' stamp: 'edc 2/14/2008 08:26'!
serviceLoadObject
"Answer a service
for opening a saved Object"

	^ (SimpleServiceEntry 
		provider: self 
		label: 'saved
Object'
		selector: #readAndInspect:
		description: 'open a Object'
		buttonLabel:
'object')
		argumentGetter: [:fileList | fileList readOnlyStream]! !

!Object class methodsFor:
'instance creation' stamp: 'edc 9/6/2008 08:57'!
lookForClass: aClass 
	| path inputStream fcb
superPseudo pseudo |
	path := self lookForClassIn3dot10: aClass.
	
inputStream := HTTPLoader
default retrieveContentsFor: path.
	inputStream := RWBinaryOrTextStream with: inputStream
content unzipped.
	fcb := FilePackage new fullName: aClass;
				
				fileInFrom:
(MultiByteBinaryOrTextStream with: inputStream contents).
	pseudo := fcb classes at:
aClass.
	superPseudo := pseudo definition copyUpTo: Character space.
	Smalltalk
		at:
superPseudo asSymbol
		ifAbsent: [self lookForClass: superPseudo].
	ChangeSorter
newChangesFromStream: inputStream named: aClass asString! !

!Object class methodsFor: 'instance
creation' stamp: 'edc 9/6/2008 10:54'!
lookForClassIn3dot10: aClass 
	| inputStream cat path
|
	
	Missing3dot10
		ifNil: [inputStream := HTTPLoader default retrieveContentsFor:
'ftp.squeak.org/various_images/SqueakLight//SLupdates/Organizer3dot10.obj'.
			inputStream
:= (MultiByteBinaryOrTextStream with: inputStream contents) reset.
			inputStream
setConverterForCode.
			Smalltalk at: #Missing3dot10 put: inputStream
fileInObjectAndCode].
	cat := Missing3dot10
				at: aClass
				ifAbsent: [^ self
lookForClassIn3dot9: aClass].
	^ path := 'http://squeakros.atspace.com/3dot10/' , cat , '/' ,
aClass asString , '.sqz'! !

!Object class methodsFor: 'instance creation' stamp: 'edc 9/6/2008
10:52'!
lookForClassIn3dot9: aClass 
	| inputStream cat path |
	Missing3dot9
		ifNil:
[inputStream := HTTPLoader default retrieveContentsFor:
'ftp.squeak.org/various_images/SqueakLight//SLupdates/Organizer3dot9.obj'.
			inputStream
:= (MultiByteBinaryOrTextStream with: inputStream contents) reset.
			inputStream
setConverterForCode.
			Smalltalk at: #Missing3dot9 put: inputStream
fileInObjectAndCode].
	cat := Missing3dot9
				at: aClass
				ifAbsent: [^ self error: aClass , '
is not on  server '].
	^path := 'http://squeakros.atspace.com/3dot9/' , cat , '/' , aClass asString ,
'.sqz'.
	! !

!Object class methodsFor: 'objects from disk' stamp: 'edc 6/11/2008
07:37'!
readAndInspect: inputStream

inputStream setConverterForCode.
(inputStream
fileInObjectAndCode ) inspect! !


!Utilities class methodsFor: 'identification' stamp: 'edc
10/6/2008 09:58'!
methodsWithInitials: targetInitials inClass: aClass
	"Based on a do-it
contributed to the Squeak mailing list by G¦É¬Žran Hultgen:
 Browse methods whose
initials (in the time-stamp, as logged to disk) match the given initials.
 Print out the complete
time-stamp table to the Transcript.
 Answer a list of (initials -> count) associations.

CAUTION: It
may take several minutes for this to complete."

	"Time millisecondsToRun: [Utilities
methodsWithInitials: 'bf']"
	| methodList methodListClass |
	methodList := aClass methodDict
select:[:cm| 
		cm  author = targetInitials].
	methodListClass := aClass class methodDict
select:[:cm| cm  author = targetInitials].
		^methodList,methodListClass
	! !


Chris Cunnington | 1 Aug 15:57 2010
Picon

Re: SqueakSSL update

You're absolutely right. I took a fresh image and retried and it worked without asking for anything like I specified. Seemed to make sense at the time. Thanks for pointing that out.

Chris


commits | 1 Aug 02:00 2010

The Trunk: System-dtl.354.mcz

David T. Lewis uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-dtl.354.mcz

==================== Summary ====================

Name: System-dtl.354
Author: dtl
Time: 1 August 2010, 2:14:56.824 pm
UUID: f0fa50de-cf4b-4a06-99b7-eb37cdb1a6e5
Ancestors: System-eem.353

Merge changes from inbox  System-cbr.354 and System-cbr.356

Name: System-cbr.354
Author: cbr
Time: 27 July 2010, 9:40:25.256 pm
UUID: f49d8aa0-ca22-47c9-880c-7713a9667439
Ancestors: System-eem.353

Removed cruft from Project class comment to do with project isolation, which is deprecated. 

Name: System-cbr.356
Author: cbr
Time: 31 July 2010, 9:34:13.128 pm
UUID: 30a3d62d-68f5-4f58-8a02-d5190ea0c2c8
Ancestors: System-cbr.355

Method to find author's changes since last release (or last condenseSources, anyway.) Useful for
rescuing unfinished experiments from trunk images, as it filters the noise of trunk changes.

=============== Diff against System-eem.353 ===============

Item was added:
+ ----- Method: SystemNavigation>>browseMyChanges (in category 'browse') -----
+ browseMyChanges
+ 	"Browse only the changes (in the changes file) by the current author."
+ 
+ 	"SystemNavigation default browseMyChanges"
+ 
+ 	self browseAllSelect: [ :method |
+        method fileIndex > 1 "only look at changes file"
+                and: [ method timeStamp beginsWith: Utilities authorInitials ]]!

Item was changed:
  Model subclass: #Project
  	instanceVariableNames: 'world uiManager changeSet transcript parentProject previousProject
displayDepth viewSize thumbnail nextProject guards projectParameters version urlList environment
lastDirectory lastSavedAtSeconds projectPreferenceFlagDictionary resourceManager'
  	classVariableNames: 'AllProjects CurrentProject GoalFreePercent GoalNotMoreThan
LastScreenModeSelected UIProcess'
  	poolDictionaries: ''
  	category: 'System-Support'!

+ !Project commentStamp: 'cbr 7/27/2010 21:36' prior: 0!
- !Project commentStamp: 'tk 12/2/2004 12:38' prior: 0!
  A Project stores the state of a complete Squeak desktop, including
  the windows, and the currently active changeSet.  A project knows who
  its parent project is.  When you change projects, whether by entering
  or exiting, the screen state of the project being exited is saved in
  that project.

  A project is retained by its view in the parent world.  It is
  effectively named by the name of its changeSet, which can be changed
  either by renaming in a changeSorter, or by editing the label of its
  view from the parent project.

  As the site of major context switch, Projects are the locus of
  swapping between the old MVC and the new Morphic worlds.  The
  distinction is based on whether the variable 'world' contains a
  WorldMorph or a ControlManager.

  Saving and Loading
  Projects may be stored on the disk in external format.  (Project
  named: 'xxx') exportSegment, or choose 'store project on file...'.
  Projects may be loaded from a server and stored back.  Storing on a
  server never overwrites;  it always makes a new version.  A project
  remembers the url of where it lives in urlList.  The list is length
  one, for now.  The url may point to a local disk instead of a server.
+ All projects that the user looks at are cached in the Squeaklet
- All projects that the user looks at, are cached in the Squeaklet
  folder.  Sorted by server.  The cache holds the most recent version
  only.

  When a project is loaded into Squeak, its objects are converted to
  the current version.  There are three levels of conversion.  First,
  each object is converted from raw bits to an object in its old
  format.  Then it is sent some or all of these messages:
  	comeFullyUpOnReload: smartRefStream  		Used to
  re-discover an object that already exists in this image, such as a
  resource, global variable, Character, or Symbol.  (sent to objects in
  outPointers)
  	convertToCurrentVersion: varDict refStream: smartRefStrm
  		fill in fields that have been added to a class since
  the object was stored.  Used to set the extra inst var to a default
  value.  Or, return a new object of a different class.  (sent to
  objects that changed instance variables)
  	fixUponLoad: aProject refStream: smartRefStrm
  	change the object due to conventions that have changed on the
  project level.  (sent to all objects in the incoming project)

  Here is the calling sequence for storing out a Project:
  Project saveAs
  Project storeOnServer
  Project storeOnServerWithProgressInfo
  Project storeOnServerInnards
  Project exportSegmentFileName:directory:
  Project exportSegmentWithChangeSet:fileName:directory:
  ImageSegment writeForExportWithSources:inDirectory:changeSet:
- ---------
- Isolation (not used any more)
- When you accept a method, the entire system feels the change, except
- projects that are "isolated".  In an isolated project, all new global
- variables (including new classes) arestored in the project-local
- environment, and all changes to preexisting classes are revoked when
- you leave the project.  When you enter another project, that
- project's changes are invoked.  Invocation and revocation are handled
- efficiently by swapping pointers.  To make a project be isolated,
- choose 'isolate changes of this project' from the 'changes...'
- section of the screen menu.  You can use an isolated project for
- making dangerous change to a system, and you can get out if it
- crashes.  A foreign application can have the separate environment it
- wants.  Also, you can freeze part of the system for a demo that you
- don't want to disturb.  An isolated project shares methods with all
- subprojects inside it, unless they are isolated themselves.   Each
- isolated project is the head of a tree of projects with which it
- shares all methods.

- You may 'assert' all changes ever made in the current project to take
- effect above this project.  This amounts to exporting all the globals
- in the current environment, and zapping the revocation lists to that
- the current state of the world will remain in force upon exit from
- this project.
- 
- [Later: A project may be 'frozen'.  Asserts do not apply to it after
- that.  (Great for demos.)  You should be informed when an assert was
- blocked in a frozen project.]
- 
- Class definitions are layered by the isolation mechanism.  You are
- only allowed to change the shape of a class in projects that lie
- within its isolation scope.  All versions of the methods are
- recompiled, in all projects.  If you remove an inst var that is in
- use in an isolated project, it will become an Undeclared global.  It
- is best not to remove an inst var when it is being used in another
- isolated project. [If we recompile them all, why can't we diagnose
- the problem before allowing the change??]
- 
- Senders and Implementors do not see versions of a method in isolated
- projects.  [again, we might want to make this possible at a cost].
- When you ask for versions of a method, you will not get the history
- in other isolated projects.
- 
- Moving methods and classes between changeSets, and merging changeSets
- has no effect on which methods are in force.  But, when you look at a
- changeSet from a different isolated project, the methods will contain
- code that is not in force.  A changeSet is just a list of method
- names, and does not keep separate copies of any code.
- 
- When finer grained assertion is needed, use the method (aProject
- assertClass: aClass from: thisProject warn: warnConflicts).
- 
- How isolated changes work: The first time a class changes, store its
- MethodDictionary object.  Keep parallel arrays of associations to
- Classes and MethodDictionaries.  Traverse these and install them when
- you enter an "ioslated project".  When you leave, store this
- project's own MethodDictionaries there.
- 	To do an assert, we must discover which methods changed here,
- and which changed only in the project we are asserting into.  There
- is one copy of the 'virgin' method dictionaries in the system.  It is
- always being temporarily stored by the currently inForce isolated
- project.
- 
- isolatedHead - true for the top project, and for each isolated
- project.  false or nil for any subproject that shares all methods
- with its parent project.
- 
- inForce -  true if my methods are installed now.  false if I am
- dormant. [is this equivalent to self == Project Current?]
- 
- classArray - list of associations to classes
- 
- methodDictArray - the method dictionaries of those classes before we
- started changing methods.  They hang onto the original
- compiledMethods.  (If this project is dormant, it contains the method
- dictionaries of those classes as they will be here, in this project).
- 
- orgArray - the class organizations of the classes in classArray.
- 
- UsingIsolation (class variable) - No longer used.
- 
- When you want to save a project in export format from within that
- very project, it gets tricky.  We set two flags in parentProject,
- exit to it, and let parentProject write the project.
- ProjectViewMorph in parentProject checks in its step method, does the
- store, clears the flags, and reenters the subProject.
- 
  !


Gmane