summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xlib/system/gc.nim6
-rwxr-xr-xlib/system/threads.nim12
-rw-r--r--tests/accept/run/tcnstseq2.nim12
-rw-r--r--tests/accept/run/tcnstseq3.nim7
-rwxr-xr-xtodo.txt2
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