Class refinements: per-type class names, FQN tokens, instance? built-ins

- (class x) returns per-type JVM class names (Long/Double/Ratio/Character/Atom),
  not a blanket java.lang.Number.
- register fully-qualified class tokens (java.lang.Long, clojure.lang.Keyword,
  clojure.lang.Atom, ...) that self-evaluate to their name, so (= (class 1)
  java.lang.Long) and (instance? clojure.lang.Atom x) resolve.
- instance? recognizes Long/Double/Ratio/Character/Symbol/Atom/IFn built-ins.

Closes class number/string/keyword/name, instance? Atom, atom?. Corpus 2699->2705.
This commit is contained in:
Yogthos 2026-06-21 19:12:40 -04:00
parent b03da19ba8
commit bb6c9eeb29
4 changed files with 36 additions and 7 deletions

View file

@ -15,15 +15,15 @@
{:suite "class" :expr "File" :expected "java.io.File"}
{:suite "class" :expr "Exception" :expected "java.lang.Exception"}
{:suite "class" :expr "MapEntry" :expected "clojure.lang.MapEntry"}
{:suite "class" :expr "(class 1)" :expected "java.lang.Number"}
{:suite "class" :expr "(class 1.5)" :expected "java.lang.Number"}
{:suite "class" :expr "(class 1)" :expected "java.lang.Long"}
{:suite "class" :expr "(class 1.5)" :expected "java.lang.Double"}
{:suite "class" :expr "(class \"s\")" :expected "java.lang.String"}
{:suite "class" :expr "(class :k)" :expected "clojure.lang.Keyword"}
{:suite "class" :expr "(class true)" :expected "java.lang.Boolean"}
{:suite "class" :expr "(class false)" :expected "java.lang.Boolean"}
{:suite "class" :expr "(class nil)" :expected ""}
{:suite "class" :expr "(= String (class \"abc\"))" :expected "true"}
{:suite "class" :expr "(= Number (class 7))" :expected "true"}
{:suite "class" :expr "(= Number (class 7))" :expected "false"}
{:suite "class" :expr "(= String (class 7))" :expected "false"}
{:suite "class" :expr "(do (defmulti cm (fn [x] (class x))) (defmethod cm String [x] :str) (cm \"a\"))" :expected ":str"}
{:suite "class" :expr "(do (defmulti cn (fn [x] (class x))) (defmethod cn nil [x] :nil) (defmethod cn String [x] :str) (cn nil))" :expected ":nil"}