I went through the compiler code, it has to do with a bad local binding 
expression.

It crashes in the same way in the REPL with this minimal defrecord:

(defrecord NoopJob [name job-controller-channel env job-state parameters 
job-output]
  impl/GatewayJob
  (start-job! [this]
    (log/error "NoopJob job died unexpectedly !")))

No try catch, no core.async, ...
So there's something going on in log/error macro expansion versus the 
defrecord expansion.

I attached two files, the macro expansions of defrecord and the log/error 
macro.

Alex if you prefer I can open a ticket. If nothing obvious comes out that's 
were it will end up anyway.
I'll toy with the combined macro expanded code this weekend to see if I can 
narrow this a bit more.

I have been using the same logging API for years now (since 2009). I really 
want to know what's broken.
I have two dozen projects to upgrade to 1.9 :) It's bizarre at best.

Thank you,
Luc P.

On Saturday, 30 December 2017 00:17:47 UTC, Luc wrote:
>
> Hi Alex,
>
> here it is, I did not get through the compiler source code yet, it might 
> be obvious to you:
>
> java.lang.UnsupportedOperationException: Can't type hint a primitive 
> local, compiling:(yabug/jobs/noop.clj:21:9)
> Exception in thread "main" java.lang.UnsupportedOperationException: Can't 
> type hint a primitive local, compiling:(yabug/jobs/noop.clj:21:9)
>     at clojure.lang.Compiler.analyze(Compiler.java:6792)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$VectorExpr.parse(Compiler.java:3253)
>     at clojure.lang.Compiler.analyze(Compiler.java:6775)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3881)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7005)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6991)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3881)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7005)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6991)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6100)
>     at clojure.lang.Compiler$TryExpr$Parser.parse(Compiler.java:2334)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7003)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6100)
>     at clojure.lang.Compiler$NewInstanceMethod.parse(Compiler.java:8431)
>     at clojure.lang.Compiler$NewInstanceExpr.build(Compiler.java:7937)
>     at 
> clojure.lang.Compiler$NewInstanceExpr$DeftypeParser.parse(Compiler.java:7813)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7003)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6100)
>     at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6420)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7003)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6100)
>     at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5460)
>     at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4022)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7001)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3813)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7005)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6330)
>     at clojure.lang.Compiler.analyzeSeq(Compiler.java:7003)
>     at clojure.lang.Compiler.analyze(Compiler.java:6773)
>     at clojure.lang.Compiler.analyze(Compiler.java:6729)
>     at clojure.lang.Compiler.compile1(Compiler.java:7604)
>     at clojure.lang.Compiler.compile(Compiler.java:7676)
>     at clojure.lang.RT.compile(RT.java:413)
>     at clojure.lang.RT.load(RT.java:458)
>     at clojure.lang.RT.load(RT.java:426)
>     at clojure.core$load$fn__6548.invoke(core.clj:6046)
>     at clojure.core$load.invokeStatic(core.clj:6045)
>     at clojure.core$load.doInvoke(core.clj:6029)
>     at clojure.lang.RestFn.invoke(RestFn.java:408)
>     at clojure.core$load_one.invokeStatic(core.clj:5848)
>     at clojure.core$compile$fn__6553.invoke(core.clj:6056)
>     at clojure.core$compile.invokeStatic(core.clj:6056)
>     at clojure.core$compile.invoke(core.clj:6048)
>     at user$eval164$fn__173.invoke(form-init6735162608711470447.clj:1)
>     at user$eval164.invokeStatic(form-init6735162608711470447.clj:1)
>     at user$eval164.invoke(form-init6735162608711470447.clj:1)
>     at clojure.lang.Compiler.eval(Compiler.java:7062)
>     at clojure.lang.Compiler.eval(Compiler.java:7052)
>     at clojure.lang.Compiler.eval(Compiler.java:7052)
>     at clojure.lang.Compiler.load(Compiler.java:7514)
>     at clojure.lang.Compiler.loadFile(Compiler.java:7452)
>     at clojure.main$load_script.invokeStatic(main.clj:278)
>     at clojure.main$init_opt.invokeStatic(main.clj:280)
>     at clojure.main$init_opt.invoke(main.clj:280)
>     at clojure.main$initialize.invokeStatic(main.clj:311)
>     at clojure.main$null_opt.invokeStatic(main.clj:345)
>     at clojure.main$null_opt.invoke(main.clj:342)
>     at clojure.main$main.invokeStatic(main.clj:424)
>     at clojure.main$main.doInvoke(main.clj:387)
>     at clojure.lang.RestFn.applyTo(RestFn.java:137)
>     at clojure.lang.Var.applyTo(Var.java:702)
>     at clojure.main.main(main.java:37)
> Caused by: java.lang.UnsupportedOperationException: Can't type hint a 
> primitive local
>     at clojure.lang.Compiler$LocalBindingExpr.<init>(Compiler.java:5999)
>     at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7183)
>     at clojure.lang.Compiler.analyze(Compiler.java:6752)
>
> Will get this up and running this weekend to see if it can be reproduced 
> at runtime and post the result here.
> I need to revive some setups, it's a project that had been put on ice for 
> a while.
>
> Thank you, Happy New Year,
> Luc
>
> On Friday, 29 December 2017 01:02:51 UTC, Alex Miller wrote:
>>
>> What’s the full stack trace on the original exception? (Or if same repros 
>> without aot)?
>
>

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
(let*
 []
 (clojure.core/declare ->NoopJob)
 (clojure.core/declare map->NoopJob)
 (deftype*
  yabug.jobs.noop/NoopJob
  yabug.jobs.noop.NoopJob
  [name
   job-controller-channel
   env
   job-state
   parameters
   job-output
   __meta
   __extmap
   __hash
   __hasheq]
  :implements
  [yabug.gateway.protocols.GatewayJob
   clojure.lang.IRecord
   clojure.lang.IHashEq
   clojure.lang.IObj
   clojure.lang.ILookup
   clojure.lang.IKeywordLookup
   clojure.lang.IPersistentMap
   java.util.Map
   java.io.Serializable]
  (clojure.core/entrySet
   [this__7512__auto__]
   (clojure.core/set this__7512__auto__))
  (clojure.core/values
   [this__7511__auto__]
   (clojure.core/vals this__7511__auto__))
  (clojure.core/keySet
   [this__7510__auto__]
   (clojure.core/set (clojure.core/keys this__7510__auto__)))
  (clojure.core/clear
   [this__7509__auto__]
   (throw (java.lang.UnsupportedOperationException.)))
  (clojure.core/putAll
   [this__7507__auto__ m__7508__auto__]
   (throw (java.lang.UnsupportedOperationException.
)))
  (clojure.core/remove
   [this__7505__auto__ k__7506__auto__]
   (throw (java.lang.UnsupportedOperationException.)))
  (clojure.core/put
   [this__7502__auto__ k__7503__auto__ v__7504__auto__]
   (throw (java.lang.UnsupportedOperationException.)))
  (clojure.core/get
   [this__7500__auto__ k__7501__auto__]
   (.valAt this__7500__auto__ k__7501__auto__))
  (clojure.core/containsValue
   [this__7498__auto__ v__7499__auto__]
   (clojure.core/boolean
    (clojure.core/some
     #{v__7499__auto__}
     (clojure.core/vals this__7498__auto__))))
  (clojure.core/isEmpty
   [this__7497__auto__]
   (clojure.core/= 0 (.count this__7497__auto__)))
  (clojure.core/size [this__7496__auto__] (.count this__7496__auto__))
  (clojure.core/without
   [this__7494__auto__ k__7495__auto__]
   (if
    (clojure.core/contains?
     #{:name :env :job-output :job-controller-channel :job-state
       :parameters}
     k__7495__auto__)
    (clojure.core/dissoc
     (clojure.core/with-meta
      (clojure.core/into {} this__7494__auto__
)
      __meta)
     k__7495__auto__)
    (new
     NoopJob
     name
     job-controller-channel
     env
     job-state
     parameters
     job-output
     __meta
     (clojure.core/not-empty
      (clojure.core/dissoc __extmap k__7495__auto__)))))
  (clojure.core/assoc
   [this__7492__auto__ k__7493__auto__ G__12742]
   (clojure.core/condp
    clojure.core/identical?
    k__7493__auto__
    :name
    (new
     NoopJob
     G__12742
     job-controller-channel
     env
     job-state
     parameters
     job-output
     __meta
     __extmap)
    :job-controller-channel
    (new
     NoopJob
     name
     G__12742
     env
     job-state
     parameters
     job-output
     __meta
     __extmap)
    :env
    (new
     NoopJob
     name
     job-controller-channel
     G__12742
     job-state
     parameters
     job-output
     __meta
     __extmap)
    :job-state
    (new
     NoopJob
     name
     job-controller-channel
     env
     G__12742
     parameters
     job-output
     __meta
     __extmap)
   
:parameters
    (new
     NoopJob
     name
     job-controller-channel
     env
     job-state
     G__12742
     job-output
     __meta
     __extmap)
    :job-output
    (new
     NoopJob
     name
     job-controller-channel
     env
     job-state
     parameters
     G__12742
     __meta
     __extmap)
    (new
     NoopJob
     name
     job-controller-channel
     env
     job-state
     parameters
     job-output
     __meta
     (clojure.core/assoc __extmap k__7493__auto__ G__12742))))
  (clojure.core/iterator
   [G__12742]
   (clojure.lang.RecordIterator.
    G__12742
    [:name
     :job-controller-channel
     :env
     :job-state
     :parameters
     :job-output]
    (clojure.lang.RT/iter __extmap)))
  (clojure.core/seq
   [this__7491__auto__]
   (clojure.core/seq
    (clojure.core/concat
     [(clojure.lang.MapEntry/create :name name)
      (clojure.lang.MapEntry/create
       :job-controller-channel
       job-controller-channel)
      (clojure.lang.MapEntry/create :env env)
      (clojure.lang.MapEntry/create
 :job-state job-state)
      (clojure.lang.MapEntry/create :parameters parameters)
      (clojure.lang.MapEntry/create :job-output job-output)]
     __extmap)))
  (clojure.core/entryAt
   [this__7487__auto__ k__7488__auto__]
   (clojure.core/let
    [v__7489__auto__
     (.valAt this__7487__auto__ k__7488__auto__ this__7487__auto__)]
    (clojure.core/when-not
     (clojure.core/identical? this__7487__auto__ v__7489__auto__)
     (clojure.lang.MapEntry/create k__7488__auto__ v__7489__auto__))))
  (clojure.core/containsKey
   [this__7485__auto__ k__7486__auto__]
   (clojure.core/not
    (clojure.core/identical?
     this__7485__auto__
     (.valAt this__7485__auto__ k__7486__auto__ this__7485__auto__))))
  (clojure.core/equiv
   [this__7484__auto__ G__12742]
   (clojure.core/boolean
    (clojure.core/or
     (clojure.core/identical? this__7484__auto__ G__12742)
     (clojure.core/when
      (clojure.core/identical?
       (clojure.core/class this__7484__auto__)
       (clojure.core/class G__12742))
      (clojure.core/let

       [G__12742 G__12742]
       (clojure.core/and
        (clojure.core/= name (. G__12742 -name))
        (clojure.core/=
         job-controller-channel
         (. G__12742 -job-controller-channel))
        (clojure.core/= env (. G__12742 -env))
        (clojure.core/= job-state (. G__12742 -job-state))
        (clojure.core/= parameters (. G__12742 -parameters))
        (clojure.core/= job-output (. G__12742 -job-output))
        (clojure.core/= __extmap (. G__12742 __extmap))))))))
  (clojure.core/cons
   [this__7482__auto__ e__7483__auto__]
   (#'clojure.core/imap-cons this__7482__auto__ e__7483__auto__))
  (clojure.core/empty
   [this__7481__auto__]
   (throw
    (java.lang.UnsupportedOperationException.
     (clojure.core/str
      "Can't create empty: "
      "yabug.jobs.noop.NoopJob"))))
  (clojure.core/count
   [this__7480__auto__]
   (clojure.core/+ 6 (clojure.core/count __extmap)))
  (clojure.core/getLookupThunk
   [this__7478__auto__ k__7479__auto__]
   (clojure.core/let
    [gclass (clojure.core/class
 this__7478__auto__)]
    (clojure.core/case
     k__7479__auto__
     :name
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
        (. gtarget -name)
        thunk)))
     :job-controller-channel
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
        (. gtarget -job-controller-channel)
        thunk)))
     :env
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
        (. gtarget -env)
        thunk)))
     :job-state
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
       
