aboutsummaryrefslogtreecommitdiff
path: root/luxc/src/lux/compiler/js/proc/common.clj
diff options
context:
space:
mode:
authorEduardo Julian2017-02-07 19:38:58 -0400
committerEduardo Julian2017-02-07 19:38:58 -0400
commit66ceed37b71921e14cae8a091df7738d9e587c2d (patch)
treee1f1428783d93d57383f1055a0e3fe2ca90f3dc7 /luxc/src/lux/compiler/js/proc/common.clj
parent8003120870b877264afcfc5bc785453ae55e2a7b (diff)
- Reorganized the code related to _lux_proc a bit.
- Implemented some of the low-level machinery for 64-bit integers.
Diffstat (limited to '')
-rw-r--r--luxc/src/lux/compiler/js/proc/common.clj (renamed from luxc/src/lux/compiler/js/proc.clj)83
1 files changed, 46 insertions, 37 deletions
diff --git a/luxc/src/lux/compiler/js/proc.clj b/luxc/src/lux/compiler/js/proc/common.clj
index 95e6950da..7e052892b 100644
--- a/luxc/src/lux/compiler/js/proc.clj
+++ b/luxc/src/lux/compiler/js/proc/common.clj
@@ -1,4 +1,4 @@
-(ns lux.compiler.js.proc
+(ns lux.compiler.js.proc.common
(:require (clojure [string :as string]
[set :as set]
[template :refer [do-template]])
@@ -9,7 +9,8 @@
[analyser :as &analyser]
[optimizer :as &o])
[lux.analyser.base :as &a]
- [lux.compiler.js.base :as &&]))
+ (lux.compiler.js [base :as &&]
+ [rt :as &&rt])))
;; [Resources]
;; (do-template [<name> <op>]
@@ -78,6 +79,39 @@
;; (.visitLabel $end))]]
;; (return nil)))
+(do-template [<name> <method>]
+ (defn <name> [compile ?values special-args]
+ (|do [:let [(&/$Cons ?x (&/$Cons ?y (&/$Nil))) ?values]
+ =x (compile ?x)
+ =y (compile ?y)]
+ (return (str &&rt/LuxRT "." <method> "(" =x "," =y ")"))))
+
+ ^:private compile-nat-add "addI64"
+ ^:private compile-nat-sub "subI64"
+ ^:private compile-nat-mul "mulI64"
+ ;; ^:private compile-nat-div "/"
+ ;; ^:private compile-nat-rem "%"
+ ^:private compile-nat-eq "eqI64"
+ ;; ^:private compile-nat-lt "<"
+
+ ^:private compile-int-add "addI64"
+ ^:private compile-int-sub "subI64"
+ ^:private compile-int-mul "mulI64"
+ ;; ^:private compile-int-div "/"
+ ;; ^:private compile-int-rem "%"
+ ^:private compile-int-eq "eqI64"
+ ;; ^:private compile-int-lt "<"
+
+ ^:private compile-deg-add "addI64"
+ ^:private compile-deg-sub "subI64"
+ ;; ^:private compile-deg-mul "*"
+ ;; ^:private compile-deg-div "/"
+ ^:private compile-deg-rem "subI64"
+ ^:private compile-deg-eq "eqI64"
+ ;; ^:private compile-deg-lt "<"
+ ^:private compile-deg-scale "mulI64"
+ )
+
(do-template [<name> <opcode>]
(defn <name> [compile ?values special-args]
(|do [:let [(&/$Cons ?x (&/$Cons ?y (&/$Nil))) ?values]
@@ -85,31 +119,6 @@
=y (compile ?y)]
(return (str "(" =x " " <opcode> " " =y ")"))))
- ^:private compile-nat-add "+"
- ^:private compile-nat-sub "-"
- ^:private compile-nat-mul "*"
- ^:private compile-nat-div "/"
- ^:private compile-nat-rem "%"
- ^:private compile-nat-eq "==="
- ^:private compile-nat-lt "<"
-
- ^:private compile-int-add "+"
- ^:private compile-int-sub "-"
- ^:private compile-int-mul "*"
- ^:private compile-int-div "/"
- ^:private compile-int-rem "%"
- ^:private compile-int-eq "==="
- ^:private compile-int-lt "<"
-
- ^:private compile-deg-add "+"
- ^:private compile-deg-sub "-"
- ^:private compile-deg-mul "*"
- ^:private compile-deg-div "/"
- ^:private compile-deg-rem "%"
- ^:private compile-deg-eq "==="
- ^:private compile-deg-lt "<"
- ^:private compile-deg-scale "*"
-
^:private compile-real-add "+"
^:private compile-real-sub "-"
^:private compile-real-mul "*"
@@ -294,10 +303,10 @@
"+" (compile-nat-add compile ?values special-args)
"-" (compile-nat-sub compile ?values special-args)
"*" (compile-nat-mul compile ?values special-args)
- "/" (compile-nat-div compile ?values special-args)
- "%" (compile-nat-rem compile ?values special-args)
+ ;; "/" (compile-nat-div compile ?values special-args)
+ ;; "%" (compile-nat-rem compile ?values special-args)
"=" (compile-nat-eq compile ?values special-args)
- "<" (compile-nat-lt compile ?values special-args)
+ ;; "<" (compile-nat-lt compile ?values special-args)
;; "encode" (compile-nat-encode compile ?values special-args)
;; "decode" (compile-nat-decode compile ?values special-args)
;; "max-value" (compile-nat-max-value compile ?values special-args)
@@ -311,11 +320,11 @@
"+" (compile-int-add compile ?values special-args)
"-" (compile-int-sub compile ?values special-args)
"*" (compile-int-mul compile ?values special-args)
- "/" (compile-int-div compile ?values special-args)
- "%" (compile-int-rem compile ?values special-args)
+ ;; "/" (compile-int-div compile ?values special-args)
+ ;; "%" (compile-int-rem compile ?values special-args)
"=" (compile-int-eq compile ?values special-args)
- "<" (compile-int-lt compile ?values special-args)
- "encode" (compile-int-encode compile ?values special-args)
+ ;; "<" (compile-int-lt compile ?values special-args)
+ ;; "encode" (compile-int-encode compile ?values special-args)
;; "decode" (compile-int-decode compile ?values special-args)
;; "max-value" (compile-int-max-value compile ?values special-args)
;; "min-value" (compile-int-min-value compile ?values special-args)
@@ -326,11 +335,11 @@
(case proc-name
"+" (compile-deg-add compile ?values special-args)
"-" (compile-deg-sub compile ?values special-args)
- "*" (compile-deg-mul compile ?values special-args)
- "/" (compile-deg-div compile ?values special-args)
+ ;; "*" (compile-deg-mul compile ?values special-args)
+ ;; "/" (compile-deg-div compile ?values special-args)
"%" (compile-deg-rem compile ?values special-args)
"=" (compile-deg-eq compile ?values special-args)
- "<" (compile-deg-lt compile ?values special-args)
+ ;; "<" (compile-deg-lt compile ?values special-args)
;; "encode" (compile-deg-encode compile ?values special-args)
;; "decode" (compile-deg-decode compile ?values special-args)
;; "max-value" (compile-deg-max-value compile ?values special-args)