From c36bd01ba8366b6331489da3c83c7d486806ef6b Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Mon, 11 May 2026 20:32:43 +0800 Subject: [PATCH] refactor: inline move body and remove hasOverriddenWasMoved check in semMove --- compiler/ccgexprs.nim | 7 ++++++- compiler/semmagic.nim | 19 ------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 2cf187e687..6e4af7248f 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -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)) diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim index 14e2f019ef..397c08bf67 100644 --- a/compiler/semmagic.nim +++ b/compiler/semmagic.nim @@ -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: