Files
Nim/compiler
Araq 3df66836d8 IC: data ownership for the per-module backend (Phase 2b, B4)
Consts and RTTI are demand-emitted, so under emit-everywhere `cg` the same
external-linkage data definition lands in several modules' .c.nif as `cdata`
(raw text, not droppable) -> multiple definition at link. Procs already
deduped via the `'u'` cdef flag; data now gets the same droppable+owner
treatment, with one difference: data is never DCE'd (RTTI needs pointer
identity for `of`/exception checks; static-per-TU would break that), so it is
always a liveness root and kept by its single owner regardless of liveness.

- New `'d'` cdef flag = a data definition: the merge stage assigns it one
  owner (smallest claimant, like `'u'`) and roots it (so its body keeps the
  procs it references live); emit keeps the body only in the owner, every
  other module keeps just an always-emitted `extern` declaration (the data
  analogue of a proc prototype).
- genConstDefinition (ccgexprs) and genTypeInfoV2Impl (ccgtypes) now, under
  cmdNifC, emit an extern declaration + wrap the definition in a `'d'` cdef
  directive. The RTTI forward decl becomes a real `extern` (was a tentative
  definition that would collide across TUs).
- cnif: computeLiveFromCArtifacts, computeMergeDecision and
  renderCFromArtifact all handle `'d'`.

icFormatVersion 4 -> 5 (old .c.nif lack the data wrappers).

Validated on the 3-module diamond: the full per-module pipeline (cg all,
merge, emit all, cc, link) now LINKS with no duplicate symbols -- RTTI
(NTIv2) and const tables each land in exactly one object. Whole-program IC
path unchanged (koch ic thallo/tconverter/tmiscs green). Remaining: NimMain
init orchestration (a/b module inits not yet called from main's cg -> the
linked exe runs but prints defaults), the next unit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:49:13 +02:00
..
2026-06-10 12:04:42 +02:00
2023-12-15 10:20:57 +01:00
2026-06-13 10:08:46 +02:00
2025-12-01 22:59:12 +01:00
2026-06-11 10:36:04 +02:00
2026-02-10 13:21:35 +01:00
2026-06-13 10:08:46 +02:00
2026-06-12 12:47:06 +02:00
2026-06-12 16:27:41 +02:00
2026-03-16 16:56:18 +01:00
2025-12-31 13:33:57 +01:00
2026-06-12 06:05:31 +02:00
2017-01-07 22:35:09 +01:00
2026-02-10 13:21:35 +01:00
2026-06-12 12:47:06 +02:00
2025-12-11 18:22:38 +01:00
2025-12-11 18:22:38 +01:00
2026-06-13 10:16:29 +02:00
2026-06-07 19:55:56 +02:00
2025-11-25 12:49:23 +01:00
2026-04-02 07:19:43 +02:00
2024-12-27 19:42:18 +01:00
2026-06-11 10:36:04 +02:00
2026-06-13 10:08:46 +02:00
2026-04-02 07:19:43 +02:00
2025-12-11 18:22:38 +01:00
2026-04-02 07:19:43 +02:00
2026-06-13 10:08:46 +02:00
2026-06-11 10:36:04 +02:00
2021-01-12 09:36:51 +01:00
2026-06-12 16:27:41 +02:00
2026-06-13 10:08:46 +02:00
2026-01-09 13:10:04 +01:00
2026-06-11 10:36:04 +02:00
2026-06-10 12:04:42 +02:00
2026-06-10 12:04:42 +02:00
2026-06-13 10:08:46 +02:00
2025-12-11 18:22:38 +01:00
2026-06-09 16:12:38 +02:00
2026-02-10 13:21:35 +01:00
2023-07-02 22:36:05 +02:00
2023-11-06 18:33:28 +01:00
2026-02-10 13:21:35 +01:00
2026-06-10 12:04:42 +02:00
2026-06-13 10:08:46 +02:00
2025-12-11 18:22:38 +01:00
2026-06-10 12:04:42 +02:00
2026-06-13 10:08:46 +02:00
2025-12-11 18:22:38 +01:00
2025-12-11 18:22:38 +01:00
2026-06-13 10:08:46 +02:00
2026-06-13 10:08:46 +02:00
2026-06-10 12:04:42 +02:00
2026-06-13 10:08:46 +02:00
2025-12-11 18:22:38 +01:00
2024-03-16 08:35:18 +08:00
2025-12-29 13:52:22 +01:00
2025-12-31 13:33:57 +01:00
2026-06-13 10:08:46 +02:00
2026-06-13 10:08:46 +02:00
2026-06-09 16:12:38 +02:00
2023-12-25 07:12:54 +01:00

Nim Compiler

  • This directory contains the Nim compiler written in Nim.
  • Note that this code has been translated from a bootstrapping version written in Pascal.
  • So the code is not a poster child of good Nim code.

See Internals of the Nim Compiler for more information.