parent
e718a4a058
commit
fbc8a40c7a
2 changed files with 23 additions and 5 deletions
|
|
@ -238,10 +238,11 @@ proc liftingHarmful(conf: ConfigRef; owner: PSym): bool {.inline.} =
|
||||||
result = conf.backend == backendJs and not isCompileTime
|
result = conf.backend == backendJs and not isCompileTime
|
||||||
|
|
||||||
proc createTypeBoundOpsLL(g: ModuleGraph; refType: PType; info: TLineInfo; idgen: IdGenerator; owner: PSym) =
|
proc createTypeBoundOpsLL(g: ModuleGraph; refType: PType; info: TLineInfo; idgen: IdGenerator; owner: PSym) =
|
||||||
createTypeBoundOps(g, nil, refType.lastSon, info, idgen)
|
if owner.kind != skMacro:
|
||||||
createTypeBoundOps(g, nil, refType, info, idgen)
|
createTypeBoundOps(g, nil, refType.lastSon, info, idgen)
|
||||||
if tfHasAsgn in refType.flags or optSeqDestructors in g.config.globalOptions:
|
createTypeBoundOps(g, nil, refType, info, idgen)
|
||||||
owner.flags.incl sfInjectDestructors
|
if tfHasAsgn in refType.flags or optSeqDestructors in g.config.globalOptions:
|
||||||
|
owner.flags.incl sfInjectDestructors
|
||||||
|
|
||||||
proc liftIterSym*(g: ModuleGraph; n: PNode; idgen: IdGenerator; owner: PSym): PNode =
|
proc liftIterSym*(g: ModuleGraph; n: PNode; idgen: IdGenerator; owner: PSym): PNode =
|
||||||
# transforms (iter) to (let env = newClosure[iter](); (iter, env))
|
# transforms (iter) to (let env = newClosure[iter](); (iter, env))
|
||||||
|
|
@ -613,7 +614,8 @@ proc rawClosureCreation(owner: PSym;
|
||||||
let fieldAccess = indirectAccess(env, local, env.info)
|
let fieldAccess = indirectAccess(env, local, env.info)
|
||||||
# add ``env.param = param``
|
# add ``env.param = param``
|
||||||
result.add(newAsgnStmt(fieldAccess, newSymNode(local), env.info))
|
result.add(newAsgnStmt(fieldAccess, newSymNode(local), env.info))
|
||||||
createTypeBoundOps(d.graph, nil, fieldAccess.typ, env.info, d.idgen)
|
if owner.kind != skMacro:
|
||||||
|
createTypeBoundOps(d.graph, nil, fieldAccess.typ, env.info, d.idgen)
|
||||||
if tfHasAsgn in fieldAccess.typ.flags or optSeqDestructors in d.graph.config.globalOptions:
|
if tfHasAsgn in fieldAccess.typ.flags or optSeqDestructors in d.graph.config.globalOptions:
|
||||||
owner.flags.incl sfInjectDestructors
|
owner.flags.incl sfInjectDestructors
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,3 +71,19 @@ proc p2 =
|
||||||
|
|
||||||
discard repr p2
|
discard repr p2
|
||||||
|
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
# bug #15043
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
macro extract(): untyped =
|
||||||
|
result = newStmtList()
|
||||||
|
var x: seq[tuple[node: NimNode]]
|
||||||
|
|
||||||
|
proc test(n: NimNode) {.closure.} =
|
||||||
|
x.add (node: n)
|
||||||
|
|
||||||
|
test(parseExpr("discard"))
|
||||||
|
|
||||||
|
extract()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue