• hairyballs@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 year ago

    There are still obvious things the BC cannot get. For example:

    struct Foo;
    
    impl Foo {
        fn num(&mut self) -> usize { 0 }
        fn index(&mut self, _i: usize) { }
    }
    
    let foo = Foo;
    foo.index(foo.num()); //error
    
    • sirdorius@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      1 year ago

      This looks like a pretty easy fix that the compiler could do by extracting the argument to a temp variable to improve the syntax of the language.

    • KillTheMule@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 year ago

      Note that when you change num to take &self instead, this works out (you also need to mark foo as mutable, of course).

      • hairyballs@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        It’s a toy example. In that case, the solution is to assign the expression to a variable to compute its result upfront.