File tree 3 files changed +26
-4
lines changed
3 files changed +26
-4
lines changed Original file line number Diff line number Diff line change 1137
1137
(when (symbol? x) x))
1138
1138
1139
1139
(defmethod parse 'def
1140
- [op env form name _]
1140
+ [op env form _ _]
1141
1141
(let [pfn (fn
1142
1142
([_ sym] {:sym sym})
1143
1143
([_ sym init] {:sym sym :init init})
1150
1150
dynamic (-> sym meta :dynamic )
1151
1151
ns-name (-> env :ns :name )
1152
1152
locals (:locals env)
1153
- clash-ns (symbol (str ns-name " ." sym))]
1153
+ clash-ns (symbol (str ns-name " ." sym))
1154
+ sym-ns (namespace sym)
1155
+ sym (cond
1156
+ (and sym-ns (not #?(:clj (= (symbol sym-ns) ns-name)
1157
+ :cljs (symbol-identical? (symbol sym-ns) ns-name))))
1158
+ (throw (error env (str " Can't def ns-qualified name in namespace " sym-ns)))
1159
+
1160
+ (some? sym-ns)
1161
+ (symbol (name sym))
1162
+
1163
+ :else sym)]
1154
1164
(when (get-in @env/*compiler* [::namespaces clash-ns])
1155
1165
(warning :ns-var-clash env
1156
1166
{:ns (symbol (str ns-name " ." sym))
1157
1167
:var (symbol (str ns-name) (str sym))}))
1158
- (when (namespace sym)
1159
- (throw (error env " Can't def ns-qualified name" )))
1160
1168
(when (:const (resolve-var (dissoc env :locals ) sym))
1161
1169
(throw (error env " Can't redefine a constant" )))
1162
1170
(when-let [doc (:doc args)]
Original file line number Diff line number Diff line change 3235
3235
(let [m (zipmap (range i) (range i))]
3236
3236
(is (= () (last (take (inc i) (iterate rest m))))))))
3237
3237
3238
+ (def cljs.core-test /foo-1274 42 )
3239
+
3240
+ (deftest test-cljs-1274
3241
+ (is (= foo-1274 42 ))
3242
+ (is (= cljs.core-test/foo-1274 42 )))
3243
+
3238
3244
(comment
3239
3245
; ; ObjMap
3240
3246
; ; (let [ks (map (partial str "foo") (range 500))
Original file line number Diff line number Diff line change 441
441
(a/analyze test-env
442
442
'(ns foo.core
443
443
(:require [clojure.set :rename {intersection foo}]))))))))
444
+
445
+
446
+ (deftest test-cljs-1274
447
+ (let [test-env (assoc-in (a/empty-env ) [:ns :name ] 'cljs.user)]
448
+ (binding [a/*cljs-ns* a/*cljs-ns*]
449
+ (is (thrown-with-msg? Exception #"Can't def ns-qualified name in namespace foo.core"
450
+ (a/analyze test-env '(def foo.core/foo 43 ))))
451
+ (is (a/analyze test-env '(def cljs.user/foo 43 ))))))
You can’t perform that action at this time.
0 commit comments