aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/eval.jvm.lux
diff options
context:
space:
mode:
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/eval.jvm.lux')
-rw-r--r--new-luxc/source/luxc/lang/translation/eval.jvm.lux88
1 files changed, 26 insertions, 62 deletions
diff --git a/new-luxc/source/luxc/lang/translation/eval.jvm.lux b/new-luxc/source/luxc/lang/translation/eval.jvm.lux
index 6b9ee9743..9cce16a49 100644
--- a/new-luxc/source/luxc/lang/translation/eval.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/eval.jvm.lux
@@ -1,4 +1,4 @@
-(;module:
+(.module:
lux
(lux (control monad)
(data [text]
@@ -12,72 +12,36 @@
["$i" inst]))
["la" analysis]
["ls" synthesis]
- (translation [";T" common]))
+ (translation [".T" common]))
))
-(host;import java.lang.Object)
-(host;import java.lang.String)
-
-(host;import java.lang.reflect.Field
+(host.import java/lang/reflect/Field
(get [Object] Object))
-(host;import (java.lang.Class a)
+(host.import (java/lang/Class a)
(getField [String] Field))
-(host;import org.objectweb.asm.Opcodes
- (#static ACC_PUBLIC int)
- (#static ACC_SUPER int)
- (#static ACC_FINAL int)
- (#static ACC_STATIC int)
- (#static PUTSTATIC int)
- (#static RETURN int)
- (#static V1_6 int)
- )
-
-(host;import org.objectweb.asm.MethodVisitor
- (visitCode [] void)
- (visitEnd [] void)
- (visitLdcInsn [Object] void)
- (visitFieldInsn [int String String String] void)
- (visitInsn [int] void)
- (visitMaxs [int int] void))
-
-(host;import org.objectweb.asm.FieldVisitor
- (visitEnd [] void))
-
-(host;import org.objectweb.asm.ClassWriter
- (#static COMPUTE_MAXS int)
- (new [int])
- (visit [int int String String String (Array String)] void)
- (visitEnd [] void)
- (visitField [int String String String Object] FieldVisitor)
- (visitMethod [int String String String (Array String)] MethodVisitor)
- (toByteArray [] (Array byte)))
-
(def: #export (eval valueI)
- (-> $;Inst (Meta Top))
- (do macro;Monad<Meta>
- [current-module macro;current-module-name
- class-name (:: @ map %code (macro;gensym (format current-module "/eval")))
- #let [store-name (text;replace-all "/" "." class-name)
- writer (|> (do-to (ClassWriter.new ClassWriter.COMPUTE_MAXS)
- (ClassWriter.visit [commonT;bytecode-version
- (i.+ Opcodes.ACC_PUBLIC Opcodes.ACC_SUPER)
- class-name
- (host;null)
- "java/lang/Object"
- (host;null)]))
- ($d;field #$;Public ($_ $;++F $;finalF $;staticF)
- commonT;value-field commonT;$Object)
- ($d;method #$;Public ($_ $;++M $;staticM $;strictM)
- "<clinit>"
- ($t;method (list) #;None (list))
- (|>. valueI
- ($i;PUTSTATIC store-name commonT;value-field commonT;$Object)
- $i;RETURN)))
- bytecode (ClassWriter.toByteArray [] (do-to writer (ClassWriter.visitEnd [])))]
- _ (commonT;store-class store-name bytecode)
- class (commonT;load-class store-name)]
+ (-> $.Inst (Meta Top))
+ (do macro.Monad<Meta>
+ [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)
+ "<clinit>"
+ ($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))))))
+ (Class::getField [commonT.value-field])
+ (Field::get (host.null))))))