mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 02:28:21 +00:00
Bro doc mode now only does a "shallow" copy of declared record types
This is necessary so that the cloned type will be able to see additions to the original type's list of fields
This commit is contained in:
parent
d919ebed58
commit
6d867cf999
3 changed files with 55 additions and 13 deletions
|
@ -456,6 +456,8 @@ public:
|
|||
// Given an offset, returns the field's name.
|
||||
const char* FieldName(int field) const;
|
||||
|
||||
type_decl_list* Types() { return types; }
|
||||
|
||||
// Given an offset, returns the field's TypeDecl.
|
||||
const TypeDecl* FieldDecl(int field) const;
|
||||
TypeDecl* FieldDecl(int field);
|
||||
|
|
|
@ -241,6 +241,14 @@ void add_type(ID* id, BroType* t, attr_list* attr, int /* is_event */)
|
|||
// is to add an ID* to class ID that tracks aliases and set it here if
|
||||
// t->GetTypeID() is true.
|
||||
if ( generate_documentation )
|
||||
{
|
||||
if ( t->Tag() == TYPE_RECORD )
|
||||
{
|
||||
// Only "shallow" copy record types because we want to be able
|
||||
// to see additions to the original type's list of fields
|
||||
tnew = new RecordType(t->AsRecordType()->Types());
|
||||
}
|
||||
else
|
||||
{
|
||||
SerializationFormat* form = new BinarySerializationFormat();
|
||||
form->StartWrite();
|
||||
|
@ -258,6 +266,7 @@ void add_type(ID* id, BroType* t, attr_list* attr, int /* is_event */)
|
|||
tnew = t->Unserialize(&uinfo);
|
||||
|
||||
delete [] data;
|
||||
}
|
||||
|
||||
tnew->SetTypeID(copy_string(id->Name()));
|
||||
}
|
||||
|
|
31
testing/btest/doc/autogen-reST-record-add.bro
Normal file
31
testing/btest/doc/autogen-reST-record-add.bro
Normal file
|
@ -0,0 +1,31 @@
|
|||
# @TEST-EXEC: bro --doc-scripts %INPUT
|
||||
|
||||
# When in doc mode, bro will clone declared types (see add_type() in Var.cc)
|
||||
# in order to keep track of the identifier name associated with the new type.
|
||||
# This test makes sure that the cloning is done in a way that's compatible
|
||||
# with adding fields to a record type -- we want to be sure that cloning
|
||||
# a record that contains other record fields will correctly see field
|
||||
# additions to those contained-records.
|
||||
|
||||
type my_record: record {
|
||||
field1: bool;
|
||||
field2: string;
|
||||
};
|
||||
|
||||
type super_record: record {
|
||||
rec: my_record;
|
||||
};
|
||||
|
||||
redef record my_record += {
|
||||
field3: count &optional;
|
||||
};
|
||||
|
||||
global a: my_record;
|
||||
|
||||
global b: super_record;
|
||||
|
||||
function test_func()
|
||||
{
|
||||
a?$field3;
|
||||
b$rec?$field3;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue