aboutsummaryrefslogtreecommitdiff
path: root/luxc
diff options
context:
space:
mode:
Diffstat (limited to 'luxc')
-rw-r--r--luxc/src/lux/base.clj4
-rw-r--r--luxc/src/lux/type/host.clj9
2 files changed, 9 insertions, 4 deletions
diff --git a/luxc/src/lux/base.clj b/luxc/src/lux/base.clj
index 6ee111724..cc109b0f7 100644
--- a/luxc/src/lux/base.clj
+++ b/luxc/src/lux/base.clj
@@ -1182,7 +1182,7 @@
;; Based on the LuxRT.decode_rev method
(defn decode-rev [^String input]
(if (and (.startsWith input ".")
- (< (.length input) (inc rev-bits)))
+ (<= (.length input) (inc rev-bits)))
(loop [digits-left (-> input
(.substring 1)
clean-separators
@@ -1199,7 +1199,7 @@
(inc index)
ouput)))
ouput))
- (throw (str "Bad format for Rev number: " input))))
+ (throw (new java.lang.Exception (str "Bad format for Rev number: " input)))))
)
(defn show-ast [ast]
diff --git a/luxc/src/lux/type/host.clj b/luxc/src/lux/type/host.clj
index bddc6829b..36e969046 100644
--- a/luxc/src/lux/type/host.clj
+++ b/luxc/src/lux/type/host.clj
@@ -282,11 +282,16 @@
(&/fold% (partial raise* existential) (&/T [class params]) lineage))
;; [Exports]
+(defn find-class! [class class-loader]
+ (try (return (Class/forName class true class-loader))
+ (catch java.lang.ClassNotFoundException ex
+ (&/fail-with-loc (str "[Host Error] Cannot find class: " (pr-str class))))))
+
(defn ->super-type
"(-> Text Text (List Type) (Lux Type))"
[existential class-loader super-class sub-class sub-params]
- (let [super-class+ (Class/forName super-class true class-loader)
- sub-class+ (Class/forName sub-class true class-loader)]
+ (|do [^Class super-class+ (find-class! super-class class-loader)
+ ^Class sub-class+ (find-class! sub-class class-loader)]
(if (.isAssignableFrom super-class+ sub-class+)
(let [lineage (trace-lineage sub-class+ super-class+)]
(|do [[^Class sub-class* sub-params*] (raise existential lineage sub-class+ sub-params)]