Ale:
Como siempre , me sirve lo que aclaras.
Ahora te aclaro yo el porque de la pregunta.
Si quiero no tener fuentes de la manera que esta implementado en Squeak,
debo tener alguna forma de "ver" lo que este grabado externamente.
El "who" es utilizado como parte del proceso de visualizacion del método.
> En algunos Smalltalk, el mismo método conoce cual es la clase y el selector
> para quienes fuera creado...
> para quien envía #who espera que venga algo que es
> como un par dónde hay una clase y un selector... no es correcto devolver
> #(#unknown #unknown).
Uno podria pensar entonces que si encontras esto es que algo anduvo mal..
(era mi hipotesis)
Por ahora, como ya lo dije en otro mail, trato de pensar en las clases como
los ladrillos, hasta que llegue el momento de pensar en los metodos.
Tengo una idea loca de tener un "repositorio de clases" y por otra parte los
experimentos de recorte terminan por lo general en descordinacion de las
fuentes y changes.
Te acompaño lo que estoy haciendo.
Primer paso al repositorio de clases
Utilizando lo aprendido , implemente
Class >> fileOutCompressed
| unzipped zipped buffer |
Cursor write
showWhile: [unzipped := RWBinaryOrTextStream on: ''.
self fileOutOn: unzipped.
unzipped reset.
zipped := FileDirectory default newFileNamed: self name , FileDirectory dot
, ImageSegment compressedFileExtension.
zipped binary.
zipped := GZipWriteStream on: zipped.
buffer := ByteArray new: 50000.
'Compressing ' , self name
displayProgressAt: Sensor cursorPoint
from: 0
to: unzipped size
during: [:bar |
[unzipped atEnd]
whileFalse: [bar value: unzipped position.
zipped
nextPutAll: (unzipped nextInto: buffer)].
zipped close.
unzipped close]]
Este tipo de compresion logra archivos de 1/4 del tamaño de los archivos de
texto
CompiledMethod methodsFor: 'source code management' stamp: 'edc 9/5/2005
09:52'!
sourceSelectorFromExternalSources
"Answer my selector extracted from my source. If no source
answer nil"
| w aString unzipped lookString startPos lastPos |
w := self who.
lookString := w first name , ' methodsFor'.
aString := (w first name findTokens: ' ') first , '.sqz'.
unzipped := RWBinaryOrTextStream with: (GZipReadStream decompressFile:
aString) contents.
unzipped reset.
unzipped match: lookString.
unzipped match: w last.
unzipped nextChunk.
lastPos := unzipped position.
unzipped position: unzipped position - 1.
unzipped backUpTo: '!!'.
unzipped position: unzipped position - 1.
unzipped backUpTo: '!!'.
startPos := unzipped position.
(StringHolder new
textContents: (unzipped contents copyFrom: startPos to: lastPos))
openLabel: w asString.
Como ves, pretendo tener SIEMPRE, clase y selector.
Si hay una forma mejor , me encantaria saberlo.
Edgar
___________________________________________________________
1GB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar