Skip to content

Commit 16e042a

Browse files
committed
Merge branch 'master' into new
2 parents d3fe37c + 855f394 commit 16e042a

File tree

7 files changed

+30
-10
lines changed

7 files changed

+30
-10
lines changed

readme.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
Docs: http://clojure.org
1111
Feedback: http://groups.google.com/group/clojure
1212

13-
To Run java -cp clojure.jar clojure.lang.Repl
13+
To Run: java -cp clojure.jar clojure.main
1414
To Build: ant
1515

1616
--------------------------------------------------------------------------

src/jvm/clojure/lang/PersistentArrayMap.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ public ITransientMap asTransient(){
269269
static final class TransientArrayMap extends ATransientMap {
270270
int len;
271271
final Object[] array;
272-
final Thread owner;
272+
Thread owner;
273273

274274
public TransientArrayMap(Object[] array){
275275
this.owner = Thread.currentThread();
@@ -330,6 +330,8 @@ int doCount() {
330330
}
331331

332332
IPersistentMap doPersistent(){
333+
ensureEditable();
334+
owner = null;
333335
Object[] a = new Object[len];
334336
System.arraycopy(array,0,a,0,len);
335337
return new PersistentArrayMap(a);
@@ -339,8 +341,8 @@ void ensureEditable(){
339341
if(owner == Thread.currentThread())
340342
return;
341343
if(owner != null)
342-
throw new IllegalAccessError("Mutable used by non-owner thread");
343-
throw new IllegalAccessError("Mutable used after immutable call");
344+
throw new IllegalAccessError("Transient used by non-owner thread");
345+
throw new IllegalAccessError("Transient used after persistent! call");
344346
}
345347
}
346348
}

src/jvm/clojure/lang/PersistentHashMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,8 @@ void ensureEditable(){
270270
if(owner == Thread.currentThread())
271271
return;
272272
if(owner != null)
273-
throw new IllegalAccessError("Mutable used by non-owner thread");
274-
throw new IllegalAccessError("Mutable used after immutable call");
273+
throw new IllegalAccessError("Transient used by non-owner thread");
274+
throw new IllegalAccessError("Transient used after persistent! call");
275275
}
276276
}
277277

src/jvm/clojure/lang/PersistentTreeMap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public ISeq seq(){
137137
}
138138

139139
public IPersistentCollection empty(){
140-
return EMPTY.withMeta(meta());
140+
return new PersistentTreeMap(meta(), comp);
141141
}
142142

143143
public ISeq rseq() throws Exception{

src/jvm/clojure/lang/PersistentTreeSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public IPersistentSet cons(Object o){
5353
}
5454

5555
public IPersistentCollection empty(){
56-
return EMPTY.withMeta(meta());
56+
return new PersistentTreeSet(meta(),(PersistentTreeMap)impl.empty());
5757
}
5858

5959
public ISeq rseq() throws Exception{

src/jvm/clojure/lang/PersistentVector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,8 @@ void ensureEditable(){
402402
if(owner == Thread.currentThread())
403403
return;
404404
if(owner != null)
405-
throw new IllegalAccessError("Mutable used by non-owner thread");
406-
throw new IllegalAccessError("Mutable used after immutable call");
405+
throw new IllegalAccessError("Transient used by non-owner thread");
406+
throw new IllegalAccessError("Transient used after persistent! call");
407407

408408
// root = editableRoot(root);
409409
// tail = editableTail(tail);

test/clojure/test_clojure/sequences.clj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,15 @@
117117
{} {}
118118
{:a 1 :b 2} {}
119119

120+
(sorted-map) (sorted-map)
121+
(sorted-map :a 1 :b 2) (sorted-map)
122+
120123
#{} #{}
121124
#{1 2} #{}
122125

126+
(sorted-set) (sorted-set)
127+
(sorted-set 1 2) (sorted-set)
128+
123129
(seq ()) nil ; (seq ()) => nil
124130
(seq '(1 2)) ()
125131

@@ -140,6 +146,18 @@
140146
1.2 nil
141147
"abc" nil ))
142148

149+
;Tests that the comparator is preservered
150+
;The first element should be the same in each set if preserved.
151+
(deftest test-empty-sorted
152+
(let [inv-compare (comp - compare)]
153+
(are [x y] (= (first (into (empty x) x))
154+
(first y))
155+
(sorted-set 1 2 3) (sorted-set 1 2 3)
156+
(sorted-set-by inv-compare 1 2 3) (sorted-set-by inv-compare 1 2 3)
157+
158+
(sorted-map 1 :a 2 :b 3 :c) (sorted-map 1 :a 2 :b 3 :c)
159+
(sorted-map-by inv-compare 1 :a 2 :b 3 :c) (sorted-map-by inv-compare 1 :a 2 :b 3 :c))))
160+
143161

144162
(deftest test-not-empty
145163
; empty coll/seq => nil

0 commit comments

Comments
 (0)