2016-02-27 0:36 GMT+01:00 Eliot Miranda <eliot.mira...@gmail.com>: > Hi Nicolai, > > On Fri, Feb 26, 2016 at 1:50 PM, Nicolai Hess <nicolaih...@gmail.com> > wrote: > >> 17618 >> <https://pharo.fogbugz.com/f/cases/17618/Failing-test-ReleaseTest-testInstalledMethodsWithIncorrectTrailerKind> >> Failing test: ReleaseTest>>#testInstalledMethodsWithIncorrectTrailerKind >> Interesting bug. >> someone who can tell me what exactly is this trailer kind and why it is >> based >> on some "flag" in "method at: method size". >> > > There's a rich class comment in CompiledMethodTrailer which explains a > lot, but let me add a little. >
Ah, yes, thanks, sorry, should have read the class comments first:-) > > Back in the day the source pointer in methods (the pointer that says which > of the two source files and where in the file a method's source is kept) > was stored in three bytes added onto the end of a CompiledMethod after its > endPC. Then Dan Ingalls added the ability to not have source files at all > but just to have named temporary variables. he added a compressed version > of the temp names in bytes tacked on at the end of a method, replacing the > source pointer. IIRC the difference between a source pointer, no source > pointer, or a compressed version of the temp names was all encoded in the > last byte. > Interesting. > > Round about 2009 Igor Stasenko did a really nice reimplementation of this > scheme where he factored out the encoding tricks into > CompiledMethodTrailer, allowing one to generalize the scheme and add new > encoding types, for a total of 256 different kinds of trailer. > Yes I do remember his work on this. > > (and if you already know all of this, forgive me for trying to teach you > to suck eggs) > Anyway this trailer is > > CompiledMethodTrailer >>encodeEmbeddedSourceQCompress > > "data is string with method's source code, encode it using qCompress > method" > self encodeUsingQCompress > > CompiledMethodTrailer >>decodeEmbeddedSourceQCompress > > "data is string with method's source code, encoded using qCompress method" > self qDecompress. > > HTH > Thanks Eliot > > And why it seems to be wrong for many GT-methods: >> >> (CompiledMethod allInstances select:[:m | (m at: m size) = 24]) >> collect:[:k | >> k -> k trailer kind] "an Array(String >> class>>#gtInspectorFourtyTwo->#EmbeddedSourceQCompress >> OSEnvironment>>#getEnv:->#EmbeddedSourceQCompress >> OSEnvironment>>#getEnv:->#EmbeddedSourceQCompress GlobalVariable >> class>>#gtExampleSmalltalk->#EmbeddedSourceQCompress VirtualMachine >> class>>#gtExampleBasic->#EmbeddedSourceQCompress GLMBrowser >> class>>#gtExampleBasic->#EmbeddedSourceQCompress RPackageTag >> class>>#gtExamplePackageTag->#EmbeddedSourceQCompress Object >> class>>#gtExampleBasic->#EmbeddedSourceQCompress GLMCompositePresentation >> class>>#gtExampleCompositePresentation->#EmbeddedSourceQCompress >> LiteralVariable >> class>>#gtExampleUniqueLiteralVariable->#EmbeddedSourceQCompress >> GTSpotterRecorderEvent >> class>>#gtExampleAnySubclass->#EmbeddedSourceQCompress >> MetacelloAbstractPackageSpec >> class>>#gtExamplePackageSpec->#EmbeddedSourceQCompress >> MetacelloProjectReferenceSpec >> class>>#gtExampleProjectReferenceSpec->#EmbeddedSourceQCompress >> MetacelloProjectSpec >> class>>#gtExampleMetacelloSpec->#EmbeddedSourceQCompress MetacelloSpec >> class>>#gtExampleMetacelloSpec->#EmbeddedSourceQCompress MetacelloVersion >> class>>#gtExampleMetacelloVersion->#EmbeddedSourceQCompress GLMPresentation >> class>>#gtExampleBasic->#EmbeddedSourceQCompress Bag >> class>>#gtExampleBagWithTenElements->#EmbeddedSourceQCompress Bag >> class>>#gtExampleBagWithOneElement->#EmbeddedSourceQCompress >> GTDummyExamplesRecursive class>>#h->#EmbeddedSourceQCompress GLMAlertBrick >> class>>#gtExample->#EmbeddedSourceQCompress >> GTDummyExampleProvider>>#a->#EmbeddedSourceQCompress >> GTDummyExampleProvider>>#b->#EmbeddedSourceQCompress >> GTDummyExampleWithAssertions>>#a->#EmbeddedSourceQCompress >> GTDummyExampleWithAssertions>>#b->#EmbeddedSourceQCompress GTDummyExamples >> class>>#l->#EmbeddedSourceQCompress GTDummyExamples >> class>>#o->#EmbeddedSourceQCompress GTDummyExamplesInvalid >> class>>#a:->#EmbeddedSourceQCompress GTDummyExamplesPragmas >> class>>#a->#EmbeddedSourceQCompress GTDummyExamplesPragmas >> class>>#c->#EmbeddedSourceQCompress GTDummyExamplesPragmas >> class>>#b->#EmbeddedSourceQCompress GLMCollapsableBrick >> class>>#gtExample->#EmbeddedSourceQCompress FileReference >> class>>#gtExampleText->#EmbeddedSourceQCompress GTSpotterStep >> class>>#gtExampleBasic->#EmbeddedSourceQCompress GTEventAnnouncement >> class>>#gtExampleEmptyAnnouncement->#EmbeddedSourceQCompress >> UndefinedObject>>#DoIt->#EmbeddedSourceQCompress >> UndefinedObject>>#DoIt->#EmbeddedSourceQCompress)" >> > > _,,,^..^,,,_ > best, Eliot >