40
40
#include " ../vmobjects/VMSymbol.h"
41
41
42
42
void Emit1 (MethodGenerationContext& mgenc, uint8_t bytecode,
43
- size_t stackEffect) {
43
+ int64_t stackEffect) {
44
44
mgenc.AddBytecode (bytecode, stackEffect);
45
45
}
46
46
47
47
void Emit2 (MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
48
- size_t stackEffect) {
48
+ int64_t stackEffect) {
49
49
mgenc.AddBytecode (bytecode, stackEffect);
50
50
mgenc.AddBytecodeArgument (idx);
51
51
}
52
52
53
53
void Emit3 (MethodGenerationContext& mgenc, uint8_t bytecode, size_t idx,
54
- size_t ctx, size_t stackEffect) {
54
+ size_t ctx, int64_t stackEffect) {
55
55
mgenc.AddBytecode (bytecode, stackEffect);
56
56
mgenc.AddBytecodeArgument (idx);
57
57
mgenc.AddBytecodeArgument (ctx);
@@ -65,7 +65,7 @@ void EmitDUP(MethodGenerationContext& mgenc) {
65
65
Emit1 (mgenc, BC_DUP, 1 );
66
66
}
67
67
68
- void EmitPUSHLOCAL (MethodGenerationContext& mgenc, long idx, int ctx) {
68
+ void EmitPUSHLOCAL (MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
69
69
assert (idx >= 0 );
70
70
assert (ctx >= 0 );
71
71
if (ctx == 0 ) {
@@ -85,7 +85,7 @@ void EmitPUSHLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
85
85
Emit3 (mgenc, BC_PUSH_LOCAL, idx, ctx, 1 );
86
86
}
87
87
88
- void EmitPUSHARGUMENT (MethodGenerationContext& mgenc, long idx, int ctx) {
88
+ void EmitPUSHARGUMENT (MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
89
89
assert (idx >= 0 );
90
90
assert (ctx >= 0 );
91
91
@@ -120,7 +120,7 @@ void EmitPUSHFIELD(MethodGenerationContext& mgenc, VMSymbol* field) {
120
120
}
121
121
122
122
void EmitPUSHBLOCK (MethodGenerationContext& mgenc, VMInvokable* block) {
123
- const int8_t idx = mgenc.AddLiteralIfAbsent (block);
123
+ const uint8_t idx = mgenc.AddLiteralIfAbsent (block);
124
124
Emit2 (mgenc, BC_PUSH_BLOCK, idx, 1 );
125
125
}
126
126
@@ -130,11 +130,11 @@ void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, vm_oop_t cst) {
130
130
// we also make sure that we don't miss anything in the else
131
131
// branch of the class check
132
132
if (CLASS_OF (cst) == load_ptr (integerClass)) {
133
- if (INT_VAL (cst) == 0ll ) {
133
+ if (INT_VAL (cst) == 0LL ) {
134
134
Emit1 (mgenc, BC_PUSH_0, 1 );
135
135
return ;
136
136
}
137
- if (INT_VAL (cst) == 1ll ) {
137
+ if (INT_VAL (cst) == 1LL ) {
138
138
Emit1 (mgenc, BC_PUSH_1, 1 );
139
139
return ;
140
140
}
@@ -147,7 +147,7 @@ void EmitPUSHCONSTANT(MethodGenerationContext& mgenc, vm_oop_t cst) {
147
147
return ;
148
148
}
149
149
150
- const int8_t idx = mgenc.AddLiteralIfAbsent (cst);
150
+ const uint8_t idx = mgenc.AddLiteralIfAbsent (cst);
151
151
if (idx == 0 ) {
152
152
Emit1 (mgenc, BC_PUSH_CONSTANT_0, 1 );
153
153
return ;
@@ -180,7 +180,7 @@ void EmitPUSHGLOBAL(MethodGenerationContext& mgenc, VMSymbol* global) {
180
180
} else if (global == SymbolFor (" false" )) {
181
181
EmitPUSHCONSTANT (mgenc, load_ptr (falseObject));
182
182
} else {
183
- const int8_t idx = mgenc.AddLiteralIfAbsent (global);
183
+ const uint8_t idx = mgenc.AddLiteralIfAbsent (global);
184
184
Emit2 (mgenc, BC_PUSH_GLOBAL, idx, 1 );
185
185
}
186
186
}
@@ -191,7 +191,7 @@ void EmitPOP(MethodGenerationContext& mgenc) {
191
191
}
192
192
}
193
193
194
- void EmitPOPLOCAL (MethodGenerationContext& mgenc, long idx, int ctx) {
194
+ void EmitPOPLOCAL (MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
195
195
assert (idx >= 0 );
196
196
assert (ctx >= 0 );
197
197
if (ctx == 0 ) {
@@ -214,7 +214,7 @@ void EmitPOPLOCAL(MethodGenerationContext& mgenc, long idx, int ctx) {
214
214
Emit3 (mgenc, BC_POP_LOCAL, idx, ctx, -1 );
215
215
}
216
216
217
- void EmitPOPARGUMENT (MethodGenerationContext& mgenc, long idx, int ctx) {
217
+ void EmitPOPARGUMENT (MethodGenerationContext& mgenc, size_t idx, size_t ctx) {
218
218
Emit3 (mgenc, BC_POP_ARGUMENT, idx, ctx, -1 );
219
219
}
220
220
@@ -229,19 +229,18 @@ void EmitPOPFIELD(MethodGenerationContext& mgenc, VMSymbol* field) {
229
229
}
230
230
231
231
void EmitSEND (MethodGenerationContext& mgenc, VMSymbol* msg) {
232
- const int8_t idx = mgenc.AddLiteralIfAbsent (msg);
232
+ const uint8_t idx = mgenc.AddLiteralIfAbsent (msg);
233
233
234
- const int numArgs = Signature::GetNumberOfArguments (msg);
235
- const size_t stackEffect = -numArgs + 1 ; // +1 for the result
234
+ const uint8_t numArgs = Signature::GetNumberOfArguments (msg);
235
+ const int64_t stackEffect = -numArgs + 1 ; // +1 for the result
236
236
237
237
Emit2 (mgenc, numArgs == 1 ? BC_SEND_1 : BC_SEND, idx, stackEffect);
238
238
}
239
239
240
240
void EmitSUPERSEND (MethodGenerationContext& mgenc, VMSymbol* msg) {
241
- const int8_t idx = mgenc.AddLiteralIfAbsent (msg);
242
-
243
- const int numArgs = Signature::GetNumberOfArguments (msg);
244
- const size_t stackEffect = -numArgs + 1 ; // +1 for the result
241
+ const uint8_t idx = mgenc.AddLiteralIfAbsent (msg);
242
+ const uint8_t numArgs = Signature::GetNumberOfArguments (msg);
243
+ const int64_t stackEffect = -numArgs + 1 ; // +1 for the result
245
244
246
245
Emit2 (mgenc, BC_SUPER_SEND, idx, stackEffect);
247
246
}
@@ -276,6 +275,9 @@ void EmitRETURNFIELD(MethodGenerationContext& mgenc, size_t index) {
276
275
case 2 :
277
276
bc = BC_RETURN_FIELD_2;
278
277
break ;
278
+ default :
279
+ bc = 0 ;
280
+ break ;
279
281
}
280
282
Emit1 (mgenc, bc, 0 );
281
283
}
@@ -302,8 +304,8 @@ size_t EmitJumpOnBoolWithDummyOffset(MethodGenerationContext& mgenc,
302
304
// This is because if the test passes, the block is inlined directly.
303
305
// But if the test fails, we need to jump.
304
306
// Thus, an `#ifTrue:` needs to generated a jump_on_false.
305
- uint8_t bc;
306
- size_t stackEffect;
307
+ uint8_t bc = 0 ;
308
+ int64_t stackEffect = 0 ;
307
309
308
310
if (needsPop) {
309
311
bc = isIfTrue ? BC_JUMP_ON_FALSE_POP : BC_JUMP_ON_TRUE_POP;
@@ -315,36 +317,36 @@ size_t EmitJumpOnBoolWithDummyOffset(MethodGenerationContext& mgenc,
315
317
316
318
Emit1 (mgenc, bc, stackEffect);
317
319
318
- size_t idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
320
+ size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
319
321
mgenc.AddBytecodeArgument (0 );
320
322
return idx;
321
323
}
322
324
323
325
size_t EmitJumpWithDumyOffset (MethodGenerationContext& mgenc) {
324
326
Emit1 (mgenc, BC_JUMP, 0 );
325
- size_t idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
327
+ size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
326
328
mgenc.AddBytecodeArgument (0 );
327
329
return idx;
328
330
}
329
331
330
332
size_t EmitJumpIfGreaterWithDummyOffset (MethodGenerationContext& mgenc) {
331
333
Emit1 (mgenc, BC_JUMP_IF_GREATER, 0 );
332
- size_t idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
334
+ size_t const idx = mgenc.AddBytecodeArgumentAndGetIndex (0 );
333
335
mgenc.AddBytecodeArgument (0 );
334
336
return idx;
335
337
}
336
338
337
339
void EmitJumpBackwardWithOffset (MethodGenerationContext& mgenc,
338
340
size_t jumpOffset) {
339
- uint8_t jumpBytecode =
341
+ uint8_t const jumpBytecode =
340
342
jumpOffset <= 0xFF ? BC_JUMP_BACKWARD : BC_JUMP2_BACKWARD;
341
- Emit3 (mgenc, jumpBytecode, jumpOffset & 0xFF , jumpOffset >> 8 , 0 );
343
+ Emit3 (mgenc, jumpBytecode, jumpOffset & 0xFFU , jumpOffset >> 8U , 0 );
342
344
}
343
345
344
346
size_t Emit3WithDummy (MethodGenerationContext& mgenc, uint8_t bytecode,
345
- size_t stackEffect) {
347
+ int64_t stackEffect) {
346
348
mgenc.AddBytecode (bytecode, stackEffect);
347
- size_t index = mgenc.AddBytecodeArgumentAndGetIndex (0 );
349
+ size_t const index = mgenc.AddBytecodeArgumentAndGetIndex (0 );
348
350
mgenc.AddBytecodeArgument (0 );
349
351
return index ;
350
352
}
0 commit comments