refactor: inline move body and remove hasOverriddenWasMoved check in semMove

This commit is contained in:
ringabout
2026-05-11 20:32:43 +08:00
parent ed20f189f4
commit c36bd01ba8
2 changed files with 6 additions and 20 deletions

View File

@@ -2838,9 +2838,14 @@ proc genMove(p: BProc; n: PNode; d: var TLoc) =
else:
if d.k == locNone: d = getTemp(p, n.typ)
if p.config.selectedGC in {gcArc, gcAtomicArc, gcOrc, gcYrc}:
# Inline `move`'s body here:
# result = x
# `=wasMoved`(x)
# Generated hooks fall back to generic `wasMoved`, so only overridden
# hooks need an explicit call.
genAssignment(p, d, a, {})
var op = getAttachedOp(p.module.g.graph, n.typ, attachedWasMoved)
if op == nil:
if op == nil or sfOverridden notin op.flags:
resetLoc(p, a)
else:
var b = initLocExpr(p, newSymNode(op))

View File

@@ -591,23 +591,6 @@ proc checkDefault(c: PContext, n: PNode): PNode =
if constructed.requiresInit:
message(c.config, n.info, warnUnsafeDefault, typeToString(constructed))
proc hasOverriddenWasMoved(c: PContext; n: PNode): bool =
if n.len != 2 or n[1].typ == nil: return false
let typ = n[1].typ.skipTypes({tyAlias, tyVar, tySink})
let op = getAttachedOp(c.graph, typ, attachedWasMoved)
result = op != nil and sfOverridden in op.flags
proc semMove(c: PContext; n: PNode): PNode =
result = n
if hasOverriddenWasMoved(c, n):
# Use the instantiated body of system.move[T] for overridden hooks so
# normal semantic lowering/codegen handles the =wasMoved call.
let callee = result[0].sym
ensureMutable callee
callee.magic = mNone
setOwner(callee, c.module)
analyseIfAddressTakenInCall(c, result, false)
proc magicsAfterOverloadResolution(c: PContext, n: PNode,
flags: TExprFlags; expectedType: PType = nil): PNode =
## This is the preferred code point to implement magics.
@@ -672,8 +655,6 @@ proc magicsAfterOverloadResolution(c: PContext, n: PNode,
result = n
else:
result = addDefaultFieldForNew(c, n)
of mMove:
result = semMove(c, n)
of mNewFinalize:
result = semNewFinalize(c, n)
of mDestroy: