Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.880.mcz ==================== Summary ==================== Name: Kernel-ul.880 Author: ul Time: 21 October 2014, 4:56:17.427 pm UUID: 4b600072-456c-413f-8b7e-e3f1ae8340f3 Ancestors: Kernel-eem.879 Compile methods with the right trailer to avoid a #becomeForward: when the actual trailer is added. =============== Diff against Kernel-eem.879 =============== Item was changed: ----- Method: Behavior>>compile:notifying: (in category 'compiling') ----- compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | methodAndNode | methodAndNode := self compile: code "a Text" notifying: requestor + trailer: (self defaultMethodTrailerIfLogSource: true) - trailer: self defaultMethodTrailer ifFail: [^nil]. methodAndNode method putSource: code fromParseNode: methodAndNode node inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: methodAndNode selector withMethod: methodAndNode method notifying: requestor. ^ methodAndNode selector! Item was added: + ----- Method: Behavior>>defaultMethodTrailerIfLogSource: (in category 'compiling') ----- + defaultMethodTrailerIfLogSource: logSource + + logSource ifFalse: [ ^self defaultMethodTrailer ]. + ^CompiledMethodTrailer sourcePointerInFile: 2! Item was changed: ----- Method: ClassDescription>>compile:classified:withStamp:notifying:logSource: (in category 'compiling') ----- compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource + + | methodAndNode selector | + methodAndNode := self + compile: text asString + notifying: requestor + trailer: (self defaultMethodTrailerIfLogSource: logSource) + ifFail: [ ^nil ]. + selector := methodAndNode selector. - | methodAndNode | - methodAndNode := self compile: text asString notifying: requestor - trailer: self defaultMethodTrailer ifFail: [^nil]. logSource ifTrue: [ self logMethodSource: text forMethodWithNode: methodAndNode inCategory: category withStamp: changeStamp notifying: requestor. ]. + self addAndClassifySelector: selector withMethod: methodAndNode - self addAndClassifySelector: methodAndNode selector withMethod: methodAndNode method inProtocol: category notifying: requestor. + self instanceSide noteCompilationOf: selector meta: self isClassSide. + ^selector! - self instanceSide noteCompilationOf: methodAndNode selector meta: self isClassSide. - ^ methodAndNode selector! Item was changed: ----- Method: ClassDescription>>compile:environment:classified:withStamp:notifying:logSource: (in category 'compiling') ----- compile: text environment: anEnvironment classified: category withStamp: changeStamp notifying: requestor logSource: logSource | methodAndNode context methodNode | context := CompilationCue source: text class: self environment: anEnvironment requestor: requestor. methodNode := self newCompiler compile: context ifFail: [^ nil]. methodAndNode := CompiledMethodWithNode generateMethodFromNode: methodNode + trailer: (self defaultMethodTrailerIfLogSource: logSource). - trailer: self defaultMethodTrailer. 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! Item was changed: ----- Method: CompiledMethod>>decompileWithTemps (in category 'decompiling') ----- decompileWithTemps "Return the decompiled parse tree that represents self, but with the temp names obtained either by compiling the sourcecode, or directly if the method has temps in its trailer." | class selector tempNames source | class := self methodClass ifNil: [Object]. selector := self selector ifNil: [self defaultSelector]. self holdsTempNames ifTrue: [tempNames := self tempNamesString] ifFalse: ["No source file or no source (e.g. doits) and no temp names -- decompile without temp names " ((self fileIndex > 0 and: [(SourceFiles at: self fileIndex) isNil]) or: [(source := self getSourceFromFile) isNil]) ifTrue: [^self decompile]. tempNames := (class newCompiler parse: source asString in: class notifying: nil) + generate: CompiledMethodTrailer empty; - generate: CompiledMethodTrailer defaultMethodTrailer; schematicTempNamesString]. ^(self decompilerClass new withTempNames: tempNames) decompile: selector in: class method: self methodForDecompile! Item was added: + ----- Method: CompiledMethodTrailer class>>sourcePointerInFile: (in category 'as yet unclassified') ----- + sourcePointerInFile: fileIndex + + ^self new + sourcePointer: (SourceFiles + sourcePointerFromFileIndex: fileIndex + andPosition: (SourceFiles at: fileIndex) position); + yourself + ! |
Free forum by Nabble | Edit this page |