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))