diff options
-rw-r--r-- | compiler/injectdestructors.nim | 4 | ||||
-rw-r--r-- | compiler/lambdalifting.nim | 2 | ||||
-rw-r--r-- | lib/pure/asyncmacro.nim | 11 |
3 files changed, 8 insertions, 9 deletions
diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 2f883a8b3..a8a2cf97f 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -154,7 +154,7 @@ type uninit: IntSet # set of uninit'ed vars uninitComputed: bool -const toDebug = "" # "serverNimAsyncContinue" +const toDebug = "" # "server" # "serverNimAsyncContinue" template dbg(body) = when toDebug.len > 0: @@ -311,6 +311,8 @@ proc checkForErrorPragma(c: Con; t: PType; ri: PNode; opname: string) = m.add "; try to make " m.add renderTree(ri) m.add " a 'sink' parameter" + m.add "; routine: " + m.add c.owner.name.s localError(c.graph.config, ri.info, errGenerated, m) proc makePtrType(c: Con, baseType: PType): PType = diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index 726a64d21..6d87444ec 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -344,7 +344,7 @@ proc createUpField(c: var DetectionPass; dest, dep: PSym; info: TLineInfo) = # with cycles properly, so it's better to produce a weak ref (=ptr) here. # This seems to be generally correct but since it's a bit risky it's only # enabled for gcDestructors. - let fieldType = if c.graph.config.selectedGC == gcDestructors: + let fieldType = if false: # c.graph.config.selectedGC == gcDestructors: c.getEnvTypeForOwnerUp(dep, info) #getHiddenParam(dep).typ else: c.getEnvTypeForOwner(dep, info) diff --git a/lib/pure/asyncmacro.nim b/lib/pure/asyncmacro.nim index fde7fe59a..477011285 100644 --- a/lib/pure/asyncmacro.nim +++ b/lib/pure/asyncmacro.nim @@ -25,9 +25,9 @@ proc skipStmtList(node: NimNode): NimNode {.compileTime.} = template createCb(retFutureSym, iteratorNameSym, strName, identName, futureVarCompletions: untyped) = bind finished + let retFutUnown = unown retFutureSym var nameIterVar = iteratorNameSym - #{.push stackTrace: off.} proc identName {.closure.} = try: if not nameIterVar.finished: @@ -39,7 +39,7 @@ template createCb(retFutureSym, iteratorNameSym, break if next == nil: - if not retFutureSym.finished: + if not retFutUnown.finished: let msg = "Async procedure ($1) yielded `nil`, are you await'ing a " & "`nil` Future?" raise newException(AssertionError, msg % strName) @@ -50,16 +50,13 @@ template createCb(retFutureSym, iteratorNameSym, {.pop.} except: futureVarCompletions - - if retFutureSym.finished: + if retFutUnown.finished: # Take a look at tasyncexceptions for the bug which this fixes. # That test explains it better than I can here. raise else: - retFutureSym.fail(getCurrentException()) - + retFutUnown.fail(getCurrentException()) identName() - #{.pop.} template useVar(result: var NimNode, futureVarNode: NimNode, valueReceiver, rootReceiver: untyped, fromNode: NimNode) = |