Skip to content

Remove mut requirement from struct method receivers #28

@mjm918

Description

@mjm918

Description

Currently, struct methods that mutate self require mut in the receiver:

pub fn (mut self: Counter) increment() {
    self.count = self.count + 1;
}

Without mut, mutation of self fields fails. This adds unnecessary ceremony — self in methods should always be mutable.

Proposal

Make self always mutable in method receivers. Remove the mut keyword from receiver syntax entirely.

Before: pub fn (mut self: Counter) increment()
After: pub fn (self: Counter) increment()

Affected Code

  • Parser: namlc/src/parser/items.rsparse_receiver() checks for Keyword::Mut and sets Receiver.mutable
  • Type checker: namlc/src/typechecker/mod.rs — uses recv.mutable when defining self in scope via env.define()
  • AST: Receiver struct has a mutable: bool field

Fix

  1. In parse_receiver(): remove mut keyword check, always set mutable: true (or remove the field)
  2. In typechecker: always define receiver as mutable
  3. Optionally emit a warning/error if mut is still used, for a deprecation period

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions