mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 14:00:35 +00:00
DLL generation may work again
This commit is contained in:
@@ -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.} =
|
||||
|
||||
@@ -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
|
||||
|
||||
12
tests/accept/run/tcnstseq2.nim
Normal file
12
tests/accept/run/tcnstseq2.nim
Normal 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
|
||||
|
||||
|
||||
|
||||
7
tests/accept/run/tcnstseq3.nim
Normal file
7
tests/accept/run/tcnstseq3.nim
Normal file
@@ -0,0 +1,7 @@
|
||||
discard """
|
||||
output: "AngelikaAnneAnnaAnkaAnja"
|
||||
"""
|
||||
|
||||
for w in items(["Angelika", "Anne", "Anna", "Anka", "Anja"]):
|
||||
write(stdout, w) #OUT AngelikaAnneAnnaAnkaAnja
|
||||
|
||||
2
todo.txt
2
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
|
||||
|
||||
Reference in New Issue
Block a user