aboutsummaryrefslogtreecommitdiff
path: root/src/lux/compiler/host.clj
diff options
context:
space:
mode:
authorEduardo Julian2015-07-19 22:24:48 -0400
committerEduardo Julian2015-07-19 22:24:48 -0400
commit50366bad3ecf961fdfdbb1e4d8436794d97ae763 (patch)
tree3c911205244647bb923b2b1868cc8b1d36a083a4 /src/lux/compiler/host.clj
parenteb424eeb33d8fc9bb7ad2acda0c58fcb037717d3 (diff)
- Some bug fixes.
- More additions to the standard library.
Diffstat (limited to 'src/lux/compiler/host.clj')
-rw-r--r--src/lux/compiler/host.clj24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/lux/compiler/host.clj b/src/lux/compiler/host.clj
index 2a8bdac89..5c2c43296 100644
--- a/src/lux/compiler/host.clj
+++ b/src/lux/compiler/host.clj
@@ -144,6 +144,10 @@
compile-jvm-ieq Opcodes/IF_ICMPEQ "java.lang.Integer" "intValue" "()I"
compile-jvm-ilt Opcodes/IF_ICMPLT "java.lang.Integer" "intValue" "()I"
compile-jvm-igt Opcodes/IF_ICMPGT "java.lang.Integer" "intValue" "()I"
+
+ compile-jvm-ceq Opcodes/IF_ICMPEQ "java.lang.Character" "charValue" "()C"
+ compile-jvm-clt Opcodes/IF_ICMPLT "java.lang.Character" "charValue" "()C"
+ compile-jvm-cgt Opcodes/IF_ICMPGT "java.lang.Character" "charValue" "()C"
)
(do-template [<name> <cmpcode> <cmp-output> <wrapper-class> <value-method> <value-method-sig>]
@@ -186,12 +190,12 @@
(defn compile-jvm-invokestatic [compile *type* ?class ?method ?classes ?args]
(|do [^MethodVisitor *writer* &/get-writer
- :let [method-sig (str "(" (reduce str "" (map &host/->type-signature ?classes)) ")" (&host/->java-sig *type*))]
- _ (&/map% (fn [[class-name arg]]
- (|do [ret (compile arg)
- :let [_ (prepare-arg! *writer* class-name)]]
- (return ret)))
- (map vector ?classes ?args))
+ :let [method-sig (str "(" (&/fold str "" (&/|map &host/->type-signature ?classes)) ")" (&host/->java-sig *type*))]
+ _ (&/map2% (fn [class-name arg]
+ (|do [ret (compile arg)
+ :let [_ (prepare-arg! *writer* class-name)]]
+ (return ret)))
+ ?classes ?args)
:let [_ (doto *writer*
(.visitMethodInsn Opcodes/INVOKESTATIC (&host/->class ?class) ?method method-sig)
(prepare-return! *type*))]]
@@ -319,6 +323,14 @@
;; else
0)))
+(defn compile-jvm-instanceof [compile *type* class object]
+ (|do [^MethodVisitor *writer* &/get-writer
+ _ (compile object)
+ :let [_ (doto *writer*
+ (.visitLdcInsn class)
+ (.visitTypeInsn Opcodes/INSTANCEOF class))]]
+ (return nil)))
+
(defn compile-jvm-class [compile ?name ?super-class ?interfaces ?fields ?methods]
(|do [module &/get-module-name]
(let [super-class* (&host/->class ?super-class)