diff options
author | Eduardo Julian | 2016-05-03 01:30:27 -0400 |
---|---|---|
committer | Eduardo Julian | 2016-05-03 01:30:27 -0400 |
commit | a67cdf04aadb9876a995aab4331001e2f4e19e6c (patch) | |
tree | 8367ab4514a339bfd37f19cab1b5b86279f101da /src/lux/analyser/host.clj | |
parent | 4d14d395d4861ee6a82d4ef9ee54e946cf3c46bc (diff) |
- Removed _jvm_instanceof from the list of special forms.
Diffstat (limited to '')
-rw-r--r-- | src/lux/analyser/host.clj | 21 |
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)] |