Remove a hack in the destroyer impl (#9479)
Generate nkHiddenAddr nodes w/ proper type attached.
This commit is contained in:
parent
3ee53a7c8e
commit
16d82c82e3
1 changed files with 7 additions and 4 deletions
|
|
@ -268,9 +268,6 @@ proc patchHead(n: PNode) =
|
||||||
if sfFromGeneric in s.flags:
|
if sfFromGeneric in s.flags:
|
||||||
excl(s.flags, sfFromGeneric)
|
excl(s.flags, sfFromGeneric)
|
||||||
patchHead(s.getBody)
|
patchHead(s.getBody)
|
||||||
if n[1].typ.isNil:
|
|
||||||
# XXX toptree crashes without this workaround. Figure out why.
|
|
||||||
return
|
|
||||||
let t = n[1].typ.skipTypes({tyVar, tyLent, tyGenericInst, tyAlias, tySink, tyInferred})
|
let t = n[1].typ.skipTypes({tyVar, tyLent, tyGenericInst, tyAlias, tySink, tyInferred})
|
||||||
template patch(op, field) =
|
template patch(op, field) =
|
||||||
if s.name.s == op and field != nil and field != s:
|
if s.name.s == op and field != nil and field != s:
|
||||||
|
|
@ -296,6 +293,10 @@ proc checkForErrorPragma(c: Con; t: PType; ri: PNode; opname: string) =
|
||||||
m.add c.graph.config $ c.otherRead.info
|
m.add c.graph.config $ c.otherRead.info
|
||||||
localError(c.graph.config, ri.info, errGenerated, m)
|
localError(c.graph.config, ri.info, errGenerated, m)
|
||||||
|
|
||||||
|
proc makePtrType(c: Con, baseType: PType): PType =
|
||||||
|
result = newType(tyPtr, c.owner)
|
||||||
|
addSonSkipIntLit(result, baseType)
|
||||||
|
|
||||||
template genOp(opr, opname, ri) =
|
template genOp(opr, opname, ri) =
|
||||||
let op = opr
|
let op = opr
|
||||||
if op == nil:
|
if op == nil:
|
||||||
|
|
@ -304,7 +305,9 @@ template genOp(opr, opname, ri) =
|
||||||
globalError(c.graph.config, dest.info, "internal error: '" & opname & "' operator is generic")
|
globalError(c.graph.config, dest.info, "internal error: '" & opname & "' operator is generic")
|
||||||
patchHead op
|
patchHead op
|
||||||
if sfError in op.flags: checkForErrorPragma(c, t, ri, opname)
|
if sfError in op.flags: checkForErrorPragma(c, t, ri, opname)
|
||||||
result = newTree(nkCall, newSymNode(op), newTree(nkHiddenAddr, dest))
|
let addrExp = newNodeIT(nkHiddenAddr, dest.info, makePtrType(c, dest.typ))
|
||||||
|
addrExp.add(dest)
|
||||||
|
result = newTree(nkCall, newSymNode(op), addrExp)
|
||||||
|
|
||||||
proc genSink(c: Con; t: PType; dest, ri: PNode): PNode =
|
proc genSink(c: Con; t: PType; dest, ri: PNode): PNode =
|
||||||
let t = t.skipTypes({tyGenericInst, tyAlias, tySink})
|
let t = t.skipTypes({tyGenericInst, tyAlias, tySink})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue