aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/r/function.jvm.lux
diff options
context:
space:
mode:
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/r/function.jvm.lux')
-rw-r--r--new-luxc/source/luxc/lang/translation/r/function.jvm.lux9
1 files changed, 6 insertions, 3 deletions
diff --git a/new-luxc/source/luxc/lang/translation/r/function.jvm.lux b/new-luxc/source/luxc/lang/translation/r/function.jvm.lux
index 3d4407bd0..565a44909 100644
--- a/new-luxc/source/luxc/lang/translation/r/function.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/r/function.jvm.lux
@@ -60,13 +60,14 @@
#let [arityO (|> arity nat-to-int r.int)
$num_args (r.var "num_args")
$function (r.var function-name)
+ var-args (r.code (format "list" (r.expression (@@ r.var-args))))
apply-poly (function (_ args func)
(r.apply (list func args) (r.global "do.call")))]]
(with-closure function-name closureO+
(r.set! $function
(r.function (list r.var-args)
($_ r.then
- (r.set! $curried (@@ r.var-args))
+ (r.set! $curried var-args)
(r.set! $num_args (r.length (@@ $curried)))
(r.cond (list [(|> (@@ $num_args) (r.= arityO))
($_ r.then
@@ -76,7 +77,9 @@
(list/fold r.then bodyO)))]
[(|> (@@ $num_args) (r.> arityO))
(let [arity-args (r.slice (r.int 1) arityO (@@ $curried))
- output-func-args (r.slice arityO (@@ $num_args) (@@ $curried))]
+ output-func-args (r.slice (|> arityO (r.+ (r.int 1)))
+ (@@ $num_args)
+ (@@ $curried))]
(|> (@@ $function)
(apply-poly arity-args)
(apply-poly output-func-args)))])
@@ -84,7 +87,7 @@
(let [$missing (r.var "missing")]
(r.function (list r.var-args)
($_ r.then
- (r.set! $missing (@@ r.var-args))
+ (r.set! $missing var-args)
(|> (@@ $function)
(apply-poly (r.apply (list (@@ $curried) (@@ $missing))
(r.global "append"))))))))))))