DLL generation may work again

This commit is contained in:
Araq
2011-11-02 01:25:17 +01:00
parent 95df3ee1ce
commit 84c473a890
5 changed files with 30 additions and 9 deletions

View File

@@ -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.} =

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,7 @@
discard """
output: "AngelikaAnneAnnaAnkaAnja"
"""
for w in items(["Angelika", "Anne", "Anna", "Anka", "Anja"]):
write(stdout, w) #OUT AngelikaAnneAnnaAnkaAnja

View File

@@ -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