diff --git a/src/ID.cc b/src/ID.cc index 7678953445..12b5b7951a 100644 --- a/src/ID.cc +++ b/src/ID.cc @@ -681,20 +681,30 @@ void ID::DescribeReST(ODesc* d, bool is_role) const type->Tag() != TYPE_FUNC && type->InternalType() != TYPE_INTERNAL_VOID ) { + d->Add(":Default:"); if ( type->InternalType() == TYPE_INTERNAL_OTHER ) { - d->Add(":Init:"); - d->NL(); - d->NL(); - d->Add("::"); - d->NL(); - d->PushIndent(); - val->DescribeReST(d); - d->PopIndent(); + switch ( type->Tag() ) { + case TYPE_TABLE: + if ( val->AsTable()->Length() == 0 ) + { + d->Add(" ``{}``"); + d->NL(); + break; + } + default: + d->NL(); + d->NL(); + d->Add("::"); + d->NL(); + d->PushIndent(); + val->DescribeReST(d); + d->PopIndent(); + } } else { - d->Add(":Init: "); + d->SP(); val->DescribeReST(d); d->NL(); } diff --git a/src/Val.cc b/src/Val.cc index 012ca92773..f237ff7bec 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -576,14 +576,7 @@ void Val::Describe(ODesc* d) const void Val::DescribeReST(ODesc* d) const { - if ( type->InternalType() == TYPE_INTERNAL_OTHER ) - Describe(d); - else - { - d->Add("``"); - ValDescribeReST(d); - d->Add("``"); - } + ValDescribeReST(d); } void Val::ValDescribe(ODesc* d) const @@ -629,7 +622,15 @@ void Val::ValDescribe(ODesc* d) const void Val::ValDescribeReST(ODesc* d) const { - ValDescribe(d); + switch ( type->InternalType() ) { + case TYPE_INTERNAL_OTHER: + Describe(d); + break; + default: + d->Add("``"); + ValDescribe(d); + d->Add("``"); + } } MutableVal::~MutableVal() @@ -2946,6 +2947,34 @@ void RecordVal::Describe(ODesc* d) const d->Add("]"); } +void RecordVal::DescribeReST(ODesc* d) const + { + const val_list* vl = AsRecord(); + int n = vl->length(); + + d->Add("{"); + d->PushIndent(); + + loop_over_list(*vl, i) + { + if ( i > 0 ) + d->NL(); + + d->Add(record_type->FieldName(i)); + + d->Add("="); + + Val* v = (*vl)[i]; + if ( v ) + v->Describe(d); + else + d->Add(""); + } + + d->PopIndent(); + d->Add("}"); + } + IMPLEMENT_SERIAL(RecordVal, SER_RECORD_VAL); bool RecordVal::DoSerialize(SerialInfo* info) const diff --git a/src/Val.h b/src/Val.h index 0d759360a7..0225fb6725 100644 --- a/src/Val.h +++ b/src/Val.h @@ -313,7 +313,7 @@ public: } void Describe(ODesc* d) const; - void DescribeReST(ODesc* d) const; + virtual void DescribeReST(ODesc* d) const; bool Serialize(SerialInfo* info) const; static Val* Unserialize(UnserialInfo* info, TypeTag type = TYPE_ANY) @@ -904,6 +904,7 @@ public: BroObj* GetOrigin() const { return origin; } unsigned int MemoryAllocation() const; + void DescribeReST(ODesc* d) const; protected: friend class Val;