I tried to migrate swank-clojure to lazy branch rev1282. Here are
steps I did.

1) search and replace rest to next
2) search and replace seq? to sequence?
3) change lazy-cons to lazy-seq following the recipe
4) fixed if LazySeq exceptions

see attached diff at the end.

Code loads fine. However, I got below error as soon as emacs slime-
connect to swank server.
The failing code occurred in eval form read from emacs connection. In
jswat debugger, I can see form.toString() in
clojure.lang.Compiler.eval frame as "(#'swank.commands.contrib/swank-
require (quote (:swank-repl ...)))". I even cut & pasted it to plain
repl and it ran fine. However, browsing object shows form.more() is a
clojure.core$map_xxx$fn_xxx, which looks like a lazy-seq closure.

What could be wrong here?

clojure.lang.PersistentList
  [Thrown class java.lang.ClassCastException]

Restarts:
 0: [ABORT] Return to SLIME's top level.

Backtrace:
  0: swank.commands.contrib$eval__1128.<clinit>(Unknown Source)
  1: sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
  2: sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:39)
  3: sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:27)
  4: java.lang.reflect.Constructor.newInstance(Constructor.java:494)
  5: java.lang.Class.newInstance0(Class.java:350)
  6: java.lang.Class.newInstance(Class.java:303)
  7: clojure.lang.Compiler$FnExpr.eval(Compiler.java:3263)
  8: clojure.lang.Compiler.eval(Compiler.java:4209)
  9: clojure.core$eval__3811.invoke(core.clj:1695)
 10: swank.core$eval_in_emacs_package__272.invoke(core.clj:55)
 11: swank.core$eval_for_emacs__346.invoke(core.clj:123)
 12: clojure.lang.Var.invoke(Var.java:344)
 13: clojure.lang.AFn.applyToHelper(AFn.java:179)
 14: clojure.lang.Var.applyTo(Var.java:453)
 15: clojure.core$apply__3084.doInvoke(core.clj:410)
 16: clojure.lang.RestFn.invoke(RestFn.java:428)
 17: swank.core$eval_from_control__275.invoke(core.clj:62)
 18: swank.core$spawn_worker_thread__369$fn__397$fn__399.invoke
(core.clj:157)
 19: clojure.lang.AFn.applyToHelper(AFn.java:171)
 20: clojure.lang.AFn.applyTo(AFn.java:164)
 21: clojure.core$apply__3084.doInvoke(core.clj:410)
 22: clojure.lang.RestFn.invoke(RestFn.java:428)
 23: swank.core$spawn_worker_thread__369$fn__397.doInvoke(core.clj:
153)
 24: clojure.lang.RestFn.invoke(RestFn.java:402)
 25: clojure.lang.AFn.run(AFn.java:37)
 26: java.lang.Thread.run(Thread.java:613)

thanks,
- Feng

diff --git a/swank/commands/basic.clj b/swank/commands/basic.clj
index 79d4354..8072d5b 100644
--- a/swank/commands/basic.clj
+++ b/swank/commands/basic.clj
@@ -98,8 +98,9 @@
              :short-message ~(.toString t)))

 (defn- exception-causes [#^Throwable t]
-  (lazy-cons t (when-let [cause (.getCause t)]
-                 (exception-causes cause))))
+  (lazy-seq
+   (cons t (when-let [cause (.getCause t)]
+              (exception-causes cause)))))

 (defn- compile-file-for-emacs*
   "Compiles a file for emacs. Because clojure doesn't compile, this
is
diff --git a/swank/commands/contrib.clj b/swank/commands/contrib.clj
index 6c0ed07..2185efd 100644
--- a/swank/commands/contrib.clj
+++ b/swank/commands/contrib.clj
@@ -3,7 +3,7 @@

 (defslimefn swank-require [keys]
   (binding [*ns* (find-ns 'swank.commands.contrib)]
-    (doseq [k (if (seq? keys) keys (list keys))]
+    (doseq [k (if (sequence? keys) keys (list keys))]
       (try
        (require (symbol (str "swank.commands.contrib." (name k))))
-       (catch java.io.FileNotFoundException fne nil)))))
\ No newline at end of file
+       (catch java.io.FileNotFoundException fne nil)))))
diff --git a/swank/commands/contrib/swank_arglists.clj b/swank/
commands/contrib/swank_arglists.clj
index 4a87d89..e7a6cd9 100644
--- a/swank/commands/contrib/swank_arglists.clj
+++ b/swank/commands/contrib/swank_arglists.clj
@@ -9,8 +9,8 @@
                 print-lines]} (apply hash-map options)]
     ;; Yeah, I'm lazy -- I'll flesh this out later
     (if (and raw-specs
-             (seq? raw-specs)
-             (seq? (first raw-specs)))
+             (sequence? raw-specs)
+             (sequence? (first raw-specs)))
       ((slime-fn 'operator-arglist) (ffirst raw-specs) *current-
package*)
       nil)))

