Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1242.mcz ==================== Summary ==================== Name: Kernel-eem.1242 Author: eem Time: 25 June 2019, 5:14:28.553444 pm UUID: b6c4c45a-1a4d-477d-920d-82814551c862 Ancestors: Kernel-ul.1241 Fix Context>>#privRefresh: for full blocks. This bug manifests as the debugger crashing if one restarts a (full) block with any signficant complexity. Update interpretNext2ByteSistaV1Instruction:for:extA:extB:startPC: with the callMappedInlinedPrimitive: Sista bytecode. =============== Diff against Kernel-ul.1241 =============== Item was changed: ----- Method: Context>>privRefresh (in category 'initialize-release') ----- privRefresh "Reinitialize the receiver so that it is in the state it was at its creation." closureOrNil ifNotNil: + [closureOrNil isFullBlock + ifTrue: + [pc := method initialPC. + self stackp: method numTemps. + closureOrNil numArgs + closureOrNil numCopiedValues + 1 to: method numTemps do: + [:i | self tempAt: i put: nil]] + ifFalse: "In non-full blocks temps are established by push btecodes" + [pc := closureOrNil startpc. + self stackp: closureOrNil numArgs + closureOrNil numCopiedValues]. + 1 to: closureOrNil numCopiedValues do: - [pc := closureOrNil startpc. - self stackp: closureOrNil numArgs + closureOrNil numCopiedValues. - 1 to: closureOrNil numCopiedValues do: [:i | self tempAt: closureOrNil numArgs + i put: (closureOrNil at: i)]] ifNil: [pc := method initialPC. + self stackp: method numTemps. + method numArgs + 1 to: method numTemps do: - self stackp: method numTemps. - method numArgs+1 to: method numTemps do: [:i | self tempAt: i put: nil]]! Item was removed: - ----- Method: Exception>>printVerboseOn: (in category 'printing') ----- - printVerboseOn: aStream - aStream - nextPutAll: 'vvvvvvvvvvvvvvvvvv ' , self description , ' vvvvvvvvvvvvvvvvvv' ; - cr ; - nextPutAll: 'The time is ', DateAndTime now asString ; - cr. - "Allow applications to optionally print extra details without overriding a base package." - self printDetailsOn: aStream. - aStream - nextPutAll: self signalerContext longStack ; - cr ; - nextPutAll: '^^^^^^^^^^^^^^^^^^ ' , self description , ' ^^^^^^^^^^^^^^^^^^' ; - cr ; - flush! Item was changed: ----- Method: InstructionStream>>interpretNext2ByteSistaV1Instruction:for:extA:extB:startPC: (in category 'decoding - private - sista v1') ----- interpretNext2ByteSistaV1Instruction: bytecode for: client extA: extA extB: extB startPC: startPC "Send to the argument, client, a message that specifies the next instruction. This method handles the two-byte codes. For a table of the bytecode set, see EncoderForV1's class comment." | byte method | method := self method. byte := self method at: pc. pc := pc + 1. "We do an inline quasi-binary search on bytecode" bytecode < 234 ifTrue: "pushes" [bytecode < 231 ifTrue: [bytecode < 229 ifTrue: [| literal | bytecode = 226 ifTrue: [^client pushReceiverVariable: (extA bitShift: 8) + byte]. literal := method literalAt: (extA bitShift: 8) + byte + 1. bytecode = 227 ifTrue: [^client pushLiteralVariable: literal]. ^client pushConstant: literal]. bytecode = 229 ifTrue: [^client pushTemporaryVariable: byte]. ^self unusedBytecode: client at: startPC]. bytecode = 231 ifTrue: [^byte < 128 ifTrue: [client pushNewArrayOfSize: byte] ifFalse: [client pushConsArrayWithElements: byte - 128]]. bytecode = 232 ifTrue: [^client pushConstant: ((extB < 128 ifTrue: [extB] ifFalse: [extB - 256]) bitShift: 8) + byte]. ^client pushConstant: (Character value: (extB bitShift: 8) + byte)]. bytecode < 240 ifTrue: "sends, trap and jump" [bytecode < 236 ifTrue: "sends" [(bytecode = 235 and: [extB >= 64]) ifTrue: [^client directedSuperSend: (method literalAt: (extA bitShift: 5) + (byte // 8) + 1) numArgs: (extB - 64 bitShift: 3) + (byte \\ 8)]. ^client send: (method literalAt: (extA bitShift: 5) + (byte // 8) + 1) super: bytecode = 235 numArgs: (extB bitShift: 3) + (byte \\ 8)]. bytecode = 236 ifTrue: + [^client callMappedInlinedPrimitive: byte]. - [^self unusedBytecode: client at: startPC]. "reserved for ensureAllocableSlots:" bytecode = 237 ifTrue: [^client jump: (extB bitShift: 8) + byte]. ^client jump: (extB bitShift: 8) + byte if: bytecode = 238]. bytecode < 243 ifTrue: [bytecode = 240 ifTrue: [^client popIntoReceiverVariable: (extA bitShift: 8) + byte]. bytecode = 241 ifTrue: [^client popIntoLiteralVariable: (method literalAt: (extA bitShift: 8) + byte + 1)]. ^client popIntoTemporaryVariable: byte]. bytecode = 243 ifTrue: [^client storeIntoReceiverVariable: (extA bitShift: 8) + byte]. bytecode = 244 ifTrue: [^client storeIntoLiteralVariable: (method literalAt: (extA bitShift: 8) + byte + 1)]. bytecode = 245 ifTrue: [^client storeIntoTemporaryVariable: byte]. "246-247 1111011 i xxxxxxxx UNASSIGNED" ^self unusedBytecode: client at: startPC! |
Free forum by Nabble | Edit this page |