resolve ^Type hint to canonical class name in var :tag
(def ^String tv ...) left (:tag (meta (var tv))) as the unresolved "String"; the JVM compiler resolves the hint to java.lang.String at def time. Add a resolve-class-hint host seam (built from the existing class-token table) and resolve a def's :tag through it in the analyzer. The reader path (read-string "^String x") stays unresolved, matching the JVM (only the compiler resolves). Closes ^Type-tag-on-var.
This commit is contained in:
parent
d1c2811d13
commit
7db5fabc8d
5 changed files with 32 additions and 9 deletions
|
|
@ -405,7 +405,7 @@
|
|||
{:suite "type" :expr "(type (random-uuid))" :expected ":jolt/uuid"}
|
||||
{:suite "type" :expr "(type (ex-info \"x\" {}))" :expected ":jolt/ex-info"}
|
||||
{:suite "var_meta" :expr "(do (def ^:private pv 1) (:private (meta (var pv))))" :expected "true"}
|
||||
{:suite "var_meta" :expr "(do (def ^String tv \"a\") (:tag (meta (var tv))))" :expected "String"}
|
||||
{:suite "var_meta" :expr "(do (def ^String tv \"a\") (:tag (meta (var tv))))" :expected "java.lang.String"}
|
||||
{:suite "var_meta" :expr "(do (def dv2 \"hi\" 1) (:doc (meta (var dv2))))" :expected "hi"}
|
||||
{:suite "var_meta" :expr "(do (def mv 1) (:name (meta (var mv))))" :expected "mv"}
|
||||
{:suite "var_meta" :expr "(do (def nv 1) (:ns (meta (var nv))))" :expected "user"}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue