aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/jvm/procedure
diff options
context:
space:
mode:
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/jvm/procedure')
-rw-r--r--new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux21
1 files changed, 20 insertions, 1 deletions
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 cf68663a5..ae54dccc7 100644
--- a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux
+++ b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux
@@ -1055,12 +1055,31 @@
self-name arguments returnT exceptionsT
(normalize-method-body local-mapping body)]))
overriden-methods)]
+ method-definitions (|> normalized-methods
+ (monad.map @ (function (_ [ownerT name
+ strict-fp? annotations vars
+ self-name arguments returnT exceptionsT
+ bodyS])
+ (do @
+ [bodyG (generate bodyS)]
+ (wrap (_def.method #$.Public
+ (if strict-fp?
+ ($_ $.++M $.finalM $.strictM)
+ $.finalM)
+ name
+ (jvm.method (list@map product.right arguments)
+ returnT
+ (list@map (|>> #jvm.Class)
+ exceptionsT))
+ bodyG)))))
+ (:: @ map _def.fuse))
_ (generation.save! true ["" class-name]
[class-name
(_def.class #$.V1_6 #$.Public $.finalC
class-name (list)
super-class super-interfaces
- (|>> (///function.with-environment total-environment)))])]
+ (|>> (///function.with-environment total-environment)
+ method-definitions))])]
(anonymous-instance class-name total-environment)))]))
(def: bundle::class