From 9eaaaf953ba7ce1eeb805603f4e113aa15f5178f Mon Sep 17 00:00:00 2001
From: Eduardo Julian
Date: Mon, 8 Jan 2018 21:40:06 -0400
Subject: - Moved all translation code under the JVM path (in preparation for
porting the JS back-end).
---
.../source/luxc/lang/translation/jvm/eval.jvm.lux | 46 ++++++++++++++++++++++
1 file changed, 46 insertions(+)
create mode 100644 new-luxc/source/luxc/lang/translation/jvm/eval.jvm.lux
(limited to 'new-luxc/source/luxc/lang/translation/jvm/eval.jvm.lux')
diff --git a/new-luxc/source/luxc/lang/translation/jvm/eval.jvm.lux b/new-luxc/source/luxc/lang/translation/jvm/eval.jvm.lux
new file mode 100644
index 000000000..c326895a2
--- /dev/null
+++ b/new-luxc/source/luxc/lang/translation/jvm/eval.jvm.lux
@@ -0,0 +1,46 @@
+(.module:
+ lux
+ (lux (control monad)
+ (data [text]
+ text/format)
+ [macro]
+ [host #+ do-to])
+ (luxc ["&" lang]
+ (lang (host ["$" jvm]
+ (jvm ["$t" type]
+ ["$d" def]
+ ["$i" inst]))
+ ["la" analysis]
+ ["ls" synthesis]))
+ (// [".T" common]))
+
+(host.import java/lang/reflect/Field
+ (get [Object] Object))
+
+(host.import (java/lang/Class a)
+ (getField [String] Field))
+
+(def: #export (eval valueI)
+ (-> $.Inst (Meta Top))
+ (do macro.Monad
+ [current-module macro.current-module-name
+ class-name (:: @ map %code (macro.gensym (format current-module "/eval")))
+ #let [store-name (text.replace-all "/" "." class-name)
+ bytecode ($d.class #$.V1_6
+ #$.Public $.noneC
+ class-name
+ (list) ["java.lang.Object" (list)]
+ (list)
+ (|>> ($d.field #$.Public ($_ $.++F $.finalF $.staticF)
+ commonT.value-field commonT.$Object)
+ ($d.method #$.Public ($_ $.++M $.staticM $.strictM)
+ ""
+ ($t.method (list) #.None (list))
+ (|>> valueI
+ ($i.PUTSTATIC store-name commonT.value-field commonT.$Object)
+ $i.RETURN))))]
+ _ (commonT.store-class store-name bytecode)
+ class (commonT.load-class store-name)]
+ (wrap (|> class
+ (Class::getField [commonT.value-field])
+ (Field::get (host.null))))))
--
cgit v1.2.3