better error messages on field access

This commit is contained in:
Techatrix 2023-01-28 19:01:49 +01:00
parent 9cde2495b2
commit 3c7e9e13ce
2 changed files with 22 additions and 19 deletions

View File

@ -613,21 +613,24 @@ pub fn interpret(
else => false,
};
const accessed_ty = if (inner_lhs == .simple and inner_lhs.simple == .type) irv.val else irv.ty;
if (accessed_ty != .none) {
if (can_have_fields) {
try interpreter.recordError(
node_idx,
"undeclared_identifier",
"`{}` has no member '{s}'",
.{ irv.ty.fmtType(interpreter.ip), field_name },
.{ accessed_ty.fmtType(interpreter.ip), field_name },
);
} else {
try interpreter.recordError(
node_idx,
"invalid_field_access",
"`{}` does not support field access",
.{irv.ty.fmtType(interpreter.ip)},
.{accessed_ty.fmtType(interpreter.ip)},
);
}
}
return error.InvalidOperation;
},
.grouped_expression => {

View File

@ -2677,9 +2677,9 @@ fn optionalPtrTy(
}
}
/// will panic in debug mode or in tests else will return `value`
/// will panic in during testing else will return `value`
inline fn panicOrElse(message: []const u8, value: anytype) @TypeOf(value) {
if (builtin.is_test or builtin.mode == .Debug) {
if (builtin.is_test) {
@panic(message);
}
return value;