-
Notifications
You must be signed in to change notification settings - Fork 69
/
VMClass.extension.st
85 lines (69 loc) · 3.05 KB
/
VMClass.extension.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Extension { #name : #VMClass }
{ #category : #'*VMMaker' }
VMClass class >> initializeForPlugins: optionsDictionaryOrArray [
"Do a default initialization, suitable for generating plugin sources."
StackInterpreterSimulator
initializeWithOptions: optionsDictionaryOrArray
]
{ #category : #'*VMMaker' }
VMClass class >> initializeMiscConstants [
"Falsify the `what type of VM is this?' flags that are defined in the various interp.h files.
Subclass implementations need to include a super initializeMiscConstants"
| omc |
VMBIGENDIAN class. "Mention this for the benefit of CCodeGenerator>>emitCConstantsOn:"
STACKVM := COGVM := false.
InitializationOptions ifNil: [
InitializationOptions := Dictionary new ].
omc := InitializationOptions
at: #ObjectMemory
ifAbsent: [ self error: 'Please specify an object memory' ].
InitializationOptions at: #SpurObjectMemory ifAbsentPut: (omc
ifNil: [ false ]
ifNotNil: [
(Smalltalk at: omc) includesBehavior: SpurMemoryManager ]). "the new contender"
"Use ifAbsentPut: so that they will get copied back to the
VMMaker's options and dead code will likely be eliminated."
PharoVM := InitializationOptions at: #PharoVM ifAbsentPut: [ false ].
FEATURE_FFI := InitializationOptions
at: #FEATURE_FFI
ifAbsentPut: [ false ].
FEATURE_THREADED_FFI := InitializationOptions
at: #FEATURE_THREADED_FFI
ifAbsentPut: [ false ].
SistaVM := InitializationOptions at: #SistaVM ifAbsentPut: [ false ].
TempVectReadBarrier := InitializationOptions
at: #TempVectReadBarrier
ifAbsentPut: [ false ].
"Simulation only; on by default..."
CloneOnGC := InitializationOptions
at: #CloneOnGC
ifAbsentPut: [ true ].
CloneOnScavenge := InitializationOptions
at: #CloneOnScavenge
ifAbsentPut: [ true ].
"These must be set only if specified, not defaulted, because they are set on the command line or in include files."
InitializationOptions
at: #VMBIGENDIAN ifPresent: [ :value | VMBIGENDIAN := value ];
at: #STACKVM ifPresent: [ :value | STACKVM := value ];
at: #COGVM
ifPresent: [ :value | COGVM := InitializationOptions at: #COGVM ].
"consistency checks"
(TempVectReadBarrier not and: [
{ SpurMemoryManager compactorClass }
, SpurMemoryManager compactorClass ancilliaryClasses anySatisfy: [
:c | c == SpurSelectiveCompactor ] ]) ifTrue: [
self error: 'Selective compactor requires read barrier' ].
"And not these; they're compile-time"
IMMUTABILITY := InitializationOptions
at: #IMMUTABILITY
ifAbsent: [ true ].
WIN32 := InitializationOptions at: #WIN32 ifAbsent: [false].
PRIdSQINT := InitializationOptions at: #FormatSqInt ifAbsent: [ 'ld' ]
]
{ #category : #'*VMMaker' }
VMClass >> isEndOfLine: aCharacter [
<inline: true>
^ self
cCode: [ aCharacter = 13 or: [ aCharacter = 10 ] ]
inSmalltalk: [ Character cr = aCharacter or: [ Character lf = aCharacter ] ]
]