-
Notifications
You must be signed in to change notification settings - Fork 68
/
TVMSimulator.trait.st
39 lines (32 loc) · 1.13 KB
/
TVMSimulator.trait.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Trait {
#name : #TVMSimulator,
#category : #VMMaker
}
{ #category : #initialization }
TVMSimulator >> openOn: fileName extraMemory: extraBytes [
"CogVMSimulator new openOn: 'clone.im' extraMemory: 100000"
"We set the memory manager if it is not already set"
self memoryManager ifNil: [
self memoryManager: MachineSimulatorMemoryManager new.
self objectMemory memoryManager: self memoryManager.
self memoryManager wordSize: self objectMemory wordSize.
].
"Set the image name and the first argument; there are
no arguments during simulation unless set explicitly."
self systemAttributes
at: 1 put: fileName;
at: 2 put: nil.
self simulationOnly: [ self setImageName: fileName ].
^ self imageReaderWriter readImageNamed: fileName
]
{ #category : #'frame access' }
TVMSimulator >> withoutSmallIntegerTags: anInteger [
| signBit |
self assert: (anInteger >= 0 and: [anInteger highBit <= (self objectMemory wordSize * 8)]).
signBit := 1 << (self objectMemory wordSize * 8 - 1).
^(anInteger bitAnd: signBit) ~= 0
ifTrue: ["negative"
(anInteger bitClear: signBit + 1) - signBit]
ifFalse: ["positive"
anInteger - 1]
]