(. gtarget -job-state)
        thunk)))
     :parameters
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
        (. gtarget -parameters)
        thunk)))
     :job-output
     (clojure.core/reify
      clojure.lang.ILookupThunk
      (clojure.core/get
       [thunk gtarget]
       (if
        (clojure.core/identical? (clojure.core/class gtarget) gclass)
        (. gtarget -job-output)
        thunk)))
     nil)))
  (clojure.core/valAt
   [this__7475__auto__ k__7476__auto__ else__7477__auto__]
   (clojure.core/case
    k__7476__auto__
    :name
    name
    :job-controller-channel
    job-controller-channel
    :env
    env
    :job-state
    job-state
    :parameters
    parameters
    :job-output
    job-output
    (clojure.core/get __extmap k__7476__auto__ else__7477__auto__)))
  (clojure.core/valAt
   [this__7473__auto__ k__7474__auto__]
   (.valAt this__7473__auto__ k__7474__auto__
 nil))
  (clojure.core/withMeta
   [this__7472__auto__ G__12742]
   (new
    NoopJob
    name
    job-controller-channel
    env
    job-state
    parameters
    job-output
    G__12742
    __extmap
    __hash
    __hasheq))
  (clojure.core/meta [this__7471__auto__] __meta)
  (clojure.core/equals
   [this__7470__auto__ G__12742]
   (clojure.lang.APersistentMap/mapEquals this__7470__auto__ G__12742))
  (clojure.core/hashCode
   [this__7467__auto__]
   (clojure.core/let
    [hash__7468__auto__ __hash]
    (if
     (clojure.core/zero? hash__7468__auto__)
     (clojure.core/let
      [h__7469__auto__
       (clojure.lang.APersistentMap/mapHash this__7467__auto__)]
      (set! __hash h__7469__auto__)
      h__7469__auto__)
     hash__7468__auto__)))
  (clojure.core/hasheq
   [this__7464__auto__]
   (clojure.core/let
    [hq__7465__auto__ __hasheq]
    (if
     (clojure.core/zero? hq__7465__auto__)
     (clojure.core/let
      [h__7466__auto__
       (clojure.core/int
        (clojure.core/bit-xor
         -453544685

         (clojure.lang.APersistentMap/mapHasheq this__7464__auto__)))]
      (set! __hasheq h__7466__auto__)
      h__7466__auto__)
     hq__7465__auto__)))
  (start-job! [this] (log/error "NoopJob job died unexpectedly !")))
 (clojure.core/import yabug.jobs.noop.NoopJob)
 (clojure.core/defn
  ->NoopJob
  "Positional factory function for class yabug.jobs.noop.NoopJob."
  [name job-controller-channel env job-state parameters job-output]
  (new
   yabug.jobs.noop.NoopJob
   name
   job-controller-channel
   env
   job-state
   parameters
   job-output))
 (clojure.core/defn
  map->NoopJob
  "Factory function for class yabug.jobs.noop.NoopJob, taking a map of keywords 
to field values."
  ([m__7585__auto__]
   (yabug.jobs.noop.NoopJob/create
    (if
     (clojure.core/instance?
      clojure.lang.MapEquivalence
      m__7585__auto__)
     m__7585__auto__
     (clojure.core/into {} m__7585__auto__)))))
 yabug.jobs.noop.NoopJob)
(yabug.services.logger/log*
 #object[clojure.lang.Namespace 0x3b0069e1 "yabug.jobs.noop"]
 :error
 "NoopJob job died unexpectedly !"
 (yabug.services.logger/environment))

Reply via email to