Skip to content

Conversation

@duchainer
Copy link

Related to #5817, but independent, as this targets error messages for polymorphic procs, not proc_groups. But the "why" is the same, help new odin users more quickly figure out when they forgot/missed a pass-by-pointer.

When the polymorphic type is explicitly a pointer and our input is not, then we suggest using a pointer.
image

This might not work if you use indirect types to a pointer, but should cover most cases of new odin user not figuring out why the append_elem, etc calls won't work.

TODO MAYBE:

  • resolve the poly_type to the concrete/direct type, if able/efficient

NOTE:

  • We don't add that error_line for the if(!is_operand_value(operand)) case, because pointers to invalid types won't make it more valid, so the if-then-suggestion would never happen there:
  • Invalid argument types being: ``` enum AddressingMode : u8 {
    Addressing_Invalid = 0, // invalid addressing mode
    Addressing_NoValue = 1, // no value (void in C)
    [...]
    Addressing_Type = 6, // type
    Addressing_Builtin = 7, // built-in procedure
    Addressing_ProcGroup = 8, // procedure group (overloaded procedure)
    [...]
    }

When the polymorphic type is explicitly a pointer and our input is not,
then we suggest using a pointer.

This might not work if you use indirect types to a pointer, but should
cover most cases of new odin user not figuring out why the append_elem, etc calls won't work.

TODO MAYBE:
 - resolve the poly_type to the concrete/direct type, if able/efficient

NOTE:
 - We don't add that error_line for the `if(!is_operand_value(operand))`
 case, because pointers to invalid types won't make it more valid, so
 the if-then-suggestion would never happen there:
  - Invalid argument types being:
    ```
    enum AddressingMode : u8 {
        Addressing_Invalid   = 0,        // invalid addressing mode
        Addressing_NoValue   = 1,        // no value (void in C)
        [...]
        Addressing_Type      = 6,        // type
        Addressing_Builtin   = 7,        // built-in procedure
        Addressing_ProcGroup = 8,        // procedure group (overloaded procedure)
        [...]
    }
    ```
duchainer added a commit to duchainer/Odin that referenced this pull request Oct 16, 2025
Like other PRS:
 - odin-lang#5817
 - odin-lang#5818

But for the non-proc-group, non-polymorphic proc-calls.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant