diff --git a/VERSION b/VERSION index ac39a10..e83f19e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.0 +0.9.1-SNAPSHOT diff --git a/project.clj b/project.clj index 658a5ae..1316047 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,8 @@ [org.clojure/clojurescript "0.0-3211"] ] :jvm-opts ["-XX:-OmitStackTraceInFastThrow"] ; this prevents JVM from doing optimizations which can remove stack traces from NPE and other exceptions - :source-paths ["src"] + :source-paths ["src/clj"] + :java-source-paths ["src/java"] :test-paths ["test", "target/test-classes"] :jar-exclusions [#"\.cljx"] :auto-clean false @@ -13,10 +14,10 @@ [[org.clojure/test.check "0.7.0"]] :plugins [[com.keminglabs/cljx "0.6.0"]] - :cljx {:builds [{:source-paths ["src"] + :cljx {:builds [{:source-paths ["src/clj"] :output-path "target/classes" :rules :clj} - {:source-paths ["src"] + {:source-paths ["src/clj"] :output-path "target/classes" :rules :cljs} {:source-paths ["test"] diff --git a/src/com/rpl/specter.cljx b/src/clj/com/rpl/specter.cljx similarity index 100% rename from src/com/rpl/specter.cljx rename to src/clj/com/rpl/specter.cljx diff --git a/src/com/rpl/specter/defhelpers.clj b/src/clj/com/rpl/specter/defhelpers.clj similarity index 90% rename from src/com/rpl/specter/defhelpers.clj rename to src/clj/com/rpl/specter/defhelpers.clj index 1cb498f..f409b1e 100644 --- a/src/com/rpl/specter/defhelpers.clj +++ b/src/clj/com/rpl/specter/defhelpers.clj @@ -9,7 +9,7 @@ :let [args (vec (gensyms i)) setters (for [j (range i)] `(aset ~a ~j ~(get args j)))]] `(~invoke-name [this# ~@args] - (let [~a (object-array ~i)] + (let [~a (com.rpl.specter.impl/fast-object-array ~i)] ~@setters (com.rpl.specter.impl/bind-params* this# ~a 0) )))] diff --git a/src/com/rpl/specter/impl.cljx b/src/clj/com/rpl/specter/impl.cljx similarity index 96% rename from src/com/rpl/specter/impl.cljx rename to src/clj/com/rpl/specter/impl.cljx index 0da4526..98f52dd 100644 --- a/src/com/rpl/specter/impl.cljx +++ b/src/clj/com/rpl/specter/impl.cljx @@ -12,6 +12,8 @@ [clojure.string :as s] #+clj [com.rpl.specter.defhelpers :as dh] ) + #+clj + (:import [com.rpl.specter Util]) ) (defn spy [e] @@ -79,6 +81,15 @@ (declare bind-params*) +#+clj +(defmacro fast-object-array [i] + `(com.rpl.specter.Util/makeObjectArray ~i)) + +#+cljs +(defn fast-object-array [i] + (object-array i)) + + #+clj (dh/define-ParamsNeededPath clojure.lang.IFn @@ -555,16 +566,20 @@ structure)) (defn compiled-selector [^com.rpl.specter.impl.CompiledPath path] - (-> path .-transform-fns .-selector)) + (let [^com.rpl.specter.impl.TransformFunctions tfns (.-transform-fns path)] + (.-selector tfns))) (defn compiled-transformer [^com.rpl.specter.impl.CompiledPath path] - (-> path .-transform-fns .-transformer)) + (let [^com.rpl.specter.impl.TransformFunctions tfns (.-transform-fns path)] + (.-transformer tfns))) (defn params-needed-selector [^com.rpl.specter.impl.ParamsNeededPath path] - (-> path .-transform-fns .-selector)) + (let [^com.rpl.specter.impl.TransformFunctions tfns (.-transform-fns path)] + (.-selector tfns))) (defn params-needed-transformer [^com.rpl.specter.impl.ParamsNeededPath path] - (-> path .-transform-fns .-transformer)) + (let [^com.rpl.specter.impl.TransformFunctions tfns (.-transform-fns path)] + (.-transformer tfns))) #+clj (defn extend-protocolpath* [protpath-prot extensions] diff --git a/src/com/rpl/specter/macros.clj b/src/clj/com/rpl/specter/macros.clj similarity index 100% rename from src/com/rpl/specter/macros.clj rename to src/clj/com/rpl/specter/macros.clj diff --git a/src/com/rpl/specter/prot_opt_invoke.clj b/src/clj/com/rpl/specter/prot_opt_invoke.clj similarity index 100% rename from src/com/rpl/specter/prot_opt_invoke.clj rename to src/clj/com/rpl/specter/prot_opt_invoke.clj diff --git a/src/com/rpl/specter/protocols.cljx b/src/clj/com/rpl/specter/protocols.cljx similarity index 100% rename from src/com/rpl/specter/protocols.cljx rename to src/clj/com/rpl/specter/protocols.cljx diff --git a/src/java/com/rpl/specter/Util.java b/src/java/com/rpl/specter/Util.java new file mode 100644 index 0000000..570e43a --- /dev/null +++ b/src/java/com/rpl/specter/Util.java @@ -0,0 +1,7 @@ +package com.rpl.specter; + +public class Util { + public static Object[] makeObjectArray(int size) { + return new Object[size]; + } +}