newruntime: progress to make 'async' work with --newruntime

(cherry picked from commit edbe02b4e1)
This commit is contained in:
Araq
2019-07-15 10:56:20 +02:00
committed by narimiran
parent f23ca7f539
commit 073651237a
3 changed files with 8 additions and 9 deletions

View File

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

View File

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

View File

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