diff --git a/src/Type.cc b/src/Type.cc index 48f40296f3..4ee5422b43 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -846,8 +846,37 @@ TableVal* RecordType::GetRecordFieldsVal(const RecordVal* rv) const if ( ft->Tag() == TYPE_RECORD ) nr->Assign(0, new StringVal("record " + ft->GetName())); - else - nr->Assign(0, new StringVal(type_name(ft->Tag()))); + else if ( ft->Tag() == TYPE_VECTOR ) + { + string s = "vector["; + s += type_name(ft->YieldType()->Tag()); + s += "]"; + nr->Assign(0, new StringVal(s)); + } + else if ( ft->Tag() == TYPE_TABLE ) + { + string s; + if ( ft->IsSet() ) + s = "set["; + else + s = "table["; + const type_list* tl = ((const IndexType*) ft)->IndexTypes(); + loop_over_list(*tl, i) + { + if (i > 0) + s += ","; + s += type_name((*tl)[i]->Tag()); + } + s += "]"; + if (ft->YieldType()) + { + s += " of "; + s += type_name(ft->YieldType()->Tag()); + } + nr->Assign(0, new StringVal(s)); + } + else + nr->Assign(0, new StringVal(type_name(ft->Tag()))); nr->Assign(1, val_mgr->GetBool(logged)); nr->Assign(2, fv); diff --git a/testing/btest/Baseline/bifs.records_fields/out b/testing/btest/Baseline/bifs.records_fields/out index 0bcc001b8e..2a90d4a56c 100644 --- a/testing/btest/Baseline/bifs.records_fields/out +++ b/testing/btest/Baseline/bifs.records_fields/out @@ -48,3 +48,9 @@ F [a] = [type_name=count, log=F, value=, default_val=], [d] = [type_name=string, log=T, value=, default_val=] } +{ +[a] = [type_name=set[double], log=F, value=, default_val=], +[b] = [type_name=set[double,string], log=F, value=, default_val=], +[c] = [type_name=table[double,string] of string, log=F, value=, default_val=], +[d] = [type_name=vector[string], log=F, value=, default_val=] +} diff --git a/testing/btest/bifs/records_fields.zeek b/testing/btest/bifs/records_fields.zeek index a6d09d737d..c4d98ab521 100644 --- a/testing/btest/bifs/records_fields.zeek +++ b/testing/btest/bifs/records_fields.zeek @@ -24,6 +24,13 @@ type r: record { type mystring: string; +type cr: record { + a: set[double]; + b: set[double, string]; + c: table[double, string] of string; + d: vector of string; +}; + event zeek_init() { local x: r = [$a=42, $d="Bar", $e=tt]; @@ -47,4 +54,6 @@ event zeek_init() print record_fields("myrec"); print record_fields("tt"); print record_fields("r"); + + print record_fields("cr"); }