Ahoy!

The following funky code generates about 13 KB of JavaScript. A hand-written 
version without core.match generates about 3 KB. It's about the same with 
:optimizations set to :simple or :advanced. Is there anything I can do to 
improve the core.match output? (I've tried both 0.2.1 and 0.2.2-SNAPSHOT.)

The function basically just traverses a vector with look-ahead and looks for 
patterns. If you have any suggestions on how to implement this completely 
differently but better I'm all ears!

(defn ^:private split [ss]
  (let [cs (mapv classify-char ss)]
    (loop [result [], start 0, i 0]
      (let [result+new 
            (fn [end]
              (if (> end start)
                (conj result (.substring ^String ss start end))
                result))
            i+1 (+ i 1)]
        (if (< i (count ss))
          (let [[m0 m1 m2]
                (match [(subvec cs i)]
                  [[:whitespace & _]]
                  [(result+new i) i+1 i+1]

                  [(:or [:lower :upper                        & _]
                        [:upper :upper :lower                 & _]
                        ;; (:not _) patterns would be nice below!
                        [:number (_ :guard #(not= % :number)) & _]
                        [(_ :guard #(not= % :number)) :number & _])]
                  [(result+new i+1) i+1 i+1]

                  :else
                  [result start i+1])]
            (recur m0 m1 m2)) ;; To avoid `recur` inside of `match`
          (result+new i))))))

Also available for checkout here: 
https://github.com/qerub/camel-snake-kebab/commits/wip-0.2.0

Just run `lein cljx once, cljsbuild once` and look at 
target/cljsbuild-compiler-0/camel_snake_kebab/case_convert.js.

Thanks,
Chris

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to