-
Notifications
You must be signed in to change notification settings - Fork 68
/
SmartSyntaxPluginAssignmentCodeGenerator.class.st
158 lines (133 loc) · 5.55 KB
/
SmartSyntaxPluginAssignmentCodeGenerator.class.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
Class {
#name : #SmartSyntaxPluginAssignmentCodeGenerator,
#superclass : #SmartSyntaxPluginPrologCodeGenerator,
#category : #'VMMaker-SmartSyntaxPlugins'
}
{ #category : #'coercing support' }
SmartSyntaxPluginAssignmentCodeGenerator >> assign: variableName coerceTo: cType from: stackIndex [
^String streamContents:
[:aStream |
aStream
nextPutAll: variableName;
nextPutAll: ' := self cCoerce: (interpreterProxy firstIndexableField:';
nextPutAll: (self stackAccessorFor: stackIndex);
nextPutAll: ') to: ';
store: cType]
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asBooleanValueFrom: stackIndex [
^(aString, ' := '), (self loadAs: #booleanValueOf: from: stackIndex)
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asCharPtrFrom: stackIndex [
^self assign: aString coerceTo: #'char *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asCharPtrFrom: stackIndex andThen: valBlock [
^self assign: aString coerceTo: #'char *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asFloatValueFrom: anInteger [
^String streamContents:
[:aStream |
aStream
nextPutAll: aString;
nextPutAll: ' := interpreterProxy stackFloatValue: ';
print: anInteger]
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asIntPtrFrom: stackIndex [
^self assign: aString coerceTo: #'int *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asIntPtrFrom: stackIndex andThen: valBlock [
^self assign: aString coerceTo: #'int *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asIntegerValueFrom: anInteger [
^String streamContents:
[:aStream |
aStream
nextPutAll: aString;
nextPutAll: ' := interpreterProxy stackIntegerValue: ';
print: anInteger]
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asKindOf: aClass from: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asKindOfIntegerFrom: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asMemberOf: aClass from: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asMemberOfLargeNegativeIntegerFrom: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asMemberOfLargePositiveIntegerFrom: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asNonIntegerValueFrom: stackIndex [
^self ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asOopPtrFrom: stackIndex [
^self assign: aString coerceTo: 'sqInt *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asOopPtrFrom: stackIndex andThen: valBlock [
^self assign: aString coerceTo: 'sqInt *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asRawOopFrom: stackIndex [
^aString, ' := ', (self stackAccessorFor: stackIndex)
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asUnsignedPtrFrom: stackIndex andThen: valBlock [
^self assign: aString coerceTo: 'unsigned *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asUnsignedValueFrom: stackIndex [
^String streamContents:
[:aStream |
aStream
nextPutAll: aString;
nextPutAll: ' := (interpreterProxy bytesPerOop = 4';
crtab: 2;
nextPutAll: 'ifTrue: [interpreterProxy positive32BitValueOf:';
nextPutAll: (self stackAccessorFor: stackIndex);
nextPutAll: '] ifFalse: [interpreterProxy positive64BitValueOf:';
nextPutAll: (self stackAccessorFor: stackIndex);
nextPutAll: '])']
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asWBCharPtrFrom: stackIndex [
^self assign: aString coerceTo: #'char *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asWBFloatPtrFrom: stackIndex [
^self assign: aString coerceTo: #'float *' from: stackIndex
]
{ #category : #coercing }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgLoad: aBlock expr: aString asWBIntPtrFrom: stackIndex [
^self assign: aString coerceTo: #'int *' from: stackIndex
]
{ #category : #'coercing support' }
SmartSyntaxPluginAssignmentCodeGenerator >> ccgValBlock: aString [
"ignore"
]
{ #category : #'coercing support' }
SmartSyntaxPluginAssignmentCodeGenerator >> loadAs: coercionSelector from: stackIndex [
^String streamContents:
[:aStream |
aStream
nextPutAll: 'interpreterProxy ';
nextPutAll: coercionSelector;
nextPutAll: (self stackAccessorFor: stackIndex)]
]