mirror of
https://github.com/exaloop/codon.git
synced 2025-06-03 15:03:52 +08:00
* Add JIT engine * More engine updates * Fix takeModule() * Parser JIT support [wip] * Fix class definition * Parser JIT support [wip] * Parser JIT support [wip] * Fix LLVM context conflict * Parser JIT support [wip] * Fix JIT engine * Parser JIT support [wip] * Doc fix * JIT fix * Fix JIT exceptions * Refactor * Add JIT status codes * Add compiler class * Better logging * Better logging * Update .gitignore * Add Jupyter Xeus support * Update JIT * Remove print * Update errors * Fix assert * Fix asserts * Update docgen signature * Update file system interface * Update plugin errors * Use numeric_limits * JIT refactor [wip] * Set JIT flag on LLVMVisitor * Update module opt * JIT imports * First Jupyter integration * Update JIT API to return outputs as string * Capture runtime exception output * Fix libbacktrace build * Initial Jupyter support * Format * Fix print * Support run-mode backtraces * Fix multithreaded backtrace * Update backtraces * Upgrade OpenMP * Add libunwind * Fix build * Fix build * Fix build * Fix build * Fix OpenMP & tests * Use libbacktrace instead of libunwind * Add debug listener * Remove unused include * Remove unused class * Fix backtraces * Update backtrace config * Fix debug info generation * Refactor backtraces * Fix ASAN flag * Fix JIT * Fix JIT backtraces * Fix JIT backtrace * Fix Jupyter, fix xeus build flags * Fix JIT output capture * Fix Jupyter * Fix Jupyter Python support * Add __repr_pretty__ support * Update JIT output capturing * Better backtrace method names * Support plugins in JIT mode Co-authored-by: Ibrahim Numanagić <ibrahimpasa@gmail.com>
45 lines
1.0 KiB
Python
45 lines
1.0 KiB
Python
@pure
|
|
@C
|
|
def seq_is_macos() -> bool: pass
|
|
|
|
# <dlfcn.h>
|
|
from C import dlerror() -> cobj as c_dlerror
|
|
from C import dlopen(cobj, int) -> cobj as c_dlopen
|
|
from C import dlsym(cobj, cobj) -> cobj as c_dlsym
|
|
from C import dlclose(cobj) -> i32 as c_dlclose
|
|
RTLD_NOW = 2
|
|
RTLD_GLOBAL = 8 if seq_is_macos() else 256
|
|
RTLD_LOCAL = 0 if seq_is_macos() else 256
|
|
|
|
def dlext():
|
|
if seq_is_macos():
|
|
return 'dylib'
|
|
else:
|
|
return 'so'
|
|
|
|
@pure
|
|
def dlerror():
|
|
return str.from_ptr(c_dlerror())
|
|
|
|
def dlopen(name: str, flag: int = RTLD_NOW | RTLD_GLOBAL) -> cobj:
|
|
h = c_dlopen(cobj(0) if name == "" else name.c_str(), flag)
|
|
if h == cobj():
|
|
raise CError(dlerror())
|
|
return h
|
|
|
|
def dlsym[Fn](lib, name: str) -> Fn:
|
|
h = cobj()
|
|
if isinstance(lib, str):
|
|
h = dlopen(lib)
|
|
else:
|
|
h = lib
|
|
fn = c_dlsym(h, name.c_str())
|
|
if fn == cobj():
|
|
raise CError(dlerror())
|
|
return Fn(fn)
|
|
|
|
def dlclose(handle: cobj):
|
|
if c_dlclose(handle) != i32(0):
|
|
raise CError(dlerror())
|
|
|