Hi, I have a simple snippet of code which says:
someObject class compile: aMethod classified: someCategory notifying: aRequestor.
where aRequestor is a PluggableTextMorph.
Actually, when I try to compile a method with a temp var, letting the compiler notify me when a temp var is needed, I always see the final CompiledMethod with the wrong source.� For example, compiling
someMethod
� ^someTemp
Is correctly updated to be
someMethod
� | someTemp |
� ^someTemp
But, after the compilation process, when I get the compiled method source, It just have
someMethod
� ^someTemp
Debugging, I ended up in�
ClassDescriptioncompile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource
��� | methodAndNode |
��� methodAndNode := self compile: text asString classified: category notifying: requestor
��� ��� ��� ��� ��� ��� ��� trailer: self defaultMethodTrailer ifFail: [^nil].
��� logSource ifTrue: [
��� ��� self logMethodSource: text forMethodWithNode: methodAndNode
��� ��� ��� inCategory: category withStamp: changeStamp notifying: requestor.
��� ].
��� self addAndClassifySelector: methodAndNode selector withMethod: methodAndNode
��� ��� method inProtocol: category notifying: requestor.
��� self instanceSide noteCompilationOf: methodAndNode selector meta: self isClassSide.
��� ^ methodAndNode selector
Which is saving as the CompiledMethod source, the original text, not the one which was changed in the PluggableTextMorph and compiled in the methodAndNode object.
Well, I was looking how the Browser works, and I didn't realize the difference...� Can someone enlight me?
Thanks,
Guille