[squeak-dev] The Trunk: EToys-bf.95.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Apr 11 22:28:51 UTC 2013


Bert Freudenberg uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-bf.95.mcz

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

Name: EToys-bf.95
Author: bf
Time: 11 April 2013, 3:27:51.906 pm
UUID: 205ad059-c5b8-4df9-b599-96a156e03a7f
Ancestors: EToys-bf.94

* make project loading work
* no more undeclared globals

=============== Diff against EToys-bf.94 ===============

Item was added:
+ Object subclass: #EToyExpressionTransformer2
+ 	instanceVariableNames: 'method stack inputQueue encoder'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Etoys-Support'!

Item was added:
+ ----- Method: EToyExpressionTransformer2>>inputQueueEmpty (in category 'all') -----
+ inputQueueEmpty
+ 
+ 	^ inputQueue isEmpty!

Item was added:
+ ----- Method: EToyExpressionTransformer2>>inputQueueNext (in category 'all') -----
+ inputQueueNext
+ 	"It would do the check of selector node that #inputQueuePeek does, but not necessary."
+ 
+ 	^ inputQueue removeFirst.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>inputQueuePeek (in category 'all') -----
+ inputQueuePeek
+ 
+ 	| v |
+ 	inputQueue size > 0 ifFalse: [^ nil].
+ 	v := inputQueue first.
+ 	(v isMemberOf: SelectorNode) ifTrue: [^ v key asSymbol].
+ 	^ v.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>newNodeFromList:encoder: (in category 'all') -----
+ newNodeFromList: aList encoder: e
+ 
+ 	encoder := e.
+ 	inputQueue := aList asOrderedCollection.
+ 	stack := OrderedCollection new: 3.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>precl (in category 'all') -----
+ precl
+ 
+ 	stack size = 0 ifTrue: [^ 0].
+ 	stack size = 1 ifTrue: [^ self precl: stack last].
+ 	stack last isSymbol ifTrue: [^ 0].
+ 	^ self precl: (stack at: stack size - 1).
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>precl: (in category 'all') -----
+ precl: anObject
+ 
+ 	(#(#max: #min:) includes: anObject) ifTrue: [^ 1].
+ 	(#(#+ #-) includes: anObject) ifTrue: [^ 2].
+ 	(#(#* #/ #// #\\) includes: anObject) ifTrue: [^ 3].
+ 	^ 0.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>precr: (in category 'all') -----
+ precr: anObject
+ 
+ 	anObject ifNil: [^ 0].
+ 	(#(#max: #min:) includes: anObject) ifTrue: [^ 1].
+ 	(#(#+ #-) includes: anObject) ifTrue: [^ 2].
+ 	(#(#* #/ #// #\\) includes: anObject) ifTrue: [^ 3].
+ 	^ 4.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>reduceOnStack (in category 'all') -----
+ reduceOnStack
+ 
+ 	| list left sel right m |
+ 	list := stack removeLast: 3.
+ 	left := list at: 1.
+ 	sel := list at: 2.
+ 	right := list at: 3.
+ 
+ 	m :=	 MessageNode new
+ 				receiver: left
+ 				selector: sel
+ 				arguments: (Array with: right)
+ 				precedence: (sel precedence)
+ 				from: encoder
+ 				sourceRange: nil.
+ 	stack addLast: m.
+ !

Item was added:
+ ----- Method: EToyExpressionTransformer2>>transform (in category 'all') -----
+ transform
+ 
+ 	| leftPrec rightPrec n |
+ 	[(self inputQueueEmpty and: [stack size = 1]) not] whileTrue: [
+ 		leftPrec := self precl.
+ 		rightPrec := self precr: (n := self inputQueuePeek).
+ 		leftPrec >= rightPrec ifTrue: [
+ 			self reduceOnStack.
+ 		] ifFalse: [
+ 			self inputQueueNext.
+ 			stack addLast: n.
+ 		].
+ 	].
+ 	^ stack last.
+ !

Item was removed:
- ----- Method: FunctionTile>>sexpWith: (in category 'code generation') -----
- sexpWith: dictionary
- 	| n elements sel |
- 	sel := submorphs first operatorOrExpression.
- 	n := SExpElement keyword: #send.
- 	n attributeAt: #type put: ((owner isMemberOf: TilePadMorph) ifTrue: [owner type] ifFalse: ['Number']).
- 	elements := Array with: ((SExpElement keyword: #selector)
- 					attributeAt: #selector put: sel; yourself)
- 				with: (argumentPad sexpWith: dictionary).
- 	n elements: elements.
- 	^ n.
- !

Item was added:
+ ----- Method: ProjectLoading class>>loadImageSegment:fromDirectory:withProjectView:numberOfFontSubstitutes:substituteFont:mgr: (in category '*etoys') -----
+ loadImageSegment: morphOrList  fromDirectory: aDirectoryOrNil withProjectView: existingView numberOfFontSubstitutes: numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr
+ 
+ 	| proj projectsToBeDeleted ef f |
+ 	(f := (Flaps globalFlapTabWithID: 'Navigator' translated)) ifNotNil: [f hideFlap].
+ 	proj := morphOrList arrayOfRoots
+ 			detect: [:mm | mm isKindOf: Project]
+ 			ifNone: [^ nil].
+ 	numberOfFontSubstitutes > 0 ifTrue: [
+ 		proj projectParameterAt: #substitutedFont put: substituteFont].
+ 	ef := proj projectParameterAt: #eToysFont.
+ 	(ef isNil or: [ef ~= substituteFont familySizeFace]) ifTrue: [
+ 		proj projectParameterAt: #substitutedFont put: substituteFont.
+ 	].
+ 	proj projectParameters at: #MultiSymbolInWrongPlace put: false.
+ 		"Yoshiki did not put MultiSymbols into outPointers in older images!!"
+ 	morphOrList arrayOfRoots do: [:obj |
+ 		obj fixUponLoad: proj seg: morphOrList "imageSegment"].
+ 	(proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [
+ 		morphOrList arrayOfRoots do: [:obj | (obj isKindOf: Set) ifTrue: [obj rehash]]].
+ 
+ 	proj resourceManager: mgr.
+ 	"proj versionFrom: preStream."
+ 	proj lastDirectory: aDirectoryOrNil.
+ 	proj setParent: Project current.
+ 	projectsToBeDeleted := OrderedCollection new.
+ 	existingView == #none ifFalse: [
+ 		self makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted].
+ 	ChangeSorter allChangeSets add: proj changeSet.
+ 	Project current projectParameters
+ 		at: #deleteWhenEnteringNewProject
+ 		ifPresent: [ :ignored |
+ 			projectsToBeDeleted add: Project current.
+ 			Project current removeParameter: #deleteWhenEnteringNewProject.
+ 		].
+ 	projectsToBeDeleted isEmpty ifFalse: [
+ 		proj projectParameters
+ 			at: #projectsToBeDeleted
+ 			put: projectsToBeDeleted.
+ 	].
+ 	proj removeParameter: #eToysFont.
+ 	^ proj!

Item was changed:
  ----- Method: ProjectLoading class>>loadName:stream:fromDirectory:withProjectView:clearOriginFlag: (in category '*etoys') -----
  loadName: aFileName stream: preStream fromDirectory: aDirectoryOrNil
  withProjectView: existingView clearOriginFlag: clearOriginFlag
  	"Reconstitute a Morph from the selected file, presumed to be
  represent a Morph saved via the SmartRefStream mechanism, and open it
  in an appropriate Morphic world."
  
     	| morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict |
  	(self checkStream: preStream) ifTrue: [^ self].
  	ProgressNotification signal: '0.2'.
  	archive := preStream isZipArchive
  		ifTrue:[ZipArchive new readFrom: preStream]
  		ifFalse:[nil].
  	manifests := (archive membersMatching: '*manifest').
  	(manifests size = 1 and: [((dict := self parseManifest: manifests first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression'])
  		ifTrue: [^ self loadSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView].
  	morphOrList := self morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive.
  	morphOrList ifNil: [^ self].
  	ProgressNotification  signal: '0.4'.
  	resultArray := self fileInName: aFileName archive: archive morphOrList: morphOrList.
  	anObject := resultArray first.
  	numberOfFontSubstitutes := resultArray second.
  	substituteFont := resultArray third.
  	mgr := resultArray fourth.
  	preStream close.
  	ProgressNotification  signal: '0.7'.
  		"the hard part is over"
  	(anObject isKindOf: ImageSegment) ifTrue: [
  		project := self loadImageSegment: anObject
  			fromDirectory: aDirectoryOrNil
  			withProjectView: existingView
  			numberOfFontSubstitutes: numberOfFontSubstitutes
  			substituteFont: substituteFont
  			mgr: mgr.
  		project noteManifestDetailsIn: dict.
  		project removeParameter: #sugarProperties.
+ 		Smalltalk at: #SugarPropertiesNotification ifPresent: [:notification |
+ 			notification signal ifNotNilDo: [:props | 
+ 				project keepSugarProperties: props monitor: true]].
- 		SugarPropertiesNotification signal ifNotNilDo: [:props | 
- 			project keepSugarProperties: props monitor: true].
  		clearOriginFlag ifTrue: [project forgetExistingURL].
  		ProgressNotification  signal: '0.8'.
  		^ project
  	].!

Item was added:
+ ----- Method: ProjectLoading class>>makeExistingView:project:projectsToBeDeleted: (in category '*etoys') -----
+ makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted
+ 		existingView ifNil: [
+ 			Smalltalk isMorphic ifTrue: [
+ 				proj createViewIfAppropriate.
+ 			] ifFalse: [
+ 				ChangeSorter allChangeSets add: proj changeSet.
+ 				ProjectView openAndEnter: proj.
+ 				"Note: in MVC we get no further than the above"
+ 			].
+ 		] ifNotNil: [
+ 			(existingView project isKindOf: DiskProxy) ifFalse: [
+ 				existingView project changeSet name: 
+ ChangeSet defaultName.
+ 				projectsToBeDeleted add: existingView project.
+ 			].
+ 			(existingView owner isSystemWindow) ifTrue: [
+ 				existingView owner model: proj
+ 			].
+ 			existingView project: proj.
+ 		].
+ !



More information about the Squeak-dev mailing list