diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-10-29 09:08:58 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-10-29 09:08:58 -0400 |
commit | a3d4274861d24afc5f8311e04a2e5c769c0778d8 (patch) | |
tree | 0d5a54af5b530cf84abac4cb1a730534ac6d5074 /src | |
parent | 5f090a0925f3dcbd3fa8b7104cd59b6d4c087413 (diff) |
don't propagate field hints into method bodies
Diffstat (limited to 'src')
-rw-r--r-- | src/clj/clojure/core_deftype.clj | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj index 0840be92..0f496326 100644 --- a/src/clj/clojure/core_deftype.clj +++ b/src/clj/clojure/core_deftype.clj @@ -23,6 +23,8 @@ methodname-set (set (map first methods)) dynamic-type (contains? interface-set clojure.lang.IDynamicType) implement? (fn [iface] (not (contains? interface-set iface))) + hinted-fields fields + fields (vec (map #(with-meta % nil) fields)) base-fields fields fields (conj fields '__meta '__extmap)] (letfn @@ -76,7 +78,7 @@ (new ~name ~@(remove #{'__extmap} fields) (assoc ~'__extmap ~gk ~gv))))))] [i m]))] (let [[i m] (-> [interfaces methods] eqhash iobj ilookup associative)] - `(defclass* ~classname ~fields + `(defclass* ~classname ~(conj hinted-fields '__meta '__extmap) :implements ~(vec i) ~@m))))) @@ -133,6 +135,8 @@ classname (symbol (str *ns* "." gname)) tag (keyword (str *ns*) (str name)) interfaces (conj interfaces 'clojure.lang.IDynamicType) + hinted-fields fields + fields (vec (map #(with-meta % nil) fields)) methods (conj methods `(~'getDynamicType [] ~tag) `(~'getExtensionMap [] ~'__extmap) @@ -151,7 +155,7 @@ ~@(map (fn [fld] `(= ~fld (.getDynamicField ~'o ~(keyword fld) ~'this))) fields) (= ~'__extmap (.getExtensionMap ~'o)))))))))] `(do - ~(create-defclass* gname (vec fields) (vec interfaces) methods) + ~(create-defclass* gname (vec hinted-fields) (vec interfaces) methods) (defn ~name ([~@fields] (new ~classname ~@fields nil nil)) ([~@fields meta# extmap#] (new ~classname ~@fields meta# extmap#)))))) |