1
0
mirror of https://github.com/exaloop/codon.git synced 2025-06-03 15:03:52 +08:00
codon/stdlib/internal/dlopen.codon
A. R. Shajii 166e1ad455
JIT (#6)
* 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>
2021-11-30 11:50:28 -05:00

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