diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/ftpclient.nim | 67 | ||||
-rw-r--r-- | lib/pure/ropes.nim | 4 | ||||
-rw-r--r-- | lib/pure/subexes.nim | 3 | ||||
-rw-r--r-- | lib/system.nim | 4 | ||||
-rw-r--r-- | lib/system/excpt.nim | 6 |
5 files changed, 43 insertions, 41 deletions
diff --git a/lib/pure/ftpclient.nim b/lib/pure/ftpclient.nim index 53f6688b9..d4922d1ab 100644 --- a/lib/pure/ftpclient.nim +++ b/lib/pure/ftpclient.nim @@ -588,39 +588,40 @@ proc register*(d: PDispatcher, ftp: PAsyncFTPClient): PDelegate {.discardable.} return ftp.disp.register(ftp.asyncCSock) when isMainModule: - var d = newDispatcher() - let hev = - proc (ftp: PAsyncFTPClient, event: TFTPEvent) = - case event.typ - of EvStore: - echo("Upload finished!") - ftp.retrFile("payload.JPG", "payload2.JPG", async = true) - of EvTransferProgress: - var time: int64 = -1 - if event.speed != 0: - time = (event.bytesTotal - event.bytesFinished) div event.speed - echo(event.currentJob) - echo(event.speed div 1000, " kb/s. - ", - event.bytesFinished, "/", event.bytesTotal, - " - ", time, " seconds") - echo(d.len) - of EvRetr: - echo("Download finished!") - ftp.close() - echo d.len - else: assert(false) - var ftp = asyncFTPClient("picheta.me", user = "test", pass = "asf", handleEvent = hev) - - d.register(ftp) - d.len.echo() - ftp.connect() - echo "connected" - ftp.store("payload.JPG", "payload.JPG", async = true) - d.len.echo() - echo "uploading..." - while true: - if not d.poll(): break - + proc main = + var d = newDispatcher() + let hev = + proc (ftp: PAsyncFTPClient, event: TFTPEvent) = + case event.typ + of EvStore: + echo("Upload finished!") + ftp.retrFile("payload.JPG", "payload2.JPG", async = true) + of EvTransferProgress: + var time: int64 = -1 + if event.speed != 0: + time = (event.bytesTotal - event.bytesFinished) div event.speed + echo(event.currentJob) + echo(event.speed div 1000, " kb/s. - ", + event.bytesFinished, "/", event.bytesTotal, + " - ", time, " seconds") + echo(d.len) + of EvRetr: + echo("Download finished!") + ftp.close() + echo d.len + else: assert(false) + var ftp = asyncFTPClient("picheta.me", user = "test", pass = "asf", handleEvent = hev) + + d.register(ftp) + d.len.echo() + ftp.connect() + echo "connected" + ftp.store("payload.JPG", "payload.JPG", async = true) + d.len.echo() + echo "uploading..." + while true: + if not d.poll(): break + main() when isMainModule and false: var ftp = ftpClient("picheta.me", user = "asdasd", pass = "asfwq") diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index 4a6c3f530..eb3792bce 100644 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -58,8 +58,8 @@ proc newRope(data: string): PRope = result.data = data var - cache: PRope # the root of the cache tree - N: PRope # dummy rope needed for splay algorithm + cache {.threadvar.}: PRope # the root of the cache tree + N {.threadvar.}: PRope # dummy rope needed for splay algorithm when countCacheMisses: var misses, hits: int diff --git a/lib/pure/subexes.nim b/lib/pure/subexes.nim index 92797744a..ed87610d6 100644 --- a/lib/pure/subexes.nim +++ b/lib/pure/subexes.nim @@ -84,7 +84,8 @@ proc getFormatArg(p: var TFormatParser, a: openArray[string]): int = if result >=% a.len: raiseInvalidFormat("index out of bounds: " & $result) p.i = i -proc scanDollar(p: var TFormatParser, a: openarray[string], s: var string) +proc scanDollar(p: var TFormatParser, a: openarray[string], s: var string) {. + noSideEffect.} proc emitChar(p: var TFormatParser, x: var string, ch: char) {.inline.} = x.add(ch) diff --git a/lib/system.nim b/lib/system.nim index 66eda5741..3dc7e308e 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -2567,11 +2567,11 @@ when not defined(JS): #and not defined(NimrodVM): include "system/assign" include "system/repr" - proc getCurrentException*(): ref E_Base {.compilerRtl, inl.} = + proc getCurrentException*(): ref E_Base {.compilerRtl, inl, gcsafe.} = ## retrieves the current exception; if there is none, nil is returned. result = currException - proc getCurrentExceptionMsg*(): string {.inline.} = + proc getCurrentExceptionMsg*(): string {.inline, gcsafe.} = ## retrieves the error message that was attached to the current ## exception; if there is none, "" is returned. var e = getCurrentException() diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index c3586be0f..3c5436afb 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -38,11 +38,11 @@ proc chckRangeF(x, a, b: float): float {.inline, compilerproc, gcsafe.} proc chckNil(p: pointer) {.noinline, compilerproc, gcsafe.} var - framePtr {.rtlThreadVar.}: PFrame - excHandler {.rtlThreadVar.}: PSafePoint + framePtr {.threadvar.}: PFrame + excHandler {.threadvar.}: PSafePoint # list of exception handlers # a global variable for the root of all try blocks - currException {.rtlThreadVar.}: ref E_Base + currException {.threadvar.}: ref E_Base proc popFrame {.compilerRtl, inl.} = framePtr = framePtr.prev |