The Trunk: Kernel-eem.1242.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-eem.1242.mcz

commits-2
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!