Differences From
Artifact [a791260fb2]:
20 20 (defn recurse [acc dox t & r]
21 21 (cond
22 22 (string? t)
23 23 (recurse acc [;dox t] ;r)
24 24 (or (struct? t)
25 25 (keyword? t))
26 26 (recurse [;acc t] dox ;r)
27 - [[;(if (empty? dox) []
27 + :else [[;(if (empty? dox) []
28 28 [{:doc (string/join dox)}])
29 29 ;acc] t ;r]))
30 30 (recurse [] [] ;args))
31 31
32 32 (defmacro class [name & dfn]
33 33 (def def-map (tuple tuple (dyn *current-file*)
34 34 ;(tuple/sourcemap (dyn :macro-form))))
................................................................................
67 67 (def doc-str (string/join dox))
68 68 (def body spec)
69 69 (with-dyns [*class-path*
70 70 [;(or (dyn *class-path*) []) name]]
71 71 (with-syms [$local-env $parent-env $form]
72 72 ~(let [,$parent-env (or @scope (curenv))
73 73 ,$local-env (,table/setproto
74 - @{ '@name ,(mapped-val (keyword name))
74 + @{ '@id ,(mapped-val (keyword name))
75 75 '@gd-id ,(mapped-val (string export-name))
76 76 '@inherit ,(mapped-val super)
77 77 '@mode ,(mapped-val mode)
78 78 '@doc ,(if (empty? dox) nil
79 79 (mapped-val doc-str))}
80 80 ,$parent-env)
81 81 ,name ,$local-env]
................................................................................
92 92 (defn- member [& x]
93 93 (string/join [;(or (dyn *class-path*) [])
94 94 ;x] "."))
95 95
96 96 (defmacro defclass* [id meta & r]
97 97 ~(def ,id ,;meta (class ,id ,;r)))
98 98
99 -(defmacro defclass [id & r] ~(defclass* ,id [] ,;r))
100 -(defmacro defclass- [id & r] ~(defclass* ,id [:private] ,;r))
99 +(defmacro defclass [id & r] ~(defclass* ,id [:subclass] ,;r))
100 +(defmacro defclass- [id & r] ~(defclass* ,id [:subclass :private] ,;r))
101 101
102 102 (defn- parse-sig [sig]
103 103 (match sig
104 104 ([ty id dox & r] (string? dox))
105 105 [{:type (eval ty) :id id :doc dox}
106 106 ;(parse-sig r)]
107 - [ty id & r] [{:type (eval ty) :id id}
107 + [ty id & r] [{:type (eval ty) :id (tuple 'quote id)}
108 108 ;(parse-sig r) ]
109 109 _ []))
110 110
111 111 (defmacro defm [id & rest]
112 - (def (meta ret sig & body) (assemble-meta rest))
112 + (def (meta sig ret & body) (assemble-meta rest))
113 113 (def args (parse-sig sig))
114 - (def md [;meta :method {:sig args :ret (eval ret)}])
115 - (def arg-names ['me ;(map (fn [{:id id}] id) args)])
114 + (def md [;meta {:method {:sig args :ret (eval ret)}}])
115 + (def arg-names ['me ;(map (fn [{:id (_ id)}] id) args)])
116 116 (def path (symbol (member id)))
117 117 ~(def ,id ,;md (fn ,path ,arg-names ,;body)))
118 118
119 119 (defmacro defm- [id & r] ~(defm ,id :private ,;r))
120 120
121 121 (defmacro prop [id & args]
122 122 (def (meta-list ty init-val)