@@ -313,6 +313,34 @@ cgCast (Ref ty1) (Ref ty2) = when (ty1 /= ty2) $ checkcast ty2
313
313
314
314
cgCast _ _ = pure ()
315
315
316
+ loadAndBox : (Int -> Asm () ) -> Asm () -> InferredTypeStore -> LVar -> Asm ()
317
+ loadAndBox loadOp boxOp sourceLocTys var = let op = \ index => do loadOp index; boxOp
318
+ in opWithWordSize sourceLocTys op var
319
+
320
+ loadAndBoxBool : InferredTypeStore -> LVar -> Asm ()
321
+ loadAndBoxBool = loadAndBox Iload boxBool
322
+
323
+ loadAndBoxByte : InferredTypeStore -> LVar -> Asm ()
324
+ loadAndBoxByte = loadAndBox Iload boxByte
325
+
326
+ loadAndBoxChar : InferredTypeStore -> LVar -> Asm ()
327
+ loadAndBoxChar = loadAndBox Iload boxChar
328
+
329
+ loadAndBoxShort : InferredTypeStore -> LVar -> Asm ()
330
+ loadAndBoxShort = loadAndBox Iload boxShort
331
+
332
+ loadAndBoxInt : InferredTypeStore -> LVar -> Asm ()
333
+ loadAndBoxInt = loadAndBox Iload boxInt
334
+
335
+ loadAndBoxLong : InferredTypeStore -> LVar -> Asm ()
336
+ loadAndBoxLong = loadAndBox Lload boxLong
337
+
338
+ loadAndBoxFloat : InferredTypeStore -> LVar -> Asm ()
339
+ loadAndBoxFloat = loadAndBox Fload boxFloat
340
+
341
+ loadAndBoxDouble : InferredTypeStore -> LVar -> Asm ()
342
+ loadAndBoxDouble = loadAndBox Dload boxDouble
343
+
316
344
loadVar : InferredTypeStore -> (srcTy : InferredType) -> (targetTy : InferredType) -> LVar -> Asm ()
317
345
loadVar sourceLocTys IBool IBool var = opWithWordSize sourceLocTys Iload var
318
346
loadVar sourceLocTys IByte IByte var = opWithWordSize sourceLocTys Iload var
@@ -330,63 +358,29 @@ loadVar sourceLocTys IFloat IDouble var = opWithWordSize sourceLocTys (\var => d
330
358
loadVar sourceLocTys IDouble IDouble var = opWithWordSize sourceLocTys Dload var
331
359
loadVar sourceLocTys IDouble IFloat var = opWithWordSize sourceLocTys (\ var => do Dload var; D2f ) var
332
360
333
- loadVar sourceLocTys IBool IUnknown var =
334
- let loadInstr = \ index => do Iload index; boxBool
335
- in opWithWordSize sourceLocTys loadInstr var
336
- loadVar sourceLocTys IBool (Ref _ ) var =
337
- let loadInstr = \ index => do Iload index; boxBool
338
- in opWithWordSize sourceLocTys loadInstr var
361
+ loadVar sourceLocTys IBool IUnknown var = loadAndBoxBool sourceLocTys var
362
+ loadVar sourceLocTys IBool (Ref _ ) var = loadAndBoxBool sourceLocTys var
339
363
340
- loadVar sourceLocTys IByte IUnknown var =
341
- let loadInstr = \ index => do Iload index; boxByte
342
- in opWithWordSize sourceLocTys loadInstr var
343
- loadVar sourceLocTys IByte (Ref _ ) var =
344
- let loadInstr = \ index => do Iload index; boxByte
345
- in opWithWordSize sourceLocTys loadInstr var
364
+ loadVar sourceLocTys IByte IUnknown var = loadAndBoxByte sourceLocTys var
365
+ loadVar sourceLocTys IByte (Ref _ ) var = loadAndBoxByte sourceLocTys var
346
366
347
- loadVar sourceLocTys IChar IUnknown var =
348
- let loadInstr = \ index => do Iload index; boxChar
349
- in opWithWordSize sourceLocTys loadInstr var
350
-
351
- loadVar sourceLocTys IChar (Ref _ ) var =
352
- let loadInstr = \ index => do Iload index; boxChar
353
- in opWithWordSize sourceLocTys loadInstr var
367
+ loadVar sourceLocTys IChar IUnknown var = loadAndBoxChar sourceLocTys var
368
+ loadVar sourceLocTys IChar (Ref _ ) var = loadAndBoxChar sourceLocTys var
354
369
355
- loadVar sourceLocTys IShort IUnknown var =
356
- let loadInstr = \ index => do Iload index; boxShort
357
- in opWithWordSize sourceLocTys loadInstr var
358
- loadVar sourceLocTys IShort (Ref _ ) var =
359
- let loadInstr = \ index => do Iload index; boxShort
360
- in opWithWordSize sourceLocTys loadInstr var
370
+ loadVar sourceLocTys IShort IUnknown var = loadAndBoxShort sourceLocTys var
371
+ loadVar sourceLocTys IShort (Ref _ ) var = loadAndBoxShort sourceLocTys var
361
372
362
- loadVar sourceLocTys IInt IUnknown var =
363
- let loadInstr = \ index => do Iload index; boxInt
364
- in opWithWordSize sourceLocTys loadInstr var
365
- loadVar sourceLocTys IInt (Ref _ ) var =
366
- let loadInstr = \ index => do Iload index; boxInt
367
- in opWithWordSize sourceLocTys loadInstr var
368
-
369
- loadVar sourceLocTys ILong IUnknown var =
370
- let loadInstr = \ index => do Lload index; boxLong
371
- in opWithWordSize sourceLocTys loadInstr var
372
-
373
- loadVar sourceLocTys ILong (Ref _ ) var =
374
- let loadInstr = \ index => do Lload index; boxLong
375
- in opWithWordSize sourceLocTys loadInstr var
373
+ loadVar sourceLocTys IInt IUnknown var = loadAndBoxInt sourceLocTys var
374
+ loadVar sourceLocTys IInt (Ref _ ) var = loadAndBoxInt sourceLocTys var
376
375
377
- loadVar sourceLocTys IFloat IUnknown var =
378
- let loadInstr = \ index => do Fload index; boxFloat
379
- in opWithWordSize sourceLocTys loadInstr var
380
- loadVar sourceLocTys IFloat (Ref _ ) var =
381
- let loadInstr = \ index => do Fload index; boxFloat
382
- in opWithWordSize sourceLocTys loadInstr var
376
+ loadVar sourceLocTys ILong IUnknown var = loadAndBoxLong sourceLocTys var
377
+ loadVar sourceLocTys ILong (Ref _ ) var = loadAndBoxLong sourceLocTys var
383
378
384
- loadVar sourceLocTys IDouble IUnknown var =
385
- let loadInstr = \ index => do Dload index; boxDouble
386
- in opWithWordSize sourceLocTys loadInstr var
387
- loadVar sourceLocTys IDouble (Ref _ ) var =
388
- let loadInstr = \ index => do Dload index; boxDouble
389
- in opWithWordSize sourceLocTys loadInstr var
379
+ loadVar sourceLocTys IFloat IUnknown var = loadAndBoxFloat sourceLocTys var
380
+ loadVar sourceLocTys IFloat (Ref _ ) var = loadAndBoxFloat sourceLocTys var
381
+
382
+ loadVar sourceLocTys IDouble IUnknown var = loadAndBoxDouble sourceLocTys var
383
+ loadVar sourceLocTys IDouble (Ref _ ) var = loadAndBoxDouble sourceLocTys var
390
384
391
385
loadVar sourceLocTys IUnknown IBool var =
392
386
let loadInstr = \ index => do Aload index; boolObjToBool
@@ -428,10 +422,10 @@ loadVar sourceLocTys (Ref _) IInt var =
428
422
let loadInstr = \ index => do Aload index; objToInt
429
423
in opWithWordSize sourceLocTys loadInstr var
430
424
431
- loadVar sourceLocTys IUnknown ILong var =
425
+ loadVar sourceLocTys IUnknown ILong var =
432
426
let loadInstr = \ index => do Aload index; longObjToLong
433
427
in opWithWordSize sourceLocTys loadInstr var
434
- loadVar sourceLocTys (Ref _ ) ILong var =
428
+ loadVar sourceLocTys (Ref _ ) ILong var =
435
429
let loadInstr = \ index => do Aload index; longObjToLong
436
430
in opWithWordSize sourceLocTys loadInstr var
437
431
@@ -442,10 +436,10 @@ loadVar sourceLocTys (Ref _) IFloat var =
442
436
let loadInstr = \ index => do Aload index; objToFloat
443
437
in opWithWordSize sourceLocTys loadInstr var
444
438
445
- loadVar sourceLocTys IUnknown IDouble var =
439
+ loadVar sourceLocTys IUnknown IDouble var =
446
440
let loadInstr = \ index => do Aload index; objToDouble
447
441
in opWithWordSize sourceLocTys loadInstr var
448
- loadVar sourceLocTys (Ref _ ) IDouble var =
442
+ loadVar sourceLocTys (Ref _ ) IDouble var =
449
443
let loadInstr = \ index => do Aload index; objToDouble
450
444
in opWithWordSize sourceLocTys loadInstr var
451
445
@@ -454,13 +448,13 @@ loadVar sourceLocTys IUnknown arr@(IArray _) var =
454
448
in opWithWordSize sourceLocTys loadInstr var
455
449
loadVar sourceLocTys (Ref _ ) arr@(IArray _ ) var =
456
450
let loadInstr = \ index => do Aload index; Checkcast $ getInferredTyDesc arr
457
- in opWithWordSize sourceLocTys loadInstr var
451
+ in opWithWordSize sourceLocTys loadInstr var
458
452
459
- loadVar sourceLocTys IUnknown (Ref ty2) var =
453
+ loadVar sourceLocTys IUnknown (Ref ty2) var =
460
454
let loadInstr = \ index => do Aload index; checkcast ty2
461
455
in opWithWordSize sourceLocTys loadInstr var
462
456
463
- loadVar sourceLocTys (Ref ty1) (Ref ty2) var =
457
+ loadVar sourceLocTys (Ref ty1) (Ref ty2) var =
464
458
let loadInstr = \ index => do Aload index; when (ty1 /= ty2) $ checkcast ty2
465
459
in opWithWordSize sourceLocTys loadInstr var
466
460
0 commit comments