Checking the markers for the first time found five disagreements in areas that are implemented. Four were the marker's fault: - own/badarg pinned "self", but the rule being broken is that a returned reference must derive from a parameter -- `self` has nothing to do with it. - own/badbrmov pinned line 9, which is the closing brace; the second destroy is on line 8. - own/badloop pinned line 8, the destroy after the loop. The diagnostic is on line 6, inside it, and line 6 is right: the second iteration moves the same value again, so the loop body is where it is caught. Whoever wrote the marker expected the error after the loop. - optional/badcatch pinned line 14, the body of the catch block. The catch expression on line 13 is what cannot fall through. The fifth was the compiler's. own/badweak assigns a `&mut i32` to a `&i32` and got "initializer type mismatch", which says nothing about why. Weakening an exclusive borrow to a shared one is a specific rule and now says so, for references and slices alike. own/ is fully green: 50/50. Overall 133 -> 138 of 188. The six remaining marker disagreements are all under units/ and generic/, where nothing is implemented yet, so there is no diagnostic to compare against and no way to tell whether the marker is right.
M7 fixtures
M7 adds optionals and error unions on top of the M6 ownership model.
ok*.fe must compile. bad*.fe must fail according to the first-line error marker.
The files are registered in src/ferrolang_vm/registry.py.
Coverage: contextual null, ?T, .?, Some/None pattern-only non-destructive views, mem.replace extraction, lazy orelse/catch, nominal error unions, try, block/short catch, and error code/name uniqueness, plus R4/R7 interactions with optional references/owners.