The Inbox: EToys-fbs.78.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: EToys-fbs.78.mcz

commits-2
A new version of EToys was added to project The Inbox:
http://source.squeak.org/inbox/EToys-fbs.78.mcz

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

Name: EToys-fbs.78
Author: fbs
Time: 22 December 2010, 8:46:12.242 am
UUID: b05ca9a9-a9e0-e047-84a8-0fd215cd95e4
Ancestors: EToys-cmm.77

Use Character space instead of $  to avoid Decompiler tests failing.

=============== Diff against EToys-cmm.77 ===============

Item was changed:
  ----- Method: SyntaxMorph>>replaceKeyWord:menuItem: (in category 'pop ups') -----
  replaceKeyWord: evt menuItem: stringMorph
  "Replace my entire message (which may be multi-part) with the one specified.  Preserve all argument tiles, either in the new message or in the world outside the scriptor.  I am a SelectorNode or KeyWordNode."
 
  | menu new news newSel mm newTree newRec newArgs top oldArgNodes share ctrY |
  (menu := stringMorph owner owner) class == RectangleMorph ifTrue: [
  menu delete].
  new := stringMorph contents.
  new first = $( ifTrue: [^ self]. "Cancel"
  new first = $  ifTrue: [^ self]. "nothing"
  news := String streamContents: [:strm | "remove fake args"
+ (new findBetweenSubStrs: {' 5'. Character space.}) do: [:part | strm nextPutAll: part]].
- (new findBetweenSubStrs: #(' 5' $ )) do: [:part | strm nextPutAll: part]].
  newSel := stringMorph valueOfProperty: #syntacticallyCorrectContents.
  newSel ifNil: [newSel := news].
  mm := MessageSend receiver: 5 selector: newSel
  arguments: ((Array new: newSel numArgs) atAllPut: 5).
  newTree := mm asTilesIn: Object globalNames: false.
  newRec := newTree receiverNode.
  newArgs := newTree argumentNodes.
  ctrY := self fullBoundsInWorld center y.
  top := self messageNode.
  newRec owner replaceSubmorph: newRec by: top receiverNode.
  oldArgNodes := top argumentNodes.
  share := newArgs size min: oldArgNodes size.
  (newArgs first: share) with: (oldArgNodes first: share) do: [:newNode :oldNode |
  newNode owner replaceSubmorph: newNode by: oldNode].
  "later get nodes for objects of the right type for new extra args"
 
  top owner replaceSubmorph: top by: newTree.
 
  "Deposit extra args in the World"
  (oldArgNodes copyFrom: share+1 to: oldArgNodes size) do: [:leftOver |
  (leftOver parseNode class == LiteralNode and: [leftOver decompile asString = '5'])
  ifFalse: [newTree pasteUpMorph addMorphFront: leftOver.
  leftOver position: newTree enclosingPane fullBoundsInWorld right - 20 @ ctrY.
  ctrY := ctrY + 26]
  ifTrue: [leftOver delete]].
  newTree acceptIfInScriptor.!

Item was changed:
  ----- Method: SyntaxMorph>>replaceSel:menuItem: (in category 'pop ups') -----
  replaceSel: evt menuItem: stringMorph
  "I rep a SelectorNode.  Replace my selector with new one that was just chosen from a menu"
 
  | menu new old newSel ms oa na case news |
  (menu := stringMorph owner owner) class == RectangleMorph ifTrue: [
  menu delete].
  new := stringMorph contents.
  new first = $( ifTrue: [^ self]. "Cancel"
  new first = $  ifTrue: [^ self]. "nothing"
  news := String streamContents: [:strm | "remove fake args"
+ (new findBetweenSubStrs: {' 5'. Character space.}) do: [:part | strm nextPutAll: part]].
- (new findBetweenSubStrs: #(' 5' $ )) do: [:part | strm nextPutAll: part]].
  newSel := stringMorph valueOfProperty: #syntacticallyCorrectContents.
  newSel ifNil: [newSel := news].
  old := (ms := self findA: StringMorph) valueOfProperty: #syntacticallyCorrectContents.
  old ifNil: [old := (self findA: StringMorph) contents].
  oa := old numArgs.  na := newSel numArgs.  case := 5.
  (oa = 1) & (na = 1) ifTrue: [case := 1].
  (oa = 0) & (na = 0) ifTrue: [case := 2].
  (oa = 1) & (na  = 0) ifTrue: [case := 3].
  (oa = 0) & (na  = 1) ifTrue: [case := 4].
  case <= 4 ifTrue: ["replace the selector"
  ms contents: news. "not multi-part"
  ms setProperty: #syntacticallyCorrectContents toValue: newSel].
  case = 3 ifTrue: [owner tossOutArg: 1].
  case = 4 ifTrue: [self addArg: 1].
  "more cases here.  Rebuild the entire MessageNode"
 
  self acceptIfInScriptor.!