[Pkg] The Trunk: Compiler-eem.148.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Jul 17 23:54:22 UTC 2010


Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.148.mcz

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

Name: Compiler-eem.148
Author: eem
Time: 17 July 2010, 4:54:07.87 pm
UUID: 5f5463f2-9924-4c05-95c9-0badbf699034
Ancestors: Compiler-jcg.147

Collection>>fold: and SequenceableCollection>>copyUpThrough:, extensions used by Cog VMMaker.
Change to older semantics of Character>>hex for Cog VMMaker.

=============== Diff against Compiler-jcg.147 ===============

Item was changed:
  ----- Method: Compiler>>evaluate:in:to:notifying:ifFail:logged: (in category 'public access') -----
  evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: logFlag
+ 	"Compiles the sourceStream into a parse tree, then generates code into
+ 	 a method. If aContext is not nil, the text can refer to temporaries in that
+ 	 context (the Debugger uses this). If aRequestor is not nil, then it will receive
+ 	 a notify:at: message before the attempt to evaluate is aborted. Finally, the 
+ 	 compiled method is invoked from here via withArgs:executeMethod:, hence
+ 	 the system no longer creates Doit method litter on errors."
- 	"Compiles the sourceStream into a parse tree, then generates code into a 
- 	method. This method is then installed in the receiver's class so that it 
- 	can be invoked. In other words, if receiver is not nil, then the text can 
- 	refer to instance variables of that receiver (the Inspector uses this). If 
- 	aContext is not nil, the text can refer to temporaries in that context (the 
- 	Debugger uses this). If aRequestor is not nil, then it will receive a 
- 	notify:at: message before the attempt to evaluate is aborted. Finally, the 
- 	compiled method is invoked from here as DoIt or (in the case of 
- 	evaluation in aContext) DoItIn:. The method is subsequently removed 
- 	from the class, but this will not get done if the invocation causes an 
- 	error which is terminated. Such garbage can be removed by executing: 
- 	Smalltalk allBehaviorsDo: [:cl | cl removeSelector: #DoIt; removeSelector: 
- 	#DoItIn:]."
  
  	| methodNode method value toLog itsSelection itsSelectionString |
  	class := (aContext == nil ifTrue: [receiver] ifFalse: [aContext receiver]) class.
  	self from: textOrStream class: class context: aContext notifying: aRequestor.
+ 	methodNode := self translate: sourceStream noPattern: true ifFail: [^failBlock value].
- 	methodNode := self translate: sourceStream noPattern: true ifFail:
- 		[^failBlock value].
  
+ 	method := self interactive
+ 				ifTrue: [methodNode generateWithTempNames]
+ 				ifFalse: [methodNode generate].
+ 
- 	method := self interactive ifTrue: [ 	methodNode generateWithTempNames ] 
- 		ifFalse: [methodNode generate].
- 	
  	value := receiver
  				withArgs: (context ifNil: [#()] ifNotNil: [{context}])
  				executeMethod: method.
  
+ 	logFlag ifTrue:
+ 		[toLog := ((requestor respondsTo: #selection)  
- 	logFlag ifTrue:[
- 		toLog := ((requestor respondsTo: #selection)  
  			and:[(itsSelection := requestor selection) notNil
  			and:[(itsSelectionString := itsSelection asString) isEmptyOrNil not]])
  				ifTrue:[itsSelectionString]
  				ifFalse:[sourceStream contents].
  		SystemChangeNotifier uniqueInstance evaluated: toLog context: aContext].
  	^ value!



More information about the Packages mailing list