[squeak-dev] The Trunk: Compiler-ar.108.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Dec 22 11:48:45 UTC 2009


Andreas Raab uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-ar.108.mcz

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

Name: Compiler-ar.108
Author: ar
Time: 22 December 2009, 12:48:23 pm
UUID: 538bb76e-8967-e445-9b2c-161c98c289d6
Ancestors: Compiler-ar.107

CompiledMethodTrailer phase 2.

=============== Diff against Compiler-ar.107 ===============

Item was changed:
  ----- Method: Compiler>>compiledMethodFor:in:to:notifying:ifFail:logged: (in category 'public access') -----
  compiledMethodFor: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: logFlag
  	"Compiles the sourceStream into a parse tree, then generates code
  	 into a method, and answers it.  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."
  
  	| methodNode method |
  	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].
+ 	method := self interactive ifTrue: [ 	methodNode generateWithTempNames ] 
+ 		ifFalse: [methodNode generate].
+ 		
- 	method := methodNode generate: #(0 0 0 0).
- 	self interactive ifTrue:
- 		[method := method copyWithTempsFromMethodNode: methodNode].
  	logFlag ifTrue:
  		[SystemChangeNotifier uniqueInstance evaluated: sourceStream contents context: aContext].
  	^method!

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. 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].
+ 
+ 	method := self interactive ifTrue: [ 	methodNode generateWithTempNames ] 
+ 		ifFalse: [methodNode generate].
- 	method := methodNode generate: #(0 0 0 0).
- 	self interactive ifTrue:
- 		[method := method copyWithTempsFromMethodNode: methodNode].
  	
  	value := receiver
  				withArgs: (context ifNil: [#()] ifNotNil: [{context}])
  				executeMethod: method.
  
  	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 Squeak-dev mailing list