diff --git a/src/Expr.cc b/src/Expr.cc index d03df0568f..bdac67c9be 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -3181,7 +3181,7 @@ TableConstructorExpr::TableConstructorExpr(ListExprPtr constructor_list, } else { if ( op->AsListExpr()->Exprs().empty() ) - SetType(make_intrusive(make_intrusive(base_type(TYPE_ANY)), nullptr)); + SetType(make_intrusive(make_intrusive(base_type(TYPE_ANY)), base_type(TYPE_ANY))); else { SetType(init_type(op)); diff --git a/src/Type.cc b/src/Type.cc index fe58ffbbeb..4b6d78a066 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -320,11 +320,19 @@ int IndexType::MatchesIndex(detail::ListExpr* const index) const { void IndexType::DoDescribe(ODesc* d) const { Type::DoDescribe(d); - if ( ! d->IsBinary() ) - d->Add("["); const auto& its = GetIndexTypes(); + // Deal with unspecified table/set. + if ( its.empty() ) { + if ( ! d->IsBinary() ) + d->Add("()"); + return; + } + + if ( ! d->IsBinary() ) + d->Add("["); + for ( auto i = 0u; i < its.size(); ++i ) { if ( ! d->IsBinary() && i > 0 ) d->Add(","); @@ -1763,6 +1771,11 @@ int VectorType::MatchesIndex(detail::ListExpr* const index) const { bool VectorType::IsUnspecifiedVector() const { return yield_type->Tag() == TYPE_VOID; } void VectorType::DoDescribe(ODesc* d) const { + if ( IsUnspecifiedVector() && d->IsReadable() ) { + d->Add("vector()"); + return; + } + if ( d->IsReadable() ) d->AddSP("vector of"); else diff --git a/testing/btest/Baseline/language.unspecified/output b/testing/btest/Baseline/language.unspecified/output new file mode 100644 index 0000000000..3879fcb759 --- /dev/null +++ b/testing/btest/Baseline/language.unspecified/output @@ -0,0 +1,4 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +set() +table() +vector() diff --git a/testing/btest/language/unspecified.zeek b/testing/btest/language/unspecified.zeek new file mode 100644 index 0000000000..55659398e1 --- /dev/null +++ b/testing/btest/language/unspecified.zeek @@ -0,0 +1,7 @@ +# @TEST-DOC: Test representation of unspecified table, set and vector +# @TEST-EXEC: zeek -b %INPUT >output +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff output + +print type_name(set()); +print type_name(table()); +print type_name(vector());