mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 10:38:20 +00:00
GH-1296: fix type-checks related to list-type equality
List-types as used in composite table/set indices, for example, previously had incorrect same_type() comparisons due to flattening of the list-type into a single type without checking whether the number and kind of types all match. This patch simply removes the flatten_type() call from same_type() since it was already contradicting/preventing a subsequent full-comparison between elements of two TYPE_LISTs. There was also a superfluous special-case of the `in` operator's type-checking for testing whether a record is in a table/set. It's superfluous because the general case will already do the type-checking from MatchesIndex() after first wrapping the record operand in a ListExpr. The previous logic was incorrectly relying on the flatten_type() for testing equality of a record-type against a list-type, whereas the general case correctly normalizes to testing equality of two list-types. The special-cased type-checking logic for assigning a record value to a table index during its initialization similarly needed minor re-organization in order to maintain the same error messages as before.
This commit is contained in:
parent
54b52eb197
commit
8c64ba6907
6 changed files with 88 additions and 38 deletions
|
@ -1586,11 +1586,8 @@ bool same_type(const Type& arg_t1, const Type& arg_t2,
|
|||
arg_t2.Tag() == TYPE_ANY )
|
||||
return true;
|
||||
|
||||
auto t1 = flatten_type(&arg_t1);
|
||||
auto t2 = flatten_type(&arg_t2);
|
||||
|
||||
if ( t1 == t2 )
|
||||
return true;
|
||||
auto t1 = &arg_t1;
|
||||
auto t2 = &arg_t2;
|
||||
|
||||
if ( t1->Tag() != t2->Tag() )
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue