[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