Files
Nim/tests/destructor
ringabout 43ac102ca8 fixes #25800; move now uses its declaration for overridden =wasMoved (#25809)
fixes #25800
closes https://github.com/nim-lang/Nim/pull/25807
ref https://github.com/nim-lang/Nim/issues/25800

This pull request improves the handling of move semantics and the
`=wasMoved` hook in the Nim compiler, especially for C++ code generation
and user-defined types. It refactors the move operation logic to better
support custom hooks, adds new tests for edge cases, and ensures that
the `move` operation is safer and more predictable.

**Move semantics and `=wasMoved` handling:**

* Refactored the move operation in `compiler/ccgexprs.nim` by
introducing helper procs (`canGenMoveCall`, `genMoveCall`,
`genWasMovedCall`, `genMoveWithWasMoved`) to better handle cases with
user-defined `=wasMoved` hooks, especially for generics and C++ interop.
The logic now distinguishes between simple assignments and when to call
custom hooks, improving correctness and maintainability.
[[1]](diffhunk://#diff-4509107d295d7d32b1887c8993cd0f56113ae60f36113e7d8778646dabd92ebcL2818-R2851)
[[2]](diffhunk://#diff-4509107d295d7d32b1887c8993cd0f56113ae60f36113e7d8778646dabd92ebcL2841-R2882)
* Updated the `move` proc in `lib/system.nim` to include the `nodestroy`
pragma, preventing double destruction and making move semantics safer.

**Testing and validation:**

* Added a new test (`tests/ccgbugs2/t25800.nim`) to ensure that
user-defined `=wasMoved` hooks with `{.importcpp.}` are correctly
generated and invoked in C++ code, addressing a specific bug with
invalid preprocessor directives.
* Expanded `tests/destructor/twasmoved.nim` with additional test cases
for objects with and without custom `=wasMoved` hooks, including
multithreaded scenarios using `threadpool`, to verify correct behavior
in a variety of contexts.

**Minor cleanup:**

* Added a blank line for code style consistency in
`compiler/semmagic.nim`.
2026-05-21 13:42:38 +02:00
..
2021-03-09 22:50:17 -08:00
2022-10-01 16:46:51 +02:00
2020-01-20 10:41:12 +01:00
2020-09-25 08:49:21 +02:00
2022-10-01 16:46:51 +02:00
2019-03-04 22:44:23 +01:00
2019-11-29 19:46:21 +01:00
2020-05-02 22:31:19 +02:00
2019-07-07 17:17:14 +02:00
2020-11-09 19:24:32 +01:00
2020-04-01 20:30:28 +02:00
2020-06-28 17:47:47 +02:00
2020-03-10 00:52:46 +01:00
2020-07-09 17:24:23 +02:00
2023-06-02 16:03:32 +02:00
2019-04-25 07:59:34 +02:00
2019-05-27 21:29:02 +02:00
2022-07-06 13:06:41 +02:00
2020-03-17 16:36:38 +01:00