aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/r
diff options
context:
space:
mode:
authorEduardo Julian2018-05-06 23:27:12 -0400
committerEduardo Julian2018-05-06 23:27:12 -0400
commitfb72b937aba7886ce204379e97aa06c327a4029f (patch)
tree20bc243f1605c5b6c37b833b8046b82eac805494 /new-luxc/source/luxc/lang/translation/r
parent0b53bcc87ad3563daedaa64306d0bbe6df01ca49 (diff)
- Implemented Nat functionality in pure Lux.
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/r')
-rw-r--r--new-luxc/source/luxc/lang/translation/r/procedure/common.jvm.lux37
-rw-r--r--new-luxc/source/luxc/lang/translation/r/runtime.jvm.lux78
2 files changed, 4 insertions, 111 deletions
diff --git a/new-luxc/source/luxc/lang/translation/r/procedure/common.jvm.lux b/new-luxc/source/luxc/lang/translation/r/procedure/common.jvm.lux
index a9e661130..9554abc86 100644
--- a/new-luxc/source/luxc/lang/translation/r/procedure/common.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/r/procedure/common.jvm.lux
@@ -229,9 +229,6 @@
Nullary
<expression>)]
- [nat//min runtimeT.int//zero]
- [nat//max runtimeT.int//-one]
-
[int//min runtimeT.int//min]
[int//max runtimeT.int//max]
@@ -260,12 +257,6 @@
[int//div runtimeT.int///]
[int//rem runtimeT.int//%]
- [nat//add runtimeT.int//+]
- [nat//sub runtimeT.int//-]
- [nat//mul runtimeT.int//*]
- [nat//div runtimeT.nat///]
- [nat//rem runtimeT.nat//%]
-
[deg//add runtimeT.int//+]
[deg//sub runtimeT.int//-]
[deg//rem runtimeT.int//-]
@@ -297,14 +288,11 @@
Binary
(<cmp> paramO subjectO))]
- [nat//= runtimeT.int//=]
- [nat//< runtimeT.nat//<]
-
[int//= runtimeT.int//=]
[int//< runtimeT.int//<]
[deg//= runtimeT.int//=]
- [deg//< runtimeT.nat//<]
+ [deg//< runtimeT.int//<]
)
(def: (apply1 func)
@@ -312,23 +300,7 @@
(function (_ value)
(r.apply (list value) func)))
-(def: nat//char (|>> runtimeT.int64-low (apply1 (r.global "intToUtf8"))))
-
-(def: nat-procs
- Bundle
- (<| (prefix "nat")
- (|> (dict.new text.Hash<Text>)
- (install "+" (binary nat//add))
- (install "-" (binary nat//sub))
- (install "*" (binary nat//mul))
- (install "/" (binary nat//div))
- (install "%" (binary nat//rem))
- (install "=" (binary nat//=))
- (install "<" (binary nat//<))
- (install "min" (nullary nat//min))
- (install "max" (nullary nat//max))
- (install "to-int" (unary id))
- (install "char" (unary nat//char)))))
+(def: int//char (|>> runtimeT.int64-low (apply1 (r.global "intToUtf8"))))
(def: int-procs
Bundle
@@ -343,8 +315,8 @@
(install "<" (binary int//<))
(install "min" (nullary int//min))
(install "max" (nullary int//max))
- (install "to-nat" (unary id))
- (install "to-frac" (unary runtimeT.int//to-float)))))
+ (install "to-frac" (unary runtimeT.int//to-float))
+ (install "char" (unary int//char)))))
(def: deg-procs
Bundle
@@ -544,7 +516,6 @@
(<| (prefix "lux")
(|> lux-procs
(dict.merge bit-procs)
- (dict.merge nat-procs)
(dict.merge int-procs)
(dict.merge deg-procs)
(dict.merge frac-procs)
diff --git a/new-luxc/source/luxc/lang/translation/r/runtime.jvm.lux b/new-luxc/source/luxc/lang/translation/r/runtime.jvm.lux
index 88b40bcca..70a9f62df 100644
--- a/new-luxc/source/luxc/lang/translation/r/runtime.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/r/runtime.jvm.lux
@@ -664,83 +664,6 @@
@@bit//logical-right-shift
))
-(runtime: (nat//< param subject)
- (with-vars [pH sH]
- ($_ r.then
- (r.set! pH (..int64-high (@@ param)))
- (r.set! sH (..int64-high (@@ subject)))
- (let [lesser-high? (|> (@@ sH) (r.< (@@ pH)))
- equal-high? (|> (@@ sH) (r.= (@@ pH)))
- lesser-low? (|> (..int64-low (@@ subject)) (r.< (..int64-low (@@ param))))]
- (|> lesser-high?
- (r.or (|> equal-high?
- (r.and lesser-low?))))))))
-
-(runtime: (nat/// parameter subject)
- (let [negative? (int//< int//zero)
- valid-division-check [(|> (@@ parameter) (int//= int//zero))
- (r.stop (r.string "Cannot divide by zero!"))]
- short-circuit-check [(|> (@@ subject) (nat//< (@@ parameter)))
- int//zero]]
- (r.cond (list valid-division-check
- short-circuit-check
-
- [(|> (@@ parameter)
- (nat//< (|> (@@ subject) (bit//logical-right-shift (r.int 1)))))
- int//one])
- (with-vars [result remainder approximate log2 approximate-result approximate-remainder delta]
- ($_ r.then
- (r.set! result int//zero)
- (r.set! remainder (@@ subject))
- (r.while (|> (|> (@@ remainder) (nat//< (@@ parameter)))
- (r.or (|> (@@ remainder) (int//= (@@ parameter)))))
- (let [rough-estimate (r.apply (list (|> (int//to-float (@@ parameter)) (r./ (int//to-float (@@ remainder)))))
- (r.global "floor"))
- calculate-approximate-result (int//from-float (@@ approximate))
- calculate-approximate-remainder (int//* (@@ parameter) (@@ approximate-result))
- delta (r.if (|> (r.float 48.0) (r.<= (@@ log2)))
- (r.float 1.0)
- (r.** (|> (r.float 48.0) (r.- (@@ log2)))
- (r.float 2.0)))
- update-approximates! ($_ r.then
- (r.set! approximate-result calculate-approximate-result)
- (r.set! approximate-remainder calculate-approximate-remainder))]
- ($_ r.then
- (r.set! approximate (r.apply (list (r.float 1.0) rough-estimate)
- (r.global "max")))
- (r.set! log2 (let [log (function (_ input)
- (r.apply (list input) (r.global "log")))]
- (r.apply (list (|> (log (r.int 2))
- (r./ (log (@@ approximate)))))
- (r.global "ceil"))))
- update-approximates!
- (r.while (|> (negative? (@@ approximate-remainder))
- (r.or (|> (@@ approximate-remainder) (int//< (@@ remainder)))))
- ($_ r.then
- (r.set! approximate (|> delta (r.- (@@ approximate))))
- update-approximates!))
- ($_ r.then
- (r.set! result (|> (@@ result)
- (int//+ (r.if (|> (@@ approximate-result) (int//= int//zero))
- int//one
- (@@ approximate-result)))))
- (r.set! remainder (|> (@@ remainder) (int//- (@@ approximate-remainder))))))))
- (@@ result)))
- )))
-
-(runtime: (nat//% param subject)
- (let [flat (|> (@@ subject)
- (nat/// (@@ param))
- (int//* (@@ param)))]
- (|> (@@ subject) (int//- flat))))
-
-(def: runtime//nat
- Runtime
- ($_ r.then
- @@nat//<
- @@nat///
- @@nat//%))
-
(runtime: (deg//* param subject)
(with-vars [sL sH pL pH bottom middle top]
($_ r.then
@@ -1035,7 +958,6 @@
runtime//bit
runtime//int
runtime//adt
- runtime//nat
runtime//deg
runtime//frac
runtime//text