Skip somer error reporting when the record type has errors

The added test cases around function/event invocations report the
following flurry of errors when only the first one is relevant and
actionable. There's little use in reporting a mismatch with "error".
Squelch them.

    error in <...>/function-invoke-mismatch-error.zeek, line 8: identifier not defined: MyEnumTypo
    error in <...>/function-invoke-mismatch-error.zeek, line 12 and error: type mismatch (M::MY_ENUM_A and error)
    error in <...>/function-invoke-mismatch-error.zeek, line 12: argument type mismatch in function call (M::to_string(M::MY_ENUM_A))
    error in <...>/function-invoke-mismatch-error.zeek, line 16 and error: type mismatch (M::MY_ENUM_B and error)
    error in <...>/function-invoke-mismatch-error.zeek, line 16: argument type mismatch in function call (M::to_string(M::MY_ENUM_B))
    error in <...>/function-invoke-mismatch-error.zeek, line 20 and error: type mismatch (M::e and error)
    error in <...>/function-invoke-mismatch-error.zeek, line 20: argument type mismatch in function call (M::to_string(M::e))

Record coercion also reports noisy errors when coercing to a type that
has errors for individual fields, type clashing with "error":

    $ zeek language/record-field-error.zeek
    error in ./language/record-coerce-error.zeek, line 8: identifier not defined: MyEnumTypo
    error in ./language/record-coerce-error.zeek, line 19 and ./language/record-coerce-error.zeek, line 5: type clash for field "e" ((coerce [$e=MY_ENUM_B, $s=test] to MyRecord) and MyEnum)
This commit is contained in:
Arne Welzel 2023-01-26 21:14:32 +01:00
parent 589e042e26
commit adf56ef4d8
7 changed files with 90 additions and 2 deletions

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/event-invoke-mismatch-error.zeek, line 8: identifier not defined: MyEnumTypo

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/function-invoke-mismatch-error.zeek, line 8: identifier not defined: MyEnumTypo

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/record-coerce-error.zeek, line 8: identifier not defined: MyEnumTypo

View file

@ -0,0 +1,21 @@
# @TEST-DOC: Error in event declaration should not report argument mismatches at call site
# @TEST-EXEC-FAIL: zeek -b %INPUT > out 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
module M;
export {
type MyEnum: enum { MY_ENUM_A, MY_ENUM_B };
global my_event: event(e: MyEnumTypo);
}
event zeek_init() {
event my_event(MY_ENUM_A);
}
event zeek_done() {
event my_event(MY_ENUM_B);
}
function helper(e: MyEnum){
event my_event(e);
}

View file

@ -0,0 +1,21 @@
# @TEST-DOC: Error in function declaration should not report argument mismatches at call site
# @TEST-EXEC-FAIL: zeek -b %INPUT > out 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
module M;
export {
type MyEnum: enum { MY_ENUM_A, MY_ENUM_B };
global to_string: function(e: MyEnumTypo): string;
}
event zeek_init() {
M::to_string(MY_ENUM_A);
}
event zeek_done() {
M::to_string(MY_ENUM_B);
}
function helper(e: MyEnum): string {
return M::to_string(e);
}

View file

@ -0,0 +1,16 @@
# @TEST-DOC: Error in Record should not show when trying to coerce to it.
# @TEST-EXEC-FAIL: zeek -b %INPUT > out 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
export {
type MyEnum: enum { MY_ENUM_A, MY_ENUM_B };
type MyRecord: record {
e: MyEnumTypo;
s: string;
};
}
event zeek_init() {
local r1 = MyRecord($e=MY_ENUM_B, $s="test");
local r2: MyRecord = [$e=MY_ENUM_B, $s="test"];
}