From 3e9022dc3fa068263612a771bb0a63c7c977bdc3 Mon Sep 17 00:00:00 2001 From: Juan Monetta Date: Tue, 30 Jan 2024 17:21:57 -0300 Subject: [PATCH] Don't convert traceFnCall args to a PersistentVector --- Readme.md | 2 +- src/jvm/clojure/storm/Emitter.java | 9 ++------- src/jvm/clojure/storm/Tracer.java | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Readme.md b/Readme.md index e64376c3b6..6c89fc9a33 100644 --- a/Readme.md +++ b/Readme.md @@ -27,7 +27,7 @@ Instructions here apply to ClojureStorm >= `1.11.1-19` and `1.12.0-alpha4_14` ```clojure (clojure.storm.Tracer/setTraceFnsCallbacks {:trace-fn-call-fn (fn [_ fn-ns fn-name fn-args-vec form-id] - (prn "fn-call " fn-ns fn-name fn-args-vec form-id)) + (prn "fn-call " fn-ns fn-name (into [] fn-args-vec) form-id)) :trace-fn-return-fn (fn [_ ret coord form-id] (prn "fn-return" ret coord form-id)) :trace-fn-unwind-fn (fn [_ throwable coord form-id] diff --git a/src/jvm/clojure/storm/Emitter.java b/src/jvm/clojure/storm/Emitter.java index 87c47d72e6..4958a10c13 100644 --- a/src/jvm/clojure/storm/Emitter.java +++ b/src/jvm/clojure/storm/Emitter.java @@ -215,18 +215,13 @@ public static Label emitFnPrologue(GeneratorAdapter gen, ObjExpr objx, String mu String fnName = name.getName(); String fnNs = name.getNamespace(); - // push all the args array on the stack and then - // create a immutable vector - // TODO: is there a benefit on creating a PersistentVector here? - // Since this array isn't going to be mutated anyway, so we will be paying - // the perf cost for no reason + // push all the args array on the stack and then gen.loadArgArray(); - gen.invokeStatic(Type.getType(clojure.lang.PersistentVector.class), Method.getMethod("clojure.lang.PersistentVector create(Object[])")); gen.push(fnNs); // push the function namespace gen.push(fnName); // push the function name gen.push((int)formId); // push the form-id - gen.invokeStatic(TRACER_CLASS_TYPE, Method.getMethod("void traceFnCall(clojure.lang.IPersistentVector, String, String, int)")); // trace the function call + gen.invokeStatic(TRACER_CLASS_TYPE, Method.getMethod("void traceFnCall(Object[], String, String, int)")); // trace the function call // emit binds for all function's arguments emitBindTraces(gen, objx, arglocals, PersistentVector.EMPTY); diff --git a/src/jvm/clojure/storm/Tracer.java b/src/jvm/clojure/storm/Tracer.java index 7ab4e0908f..497ecda6c3 100644 --- a/src/jvm/clojure/storm/Tracer.java +++ b/src/jvm/clojure/storm/Tracer.java @@ -46,7 +46,7 @@ public static void handleThreadException(Thread thread, Throwable ex) { handleExceptionFn.invoke(thread, ex); } - static public void traceFnCall(IPersistentVector fnArgs, String fnNs, String fnName, int formId) { + static public void traceFnCall(Object[] fnArgs, String fnNs, String fnName, int formId) { if (traceFnCallFn != null) traceFnCallFn.invoke(null, fnNs, fnName, fnArgs, formId); }