diff options
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/dyncalls.nim | 36 | ||||
-rw-r--r-- | lib/system/jssys.nim | 12 | ||||
-rw-r--r-- | lib/system/threads.nim | 3 |
3 files changed, 12 insertions, 39 deletions
diff --git a/lib/system/dyncalls.nim b/lib/system/dyncalls.nim index fe98b1e6f..908aa551b 100644 --- a/lib/system/dyncalls.nim +++ b/lib/system/dyncalls.nim @@ -107,42 +107,6 @@ elif defined(windows) or defined(dos): result = getProcAddress(cast[THINSTANCE](lib), name) if result == nil: procAddrError(name) -elif defined(mac): - # - # ======================================================================= - # Native Mac OS X / Darwin Implementation - # ======================================================================= - # - {.error: "no implementation for dyncalls yet".} - - proc nimUnloadLibrary(lib: LibHandle) = - NSUnLinkModule(NSModule(lib), NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES) - - var - dyld_present {.importc: "_dyld_present", header: "<dyld.h>".}: int - - proc nimLoadLibrary(path: string): LibHandle = - var - img: NSObjectFileImage - ret: NSObjectFileImageReturnCode - modul: NSModule - # this would be a rare case, but prevents crashing if it happens - result = nil - if dyld_present != 0: - ret = NSCreateObjectFileImageFromFile(path, addr(img)) - if ret == NSObjectFileImageSuccess: - modul = NSLinkModule(img, path, NSLINKMODULE_OPTION_PRIVATE or - NSLINKMODULE_OPTION_RETURN_ON_ERROR) - NSDestroyObjectFileImage(img) - result = LibHandle(modul) - - proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr = - var - nss: NSSymbol - nss = NSLookupSymbolInModule(NSModule(lib), name) - result = ProcAddr(NSAddressOfSymbol(nss)) - if result == nil: ProcAddrError(name) - else: {.error: "no implementation for dyncalls".} diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim index eb6080d38..5bcddc5e6 100644 --- a/lib/system/jssys.nim +++ b/lib/system/jssys.nim @@ -532,7 +532,7 @@ proc nimMax(a, b: int): int {.compilerproc.} = return if a >= b: a else: b type NimString = string # hack for hti.nim include "system/hti" -type JSRef = int # Fake type. +type JSRef = ref RootObj # Fake type. proc isFatPointer(ti: PNimType): bool = # This has to be consistent with the code generator! @@ -569,8 +569,14 @@ proc nimCopy(dest, src: JSRef, ti: PNimType): JSRef = asm "`result` = [`src`[0], `src`[1]];" of tySet: asm """ - `result` = {}; - for (var key in `src`) { `result`[key] = `src`[key]; } + if (`dest` === null || `dest` === undefined) { + `dest` = {}; + } + else { + for (var key in `dest`) { delete `dest`[key]; } + } + for (var key in `src`) { `dest`[key] = `src`[key]; } + `result` = `dest`; """ of tyTuple, tyObject: if ti.base != nil: result = nimCopy(dest, src, ti.base) diff --git a/lib/system/threads.nim b/lib/system/threads.nim index c5de841f8..bdb737e35 100644 --- a/lib/system/threads.nim +++ b/lib/system/threads.nim @@ -455,6 +455,9 @@ else: cpusetIncl(cpu.cint, s) setAffinity(t.sys, sizeof(s), s) +proc createThread*(t: var Thread[void], tp: proc () {.thread.}) = + createThread[void](t, tp) + proc threadId*[TArg](t: var Thread[TArg]): ThreadId[TArg] {.inline.} = ## returns the thread ID of `t`. result = addr(t) |