diff options
-rwxr-xr-x | lib/system/gc.nim | 6 | ||||
-rwxr-xr-x | lib/system/threads.nim | 12 | ||||
-rw-r--r-- | tests/accept/run/tcnstseq2.nim | 12 | ||||
-rw-r--r-- | tests/accept/run/tcnstseq3.nim | 7 | ||||
-rwxr-xr-x | todo.txt | 2 |
5 files changed, 30 insertions, 9 deletions
diff --git a/lib/system/gc.nim b/lib/system/gc.nim index 293c6eeea..351f0df9b 100755 --- a/lib/system/gc.nim +++ b/lib/system/gc.nim @@ -63,10 +63,10 @@ type region: TMemRegion # garbage collected region stat: TGcStat -when not defined(useNimRtl): - var - gch {.rtlThreadVar.}: TGcHeap +var + gch {.rtlThreadVar.}: TGcHeap +when not defined(useNimRtl): InstantiateForRegion(gch.region) proc acquire(gch: var TGcHeap) {.inline.} = diff --git a/lib/system/threads.nim b/lib/system/threads.nim index 00ee11aa3..c6b6b4d7c 100755 --- a/lib/system/threads.nim +++ b/lib/system/threads.nim @@ -179,14 +179,15 @@ type nil # XXX it'd be more efficient to not use a global variable for the -# thread storage slot, but to rely on the implementation to assign slot 0 +# thread storage slot, but to rely on the implementation to assign slot X # for us... ;-) var globalsSlot = ThreadVarAlloc() #const globalsSlot = TThreadVarSlot(0) #sysAssert checkSlot.int == globalsSlot.int -proc GetThreadLocalVars(): pointer {.compilerRtl, inl.} = - result = addr(cast[PGcThread](ThreadVarGetValue(globalsSlot)).tls) +when emulatedThreadVars: + proc GetThreadLocalVars(): pointer {.compilerRtl, inl.} = + result = addr(cast[PGcThread](ThreadVarGetValue(globalsSlot)).tls) when useStackMaskHack: proc MaskStackPointer(offset: int): pointer {.compilerRtl, inl.} = @@ -198,12 +199,13 @@ when useStackMaskHack: # create for the main thread. Note: do not insert this data into the list # of all threads; it's not to be stopped etc. when not defined(useNimRtl): + when not useStackMaskHack: var mainThread: TGcThread ThreadVarSetValue(globalsSlot, addr(mainThread)) initStackBottom() initGC() - + when emulatedThreadVars: if NimThreadVarsSize() > sizeof(TThreadLocalStorage): echo "too large thread local storage size requested" @@ -264,7 +266,7 @@ when not defined(boehmgc) and not hasSharedHeap: proc deallocOsPages() template ThreadProcWrapperBody(closure: expr) = - ThreadVarSetValue(globalsSlot, closure) + when defined(globalsSlot): ThreadVarSetValue(globalsSlot, closure) var t = cast[ptr TThread[TArg]](closure) when useStackMaskHack: var tls: TThreadLocalStorage diff --git a/tests/accept/run/tcnstseq2.nim b/tests/accept/run/tcnstseq2.nim new file mode 100644 index 000000000..1a27b2ba7 --- /dev/null +++ b/tests/accept/run/tcnstseq2.nim @@ -0,0 +1,12 @@ +discard """ + output: "AngelikaAnneAnnaAnkaAnja" +""" + +const + myWords = @["Angelika", "Anne", "Anna", "Anka", "Anja"] + +for i in 0 .. high(myWords): + write(stdout, myWords[i]) #OUT AngelikaAnneAnnaAnkaAnja + + + diff --git a/tests/accept/run/tcnstseq3.nim b/tests/accept/run/tcnstseq3.nim new file mode 100644 index 000000000..e59516e85 --- /dev/null +++ b/tests/accept/run/tcnstseq3.nim @@ -0,0 +1,7 @@ +discard """ + output: "AngelikaAnneAnnaAnkaAnja" +""" + +for w in items(["Angelika", "Anne", "Anna", "Anka", "Anja"]): + write(stdout, w) #OUT AngelikaAnneAnnaAnkaAnja + diff --git a/todo.txt b/todo.txt index ac174586d..7b4d6c062 100755 --- a/todo.txt +++ b/todo.txt @@ -2,7 +2,7 @@ Version 0.8.14 ============== - bug: s[1..n] = @[] produces wrong C code -- bug: DLL generation is broken; write at least a basic test +- test suite should contain DLL tests - optimize unused constants away (affected by HLO) - fix actors.nim; test with different thread var implementations - dead code elim for JS backend |