def compile(self, sig): with self._compile_lock(): # FIXME this is mostly duplicated from Overloaded flags = self.flags args, return_type = sigutils.normalize_signature(sig) # Don't recompile if signature already exist. existing = self.overloads.get(tuple(args)) if existing is not None: return existing.entry_point assert not flags.enable_looplift, "Enable looplift flags is on" cres = compiler.compile_bytecode(typingctx=self.typingctx, targetctx=self.targetctx, bc=self.bytecode, args=args, return_type=return_type, flags=flags, locals=self.locals) # Check typing error if object mode is used if cres.typing_error is not None and not flags.enable_pyobject: raise cres.typing_error self.add_overload(cres) return cres.entry_point
def compile(self, sig): with self._compile_lock: # XXX this is mostly duplicated from Dispatcher. flags = self.flags args, return_type = sigutils.normalize_signature(sig) # Don't recompile if signature already exists # (e.g. if another thread compiled it before we got the lock) existing = self.overloads.get(tuple(args)) if existing is not None: return existing.entry_point assert not flags.enable_looplift, "Enable looplift flags is on" cres = compiler.compile_bytecode(typingctx=self.typingctx, targetctx=self.targetctx, bc=self.bytecode, args=args, return_type=return_type, flags=flags, locals=self.locals, lifted=(), lifted_from=self.lifted_from) # Check typing error if object mode is used if cres.typing_error is not None and not flags.enable_pyobject: raise cres.typing_error self.add_overload(cres) return cres.entry_point