//! returns: 0
//! Test `else continue` in a for loop with let-else.

record Field {
    name: ?*[u8],
    value: i32,
}

fn findField(fields: *[Field], target: *[u8]) -> ?i32 {
    for i in 0..fields.len {
        let name = fields[i].name
            else continue;
        if name.len == target.len {
            let mut eq = true;
            for j in 0..name.len {
                if name[j] <> target[j] {
                    set eq = false;
                }
            }
            if eq {
                return fields[i].value;
            }
        }
    }
    return nil;
}

@default fn main() -> i32 {
    let mut fields: [Field; 4] = undefined;
    set fields[0] = Field { name: nil, value: 10 };
    set fields[1] = Field { name: "foo", value: 20 };
    set fields[2] = Field { name: nil, value: 30 };
    set fields[3] = Field { name: "bar", value: 40 };

    let v1 = findField(&fields[..], "foo") else {
        return 1;
    };
    assert v1 == 20;

    let v2 = findField(&fields[..], "bar") else {
        return 3;
    };
    assert v2 == 40;

    if let _ = findField(&fields[..], "baz") {
        return 5;
    }

    return 0;
}
