From 6af3807793eba127bda2d2c68b235e6645936787 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Wed, 17 Apr 2019 23:19:09 -0400 Subject: Fixed a bug when generating method calls. --- .../source/luxc/lang/translation/jvm/procedure/host.lux | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux') diff --git a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux index 2e39860fc..a9df2710c 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux @@ -671,6 +671,16 @@ _ (phase@map (|>> #.Some) (generate-type description)))) +(def: (prepare-argI [type argI]) + (-> [$.Type Inst] Inst) + (case (_t.class-name type) + (#.Some class-name) + (|>> argI + (_.CHECKCAST class-name)) + + #.None + argI)) + (def: (invoke::static proc generate inputs) Handler (case inputs @@ -681,7 +691,7 @@ (do phase.monad [argsTI (monad.map @ (generate-arg generate) argsS) returnT (method-return-type unboxed)] - (wrap (|>> (_.fuse (list@map product.right argsTI)) + (wrap (|>> (_.fuse (list@map ..prepare-argI argsTI)) (_.INVOKESTATIC class method (_t.method (list@map product.left argsTI) returnT (list)) false)))) @@ -704,7 +714,7 @@ returnT (method-return-type unboxed)] (wrap (|>> objectI (_.CHECKCAST class) - (_.fuse (list@map product.right argsTI)) + (_.fuse (list@map ..prepare-argI argsTI)) ( class method (_t.method (list@map product.left argsTI) returnT (list)) )))) @@ -725,7 +735,7 @@ [argsTI (monad.map @ (generate-arg generate) argsS)] (wrap (|>> (_.NEW class) _.DUP - (_.fuse (list@map product.right argsTI)) + (_.fuse (list@map ..prepare-argI argsTI)) (_.INVOKESPECIAL class "" (_t.method (list@map product.left argsTI) #.None (list)) false)))) -- cgit v1.2.3