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

Igor Stasenko siguctua at gmail.com
Tue Dec 22 13:51:25 UTC 2009


2009/12/22 Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com>:
> Why does this depend on interactive ?
>
>       method := self interactive ifTrue: [    methodNode
> generateWithTempNames ]
>               ifFalse: [methodNode generate].
>

who knows :)

i just changed this code to use more convenient forms, but not changed
semantics.

(it is now more readable, up to the point that you start asking questions)  :)


> Nicolas
>
> 2009/12/22  <commits at source.squeak.org>:
>> 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!
>>
>>
>>
>
>



-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list