From 832cb1caeb1f35eb44563226648b6be42a6b19a1 Mon Sep 17 00:00:00 2001 From: Nathan Petryk Date: Fri, 1 Mar 2019 15:36:40 -0600 Subject: [PATCH] Added an optional call-site id as an arg to spy and brk Fixes #35 --- src/sc/api.cljc | 7 +++++-- src/sc/impl.cljc | 27 ++++++++++++++++++--------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/sc/api.cljc b/src/sc/api.cljc index 7bb0344..0cf2aa6 100644 --- a/src/sc/api.cljc +++ b/src/sc/api.cljc @@ -143,9 +143,12 @@ (defn last-ep-id "Returns the id of the last saved Execution Point, in [ep-id cs-id] form. + An optional call-site id can be given to constrain the output Throws an Exception if no Execution Point has been saved." - [] - (i/last-ep-id)) + ([] + (i/last-ep-id)) + ([cs-id] + (i/last-ep-id cs-id))) (defn ep-info "Given an Execution Point Id, diff --git a/src/sc/impl.cljc b/src/sc/impl.cljc index bb83f90..ca7eee5 100644 --- a/src/sc/impl.cljc +++ b/src/sc/impl.cljc @@ -13,19 +13,26 @@ (swap! db/ep-id inc)) (defn last-ep-id* - [db] - (let [eps (get db :execution-points)] + [db cs-id] + (let [get-cs-id #(-> % :sc.ep/code-site :sc.cs/id) + eps (cond->> (get db :execution-points) + cs-id (filter (comp #{cs-id} get-cs-id second)))] (if (empty? eps) (throw (ex-info - "No Execution Point has been saved yet." + (if cs-id + "No Execution Point for Call Site has been saved yet." + "No Execution Point has been saved yet.") {:sc.api.error/error-type - :sc.api.error-types/no-ep-saved-yet})) + :sc.api.error-types/no-ep-saved-yet + :sc.cs/id cs-id})) (let [[epid ep-v] (apply max-key first eps)] - [epid (-> ep-v :sc.ep/code-site :sc.cs/id)])))) + [epid (get-cs-id ep-v)])))) (defn last-ep-id - [] - (last-ep-id* @db/db)) + ([] + (last-ep-id* @db/db nil)) + ([cs-id] + (last-ep-id* @db/db cs-id))) (defn valid-ep-identifier? [v] @@ -209,11 +216,12 @@ spy-pre-eval-logger :sc/spy-ep-pre-eval-logger spy-post-eval-logger :sc/spy-ep-post-eval-logger only-from :sc/called-from + cs-id :sc.cs/id :or {cs-logger-id :sc.api.logging/log-spy-cs spy-pre-eval-logger `sc.api.logging/log-spy-ep-pre-eval spy-post-eval-logger `sc.api.logging/log-spy-ep-post-eval }} opts - cs-id (gen-cs-id) + cs-id (or cs-id (gen-cs-id)) cs-data (make-cs-data opts cs-id expr amp-env amp-form)] (save-cs cs-data) (il/log-cs cs-logger-id cs-data) @@ -257,11 +265,12 @@ brk-pre-eval-logger :sc/brk-ep-pre-eval-logger brk-post-eval-logger :sc/brk-ep-post-eval-logger only-from :sc/called-from + cs-id :sc.cs/id :or {cs-logger-id :sc.api.logging/log-brk-cs brk-pre-eval-logger `sc.api.logging/log-brk-ep-pre-eval brk-post-eval-logger `sc.api.logging/log-brk-ep-post-eval }} opts - cs-id (gen-cs-id) + cs-id (or cs-id (gen-cs-id)) cs-data (make-cs-data opts cs-id expr amp-env amp-form)] (save-cs cs-data) (il/log-cs cs-logger-id cs-data)