diff --git a/swank/commands/indent.clj b/swank/commands/indent.clj
index 6248399..af58ce3 100644
--- a/swank/commands/indent.clj
+++ b/swank/commands/indent.clj
@@ -33,10 +33,7 @@
                (filter (comp var? val) (mapcat ns-map nss)))))

 (defn- every-other [coll]
-  (when coll
-    (lazy-cons
-     (first coll)
-     (every-other (drop 2 coll)))))
+  (take-nth 2 coll))

 (defn- update-indentation-delta
   "Update the cache and return the changes in a (symbol '. indent)
list.
@@ -53,15 +50,15 @@
                 (let [vars (filter (comp var? val) (mapcat ns-map
nss))]
                   (mapcat in-cache? vars)))]
          (if force
-           (when-let [updates (considerations-for (all-ns))]
+           (when-let [updates (seq (considerations-for (all-ns)))]
              (dosync (apply alter cache assoc updates))
-             (every-other (rest updates)))
+             (every-other (next updates)))
            (let [ns (maybe-ns *current-package*)
                  in-ns? (fn [[sym var]] (and (var? var) (= ns ((meta
var) :ns))))]
              (when ns
-               (when-let [updates (filter identity (considerations-
for (list ns)))]
+               (when-let [updates (seq (filter identity
(considerations-for (list ns))))]
                  (dosync (apply alter cache assoc updates))
-                 (every-other (rest updates))))))))))
+                 (every-other (next updates))))))))))

 (defn- perform-indentation-update
   "Update the indentation cache in connection and update emacs.
@@ -71,7 +68,7 @@
        (let [delta (update-indentation-delta cache force)]
          (dosync
           (ref-set (conn :indent-cache-pkg) (hash (all-ns)))
-          (when delta
+          (when (seq delta)
             (send-to-emacs `(:indentation-update ~delta))))))))

 (defn- sync-indentation-to-emacs
diff --git a/swank/commands/inspector.clj b/swank/commands/
inspector.clj
index a91f724..80f66f8 100644
--- a/swank/commands/inspector.clj
+++ b/swank/commands/inspector.clj
@@ -72,7 +72,7 @@
      (vector? obj) :vector
      (var? obj) :var
      (string? obj) :string
-     (seq? obj) :seq
+     (sequence? obj) :seq
      (instance? Class obj) :class
      (instance? clojure.lang.Namespace obj) :namespace)))

@@ -189,7 +189,7 @@
          (fn spec-value [val]
            (cond
             (string? val) val
-            (seq? val) (spec-seq val)))]
+            (sequence? val) (spec-seq val)))]
     (map spec-value specs)))

 ;; Works for infinite sequences, but it lies about length. Luckily,
emacs doesn't
@@ -258,7 +258,7 @@
 (defslimefn inspector-pop []
   (with-emacs-package
    (cond
-    (rest @*inspector-stack*)
+    (next @*inspector-stack*)
     (inspect-object
      (dosync
       (ref-pop *inspector-stack*)
diff --git a/swank/core.clj b/swank/core.clj
index 260cdd7..87c6623 100644
--- a/swank/core.clj
+++ b/swank/core.clj
@@ -59,7 +59,7 @@
   "Blocks for a mbox message from the control thread and executes it
    when received. The mbox message is expected to be a slime-fn."
   ([] (let [form (mb/receive (current-thread))]
-        (apply (ns-resolve *ns* (first form)) (rest form)))))
+        (apply (ns-resolve *ns* (first form)) (next form)))))

 (defn eval-loop
   "A loop which continuosly reads actions from the control thread and
@@ -67,8 +67,9 @@
   ([] (continuously (eval-from-control))))

 (defn- exception-causes [#^Throwable t]
-  (lazy-cons t (when-let [cause (.getCause t)]
-                 (exception-causes cause))))
+  (lazy-seq
+   (cons t (when-let [cause (.getCause t)]
+              (exception-causes cause)))))

 (defn- debug-quit-exception? [t]
   (some #(identical? *debug-quit-exception* %) (exception-causes t)))
@@ -110,7 +111,7 @@
        (send-to-emacs (list :debug-return (current-thread) level
nil))))))

 (defn doall-seq [coll]
-  (if (seq? coll)
+  (if (sequence? coll)
     (doall coll)
     coll))

@@ -118,7 +119,7 @@
   (try
    (binding [*current-package* buffer-package]
      (if-let [f (slime-fn (first form))]
-       (let [form (cons f (rest form))
+        (let [form (cons f (next form))
              result (doall-seq (eval-in-emacs-package form))]
          (run-hook *pre-reply-hook*)
          (send-to-emacs `(:return ~(thread-name (current-thread))
(:ok ~result) ~id)))
diff --git a/swank/core/protocol.clj b/swank/core/protocol.clj
index 35dfa43..d8bf4c4 100644
--- a/swank/core/protocol.clj
+++ b/swank/core/protocol.clj
@@ -45,7 +45,7 @@
      (let [len (hex->num (read-chars 6 rdr))
            msg (read-chars len rdr)
            form (read-from-string (fix-namespace msg))]
-       (if (seq? form)
+       (if (sequence? form)
          (deep-replace {'t true} form)
          form))))

diff --git a/swank/util.clj b/swank/util.clj
index 3ba2ecc..fcb9c22 100644
--- a/swank/util.clj
+++ b/swank/util.clj
@@ -31,10 +31,10 @@
   ([item coll] (position item coll 0))
   ([item coll start]
      (loop [coll (drop start coll), i start]
-       (when coll
+       (when (seq coll)
          (if (= (first coll) item)
            i
-           (recur (rest coll) (inc i))))))
+           (recur (next coll) (inc i))))))
   {:tag Integer})

 (defn categorize-by
@@ -54,7 +54,7 @@


 (defn deep-replace [smap coll]
-  (map #(if (or (seq? %) (vector? %))
+  (map #(if (or (sequence? %) (vector? %))
           (deep-replace smap %)
           %)
        (replace smap coll)))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to