lyng/CHANGELOG.md

1.8 KiB

Changelog

Unreleased

  • Multiple Inheritance (MI) completed and enabled by default:

    • Active C3 Method Resolution Order (MRO) for deterministic, monotonic lookup across complex hierarchies and diamonds.
    • Qualified dispatch:
      • this@Type.member(...) inside class bodies starts lookup at the specified ancestor.
      • Cast-based disambiguation: (expr as Type).member(...), (expr as? Type)?.member(...) (works with existing safe-call ?.).
    • Field inheritance (val/var) under MI:
      • Instance storage is disambiguated per declaring class; unqualified read/write resolves to the first match in MRO.
      • Qualified read/write targets the chosen ancestor’s storage.
    • Constructors and initialization:
      • Direct bases are initialized left-to-right; each ancestor is initialized at most once (diamond-safe de-duplication).
      • Header-specified constructor arguments are passed to direct bases.
    • Visibility enforcement under MI:
      • private visible only inside the declaring class body.
      • protected visible inside the declaring class and any of its transitive subclasses; unrelated contexts cannot access it (qualification/casts do not bypass).
    • Diagnostics improvements:
      • Missing member/field messages include receiver class and linearization order; hints for this@Type or casts when helpful.
      • Invalid this@Type reports that the qualifier is not an ancestor and shows the receiver lineage.
      • as/as? cast errors include actual and target type names.
  • Documentation updated (docs/OOP.md and tutorial quick-start) to reflect MI with active C3 MRO.

Notes:

  • Existing single-inheritance code continues to work; resolution reduces to the single base.
  • If code previously relied on non-deterministic parent set iteration, C3 MRO provides a predictable order; disambiguate explicitly if needed using this@Type/casts.