aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser/host.clj
diff options
context:
space:
mode:
authorEduardo Julian2016-05-03 01:30:27 -0400
committerEduardo Julian2016-05-03 01:30:27 -0400
commita67cdf04aadb9876a995aab4331001e2f4e19e6c (patch)
tree8367ab4514a339bfd37f19cab1b5b86279f101da /src/lux/analyser/host.clj
parent4d14d395d4861ee6a82d4ef9ee54e946cf3c46bc (diff)
- Removed _jvm_instanceof from the list of special forms.
Diffstat (limited to '')
-rw-r--r--src/lux/analyser/host.clj21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/lux/analyser/host.clj b/src/lux/analyser/host.clj
index f80ae1266..8b691ea67 100644
--- a/src/lux/analyser/host.clj
+++ b/src/lux/analyser/host.clj
@@ -162,15 +162,6 @@
_
(fail (str "[Type Error] Type is not an object type: " (&type/show-type obj-type)))))
-(defn analyse-jvm-instanceof [analyse exo-type class object]
- (|do [=object (&&/analyse-1+ analyse object)
- _ (ensure-object (&&/expr-type* =object))
- :let [output-type &type/Bool]
- _ (&type/check exo-type output-type)
- _cursor &/cursor]
- (return (&/|list (&&/|meta output-type _cursor
- (&&/$jvm-instanceof (&/T [class =object])))))))
-
(defn generic-class->simple-class [gclass]
"(-> GenericClass Text)"
(|case gclass
@@ -917,6 +908,16 @@
(return (&/|list (&&/|meta exo-type _cursor
(&&/$host (&/T ["jvm" "try"]) (&/|list =body =catch)))))))
+(defn ^:private analyse-jvm-instanceof [analyse exo-type class ?values]
+ (|do [:let [(&/$Cons object (&/$Nil)) ?values]
+ =object (&&/analyse-1+ analyse object)
+ _ (ensure-object (&&/expr-type* =object))
+ :let [output-type &type/Bool]
+ _ (&type/check exo-type output-type)
+ _cursor &/cursor]
+ (return (&/|list (&&/|meta output-type _cursor
+ (&&/$host (&/T ["jvm" "instanceof"]) (&/|list class =object)))))))
+
(defn analyse-host [analyse exo-type category proc ?values]
(case category
"jvm"
@@ -1007,6 +1008,8 @@
"c2l" (analyse-jvm-c2l analyse exo-type ?values)
;; else
(->> (fail (str "[Analyser Error] Unknown host procedure: " [category proc]))
+ (if-let [[_ _class] (re-find #"^instanceof:([^:]+)$" proc)]
+ (analyse-jvm-instanceof analyse exo-type _class ?values))
(if-let [[_ _class _arg-classes] (re-find #"^new:([^:]+):([^:]*)$" proc)]
(analyse-jvm-new analyse exo-type _class (if (= "" _arg-classes) (&/|list) (&/->list (string/split _arg-classes #","))) ?values))
(if-let [[_ _class _method _arg-classes] (re-find #"^invokestatic:([^:]+):([^:]+):([^:]*)$" proc)]