Great, but afaict, it's not a jit. It is using llvm to aot-compile Python code. Decorators are called when their respective functions are compiled, not when they are called.
- if you just `@jit`, it will create a megamorphic function with specialisations generated at runtime
- if you pass a signature to `@jit`, it will compile a monomorphic function during loading
In this sample, when the function itself is called (not when it's decorated), analysis runs followed by LLVM codegen and execution. The examples in the blog post are minimal, but can be trivially extended to cache the JIT step when needed, specialize on runtime argument types or values, etc.
If this isn't JIT, I'm curious to hear what you consider to be JIT?