diff options
Diffstat (limited to '')
-rw-r--r-- | src/lux/compiler/host.clj | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/src/lux/compiler/host.clj b/src/lux/compiler/host.clj index 40ad7bb6d..f289ed6ba 100644 --- a/src/lux/compiler/host.clj +++ b/src/lux/compiler/host.clj @@ -4,7 +4,7 @@ [template :refer [do-template]]) [clojure.core.match :as M :refer [match matchv]] clojure.core.match.array - (lux [base :as & :refer [exec return* return fail fail* |let]] + (lux [base :as & :refer [|do return* return fail fail* |let]] [type :as &type] [lexer :as &lexer] [parser :as &parser] @@ -62,7 +62,7 @@ ;; [Resources] (do-template [<name> <opcode> <wrapper-class> <value-method> <value-method-sig> <wrapper-method> <wrapper-method-sig>] (defn <name> [compile *type* ?x ?y] - (exec [:let [+wrapper-class+ (&host/->class <wrapper-class>)] + (|do [:let [+wrapper-class+ (&host/->class <wrapper-class>)] *writer* &/get-writer _ (compile ?x) :let [_ (doto *writer* @@ -104,7 +104,7 @@ (do-template [<name> <opcode> <wrapper-class> <value-method> <value-method-sig>] (defn <name> [compile *type* ?x ?y] - (exec [:let [+wrapper-class+ (&host/->class <wrapper-class>)] + (|do [:let [+wrapper-class+ (&host/->class <wrapper-class>)] *writer* &/get-writer _ (compile ?x) :let [_ (doto *writer* @@ -132,7 +132,7 @@ (do-template [<name> <cmpcode> <ifcode> <wrapper-class> <value-method> <value-method-sig>] (defn <name> [compile *type* ?x ?y] - (exec [:let [+wrapper-class+ (&host/->class <wrapper-class>)] + (|do [:let [+wrapper-class+ (&host/->class <wrapper-class>)] *writer* &/get-writer _ (compile ?x) :let [_ (doto *writer* @@ -168,10 +168,10 @@ ) (defn compile-jvm-invokestatic [compile *type* ?class ?method ?classes ?args] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [method-sig (str "(" (reduce str "" (map &host/->type-signature ?classes)) ")" (&host/->java-sig *type*))] _ (&/map% (fn [[class-name arg]] - (exec [ret (compile arg) + (|do [ret (compile arg) :let [_ (prepare-arg! *writer* class-name)]] (return ret))) (map vector ?classes ?args)) @@ -183,13 +183,13 @@ (do-template [<name> <op>] (defn <name> [compile *type* ?class ?method ?classes ?object ?args] ;; (prn 'compile-jvm-invokevirtual ?classes *type*) - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [method-sig (str "(" (&/fold str "" (&/|map &host/->type-signature ?classes)) ")" (&host/->java-sig *type*))] _ (compile ?object) :let [_ (.visitTypeInsn *writer* Opcodes/CHECKCAST (&host/->class ?class))] _ (&/map% (fn [class-name+arg] (|let [[class-name arg] class-name+arg] - (exec [ret (compile arg) + (|do [ret (compile arg) :let [_ (prepare-arg! *writer* class-name)]] (return ret)))) (&/zip2 ?classes ?args)) @@ -204,12 +204,12 @@ ) (defn compile-jvm-null [compile *type*] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [_ (.visitInsn *writer* Opcodes/ACONST_NULL)]] (return nil))) (defn compile-jvm-null? [compile *type* ?object] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?object) :let [$then (new Label) $end (new Label) @@ -223,14 +223,14 @@ (return nil))) (defn compile-jvm-new [compile *type* ?class ?classes ?args] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [init-sig (str "(" (reduce str "" (map &host/->type-signature ?classes)) ")V") class* (&host/->class ?class) _ (doto *writer* (.visitTypeInsn Opcodes/NEW class*) (.visitInsn Opcodes/DUP))] _ (&/map% (fn [[class-name arg]] - (exec [ret (compile arg) + (|do [ret (compile arg) :let [_ (prepare-arg! *writer* class-name)]] (return ret))) (map vector ?classes ?args)) @@ -239,14 +239,14 @@ (return nil))) (defn compile-jvm-new-array [compile *type* ?class ?length] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [_ (doto *writer* (.visitLdcInsn (int ?length)) (.visitTypeInsn Opcodes/ANEWARRAY (&host/->class ?class)))]] (return nil))) (defn compile-jvm-aastore [compile *type* ?array ?idx ?elem] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?array) :let [_ (doto *writer* (.visitInsn Opcodes/DUP) @@ -256,7 +256,7 @@ (return nil))) (defn compile-jvm-aaload [compile *type* ?array ?idx] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?array) :let [_ (doto *writer* (.visitLdcInsn (int ?idx)) @@ -264,25 +264,25 @@ (return nil))) (defn compile-jvm-getstatic [compile *type* ?class ?field] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [_ (.visitFieldInsn *writer* Opcodes/GETSTATIC (&host/->class ?class) ?field (&host/->java-sig *type*))]] (return nil))) (defn compile-jvm-getfield [compile *type* ?class ?field ?object] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?object) :let [_ (.visitTypeInsn *writer* Opcodes/CHECKCAST (&host/->class ?class))] :let [_ (.visitFieldInsn *writer* Opcodes/GETFIELD (&host/->class ?class) ?field (&host/->java-sig *type*))]] (return nil))) (defn compile-jvm-putstatic [compile *type* ?class ?field ?value] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?value) :let [_ (.visitFieldInsn *writer* Opcodes/PUTSTATIC (&host/->class ?class) ?field (&host/->java-sig *type*))]] (return nil))) (defn compile-jvm-putfield [compile *type* ?class ?field ?object ?value] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?object) _ (compile ?value) :let [_ (.visitTypeInsn *writer* Opcodes/CHECKCAST (&host/->class ?class))] @@ -328,10 +328,10 @@ ;; (prn 'SAVED_CLASS full-name) (&&/save-class! full-name (.toByteArray =interface)))) -(defn compile-exec [compile *type* ?exprs] - (exec [*writer* &/get-writer +(defn compile-|do [compile *type* ?exprs] + (|do [*writer* &/get-writer _ (&/map% (fn [expr] - (exec [ret (compile expr) + (|do [ret (compile expr) :let [_ (.visitInsn *writer* Opcodes/POP)]] (return ret))) (butlast ?exprs)) @@ -339,19 +339,19 @@ (return nil))) (defn compile-jvm-try [compile *type* ?body ?catches ?finally] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [$from (new Label) $to (new Label) $end (new Label) $catch-finally (new Label) compile-finally (if ?finally - (exec [_ (return nil) + (|do [_ (return nil) _ (compile ?finally) :let [_ (doto *writer* (.visitInsn Opcodes/POP) (.visitJumpInsn Opcodes/GOTO $end))]] (return nil)) - (exec [_ (return nil) + (|do [_ (return nil) :let [_ (.visitJumpInsn *writer* Opcodes/GOTO $end)]] (return nil))) _ (.visitLabel *writer* $from)] @@ -359,7 +359,7 @@ :let [_ (.visitLabel *writer* $to)] _ compile-finally handlers (&/map% (fn [[?ex-class ?ex-arg ?catch-body]] - (exec [:let [$handler-start (new Label) + (|do [:let [$handler-start (new Label) $handler-end (new Label)] _ (compile ?catch-body) :let [_ (.visitLabel *writer* $handler-end)] @@ -368,12 +368,12 @@ ?catches) :let [_ (.visitLabel *writer* $catch-finally)] _ (if ?finally - (exec [_ (compile ?finally) + (|do [_ (compile ?finally) :let [_ (doto *writer* (.visitInsn Opcodes/POP) (.visitInsn Opcodes/ATHROW))]] (return nil)) - (exec [_ (return nil) + (|do [_ (return nil) :let [_ (.visitInsn *writer* Opcodes/ATHROW)]] (return nil))) :let [_ (.visitJumpInsn *writer* Opcodes/GOTO $end)] @@ -387,14 +387,14 @@ (return nil))) (defn compile-jvm-throw [compile *type* ?ex] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?ex) :let [_ (.visitInsn *writer* Opcodes/ATHROW)]] (return nil))) (do-template [<name> <op>] (defn <name> [compile *type* ?monitor] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?monitor) :let [_ (doto *writer* (.visitInsn <op>) @@ -407,7 +407,7 @@ (do-template [<name> <op> <from-class> <from-method> <from-sig> <to-class> <to-sig>] (defn <name> [compile *type* ?value] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [_ (doto *writer* (.visitTypeInsn Opcodes/NEW (&host/->class <to-class>)) (.visitInsn Opcodes/DUP))] @@ -440,7 +440,7 @@ (do-template [<name> <op> <from1-method> <from1-sig> <from1-class> <from2-method> <from2-sig> <from2-class> <to-class> <to-sig>] (defn <name> [compile *type* ?x ?y] - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer :let [_ (doto *writer* (.visitTypeInsn Opcodes/NEW (&host/->class <to-class>)) (.visitInsn Opcodes/DUP))] @@ -466,10 +466,10 @@ ) (defn compile-jvm-program [compile *type* ?body] - (exec [*writer* &/get-writer] + (|do [*writer* &/get-writer] (&/with-writer (doto (.visitMethod *writer* (+ Opcodes/ACC_PUBLIC Opcodes/ACC_STATIC) "main" "([Ljava/lang/String;)V" nil nil) (.visitCode)) - (exec [*writer* &/get-writer + (|do [*writer* &/get-writer _ (compile ?body) :let [_ (doto *writer* (.visitInsn Opcodes/POP) |