bugfix: compiler errors for explicit initialization of thread local variables; os.nim does not rely on it anymore

This commit is contained in:
Araq
2011-12-23 20:05:08 +01:00
parent 6260757a2a
commit 76f91b90e2
3 changed files with 9 additions and 4 deletions

View File

@@ -92,7 +92,8 @@ type
errCannotInterpretNodeX, errFieldXNotFound, errInvalidConversionFromTypeX,
errAssertionFailed, errCannotGenerateCodeForX, errXRequiresOneArgument,
errUnhandledExceptionX, errCyclicTree, errXisNoMacroOrTemplate,
errXhasSideEffects, errIteratorExpected, errLetNeedsInit, errWrongSymbolX,
errXhasSideEffects, errIteratorExpected, errLetNeedsInit,
errThreadvarCannotInit, errWrongSymbolX,
errUser,
warnCannotOpenFile,
warnOctalEscape, warnXIsNeverRead, warnXmightNotBeenInit,
@@ -321,6 +322,7 @@ const
errXhasSideEffects: "\'$1\' can have side effects",
errIteratorExpected: "iterator within for loop context expected",
errLetNeedsInit: "'let' symbol requires an initialization",
errThreadvarCannotInit: "a thread var cannot be initialized explicitly",
errWrongSymbolX: "usage of \'$1\' is a user-defined error",
errUser: "$1",
warnCannotOpenFile: "cannot open \'$1\' [CannotOpenFile]",

View File

@@ -269,7 +269,8 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
if def != nil and def.kind != nkEmpty:
# this is only needed for the evaluation pass:
v.ast = def
if a.kind != nkVarTuple:
if sfThread in v.flags: LocalError(def.info, errThreadvarCannotInit)
if a.kind != nkVarTuple:
v.typ = typ
b = newNodeI(nkIdentDefs, a.info)
addSon(b, newSymNode(v))

View File

@@ -694,8 +694,8 @@ proc execShellCmd*(command: string): int {.rtl, extern: "nos$1".} =
# iterator depends on ``environment``.
var
envComputed {.threadvar.}: bool = false
environment {.threadvar.}: seq[string] = @[]
envComputed {.threadvar.}: bool
environment {.threadvar.}: seq[string]
when defined(windows):
# because we support Windows GUI applications, things get really
@@ -705,6 +705,7 @@ when defined(windows):
proc getEnvVarsC() =
if not envComputed:
environment = @[]
var
env = getEnvironmentStringsA()
e = env
@@ -738,6 +739,7 @@ else:
proc getEnvVarsC() =
# retrieves the variables of char** env of C's main proc
if not envComputed:
environment = @[]
when useNSGetEnviron:
var gEnv = NSGetEnviron()[]
var i = 0