Hi,

finally got some time to dig deeper. The minimal code to reproduce this has 
shrunk:

(defprotocol Anonymous
  (start-job! [this]))

(defrecord NoopJob []
  Anonymous
  (start-job! [this]
    (yabug.services.logger/environment)))

The environment macro was called by log/error but not by the other severity 
level macros.
The error macro within a defrecord is the only case where it fails.

This is the environment macro definition:

(defmacro environment
  "Expands to code that generates a map of locals: names to values"
  []
  (clojure.pprint/pprint (macroexpand `(zipmap '~(keys &env) [~@(keys 
&env)])))
  `(zipmap '~(keys &env) [~@(keys &env)]))

I added the macroexpand in the macro to get what it expands to in the 
context of the defrecord
at compile time.
Outside of the defrecord the compiler does not complain (let, ...)). The 
protocol by itself does not seem
to be a significant factor. I got this at different places under different 
protocols.

This is the 1.9 macro expansion outputted at compile time before ending up 
with exception while evaluating
the resulting code:

(clojure.core/zipmap
 '(__hash __meta this __hasheq __extmap)
 [__hash __meta this __hasheq __extmap])

This is the 1.8 macroexpansion of this macro which is a bit shorter, 
there's seem to be less context generated by the defrecord macro 
expansion:

(clojure.core/zipmap '(__meta this __extmap) [__meta this __extmap])

The expansion of the defrecord context is slightly bigger but nothing hits 
me when I compare both expanded vectors at the end.
I am assuming that this the expression that the compiler cannot evaluate in 
1.9 since it the error originates from the VectorExpr
class.
Is there anything obvious on with the evaluation of the last vector in the 
1.9 expansion that would explain this error ?
I don't see it.

Just to make things more puzzling the expansion literally works in the 1.9 
REPL:

=> (defrecord NoopJob []
     impl/GatewayJob
     (start-job! [this]
       (clojure.core/zipmap
         '(__hash __meta this __hasheq __extmap) 
         [__hash __meta this __hasheq __extmap])))
yabug.jobs.noop.NoopJob

Grr...

Will sleep on it and toy with it tomorrow by expanding a bit the test 
cases. It's nearly 22:00 Morocco time here.
I need a break and some sleep.

Luc P.

On Saturday, 30 December 2017 01:00:05 UTC, Alex Miller wrote:
>
> On Fri, Dec 29, 2017 at 6:17 PM, Luc <lprefo...@softaddicts.ca 
> <javascript:>> wrote:
>  
>
>> 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*)
>>
>
> What's the code here? ^^
>
>  
>

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

Reply via email to