Ok, but still I do not understand how did the methods end up having a problem 
with the method trailer? And what can we do about it?

Doru


> On Feb 27, 2016, at 12:32 PM, Nicolai Hess <[email protected]> wrote:
> 
> 
> 
> 2016-02-27 0:36 GMT+01:00 Eliot Miranda <[email protected]>:
> Hi Nicolai,
> 
> On Fri, Feb 26, 2016 at 1:50 PM, Nicolai Hess <[email protected]> wrote:
> 17618 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

--
www.tudorgirba.com
www.feenk.com

"Being happy is a matter of choice."





Reply via email to