mirror of
https://github.com/zeek/zeek.git
synced 2025-10-07 17:18:20 +00:00
Remove dead code related to record type inheritance.
This commit is contained in:
parent
43124d4b1c
commit
436be4e07b
4 changed files with 14 additions and 178 deletions
|
@ -121,7 +121,7 @@ protected:
|
||||||
|
|
||||||
// This will be increased whenever there is an incompatible change
|
// This will be increased whenever there is an incompatible change
|
||||||
// in the data format.
|
// in the data format.
|
||||||
static const uint32 DATA_FORMAT_VERSION = 20;
|
static const uint32 DATA_FORMAT_VERSION = 21;
|
||||||
|
|
||||||
ChunkedIO* io;
|
ChunkedIO* io;
|
||||||
|
|
||||||
|
|
138
src/Type.cc
138
src/Type.cc
|
@ -876,74 +876,12 @@ void CommentedTypeDecl::DescribeReST(ODesc* d) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordField::RecordField(int arg_base, int arg_offset, int arg_total_offset)
|
|
||||||
{
|
|
||||||
base = arg_base;
|
|
||||||
offset = arg_offset;
|
|
||||||
total_offset = arg_total_offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
RecordType::RecordType(type_decl_list* arg_types) : BroType(TYPE_RECORD)
|
RecordType::RecordType(type_decl_list* arg_types) : BroType(TYPE_RECORD)
|
||||||
{
|
{
|
||||||
types = arg_types;
|
types = arg_types;
|
||||||
base = 0;
|
|
||||||
fields = 0;
|
|
||||||
num_fields = types ? types->length() : 0;
|
num_fields = types ? types->length() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordType::RecordType(TypeList* arg_base, type_decl_list* refinements)
|
|
||||||
: BroType(TYPE_RECORD)
|
|
||||||
{
|
|
||||||
if ( refinements )
|
|
||||||
arg_base->Append(new RecordType(refinements));
|
|
||||||
|
|
||||||
Init(arg_base);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RecordType::Init(TypeList* arg_base)
|
|
||||||
{
|
|
||||||
assert(false); // Is this ever used?
|
|
||||||
|
|
||||||
base = arg_base;
|
|
||||||
|
|
||||||
if ( ! base )
|
|
||||||
Internal("empty RecordType");
|
|
||||||
|
|
||||||
fields = new PDict(RecordField)(ORDERED);
|
|
||||||
types = 0;
|
|
||||||
|
|
||||||
type_list* t = base->Types();
|
|
||||||
|
|
||||||
loop_over_list(*t, i)
|
|
||||||
{
|
|
||||||
BroType* ti = (*t)[i];
|
|
||||||
|
|
||||||
if ( ti->Tag() != TYPE_RECORD )
|
|
||||||
(*t)[i]->Error("non-record in base type list");
|
|
||||||
|
|
||||||
RecordType* rti = ti->AsRecordType();
|
|
||||||
int n = rti->NumFields();
|
|
||||||
|
|
||||||
for ( int j = 0; j < n; ++j )
|
|
||||||
{
|
|
||||||
const TypeDecl* tdij = rti->FieldDecl(j);
|
|
||||||
|
|
||||||
if ( fields->Lookup(tdij->id) )
|
|
||||||
{
|
|
||||||
reporter->Error("duplicate field %s", tdij->id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
RecordField* rf = new RecordField(i, j, fields->Length());
|
|
||||||
|
|
||||||
if ( fields->Insert(tdij->id, rf) )
|
|
||||||
Internal("duplicate field when constructing record");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
num_fields = fields->Length();
|
|
||||||
}
|
|
||||||
|
|
||||||
RecordType::~RecordType()
|
RecordType::~RecordType()
|
||||||
{
|
{
|
||||||
if ( types )
|
if ( types )
|
||||||
|
@ -953,9 +891,6 @@ RecordType::~RecordType()
|
||||||
|
|
||||||
delete types;
|
delete types;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete fields;
|
|
||||||
Unref(base);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int RecordType::HasField(const char* field) const
|
int RecordType::HasField(const char* field) const
|
||||||
|
@ -971,17 +906,7 @@ BroType* RecordType::FieldType(const char* field) const
|
||||||
|
|
||||||
BroType* RecordType::FieldType(int field) const
|
BroType* RecordType::FieldType(int field) const
|
||||||
{
|
{
|
||||||
if ( types )
|
|
||||||
return (*types)[field]->type;
|
return (*types)[field]->type;
|
||||||
else
|
|
||||||
{
|
|
||||||
RecordField* rf = fields->NthEntry(field);
|
|
||||||
if ( ! rf )
|
|
||||||
Internal("missing field in RecordType::FieldType");
|
|
||||||
BroType* bt = (*base->Types())[rf->base];
|
|
||||||
RecordType* rbt = bt->AsRecordType();
|
|
||||||
return rbt->FieldType(rf->offset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Val* RecordType::FieldDefault(int field) const
|
Val* RecordType::FieldDefault(int field) const
|
||||||
|
@ -997,8 +922,6 @@ Val* RecordType::FieldDefault(int field) const
|
||||||
}
|
}
|
||||||
|
|
||||||
int RecordType::FieldOffset(const char* field) const
|
int RecordType::FieldOffset(const char* field) const
|
||||||
{
|
|
||||||
if ( types )
|
|
||||||
{
|
{
|
||||||
loop_over_list(*types, i)
|
loop_over_list(*types, i)
|
||||||
{
|
{
|
||||||
|
@ -1010,16 +933,6 @@ int RecordType::FieldOffset(const char* field) const
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RecordField* rf = fields->Lookup(field);
|
|
||||||
if ( ! rf )
|
|
||||||
return -1;
|
|
||||||
else
|
|
||||||
return rf->total_offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* RecordType::FieldName(int field) const
|
const char* RecordType::FieldName(int field) const
|
||||||
{
|
{
|
||||||
return FieldDecl(field)->id;
|
return FieldDecl(field)->id;
|
||||||
|
@ -1027,33 +940,12 @@ const char* RecordType::FieldName(int field) const
|
||||||
|
|
||||||
const TypeDecl* RecordType::FieldDecl(int field) const
|
const TypeDecl* RecordType::FieldDecl(int field) const
|
||||||
{
|
{
|
||||||
if ( types )
|
|
||||||
return (*types)[field];
|
return (*types)[field];
|
||||||
else
|
|
||||||
{
|
|
||||||
RecordField* rf = fields->NthEntry(field);
|
|
||||||
if ( ! rf )
|
|
||||||
reporter->InternalError("missing field in RecordType::FieldDecl");
|
|
||||||
|
|
||||||
BroType* bt = (*base->Types())[rf->base];
|
|
||||||
RecordType* rbt = bt->AsRecordType();
|
|
||||||
return rbt->FieldDecl(rf->offset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeDecl* RecordType::FieldDecl(int field)
|
TypeDecl* RecordType::FieldDecl(int field)
|
||||||
{
|
{
|
||||||
if ( types )
|
|
||||||
return (*types)[field];
|
return (*types)[field];
|
||||||
else
|
|
||||||
{
|
|
||||||
RecordField* rf = fields->NthEntry(field);
|
|
||||||
if ( ! rf )
|
|
||||||
Internal("missing field in RecordType::FieldDecl");
|
|
||||||
BroType* bt = (*base->Types())[rf->base];
|
|
||||||
RecordType* rbt = bt->AsRecordType();
|
|
||||||
return rbt->FieldDecl(rf->offset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecordType::Describe(ODesc* d) const
|
void RecordType::Describe(ODesc* d) const
|
||||||
|
@ -1151,11 +1043,6 @@ void RecordType::DescribeFields(ODesc* d) const
|
||||||
d->SP();
|
d->SP();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
d->AddCount(1);
|
|
||||||
base->Describe(d);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1208,9 +1095,6 @@ bool RecordType::DoSerialize(SerialInfo* info) const
|
||||||
else if ( ! SERIALIZE(false) )
|
else if ( ! SERIALIZE(false) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SERIALIZE_OPTIONAL(base);
|
|
||||||
|
|
||||||
// We don't serialize the fields as we can reconstruct them.
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1245,13 +1129,6 @@ bool RecordType::DoUnserialize(UnserialInfo* info)
|
||||||
else
|
else
|
||||||
types = 0;
|
types = 0;
|
||||||
|
|
||||||
BroType* type;
|
|
||||||
UNSERIALIZE_OPTIONAL(type, BroType::Unserialize(info, TYPE_LIST));
|
|
||||||
base = (TypeList*) type;
|
|
||||||
|
|
||||||
if ( base )
|
|
||||||
Init(base);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1594,21 +1471,6 @@ bool VectorType::DoUnserialize(UnserialInfo* info)
|
||||||
return yield_type != 0;
|
return yield_type != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
BroType* refine_type(TypeList* base, type_decl_list* refinements)
|
|
||||||
{
|
|
||||||
type_list* t = base->Types();
|
|
||||||
|
|
||||||
if ( t->length() == 1 && ! refinements )
|
|
||||||
{ // Just a direct reference to a single type.
|
|
||||||
BroType* rt = (*t)[0]->Ref();
|
|
||||||
Unref(base);
|
|
||||||
return rt;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RecordType(base, refinements);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BroType* base_type(TypeTag tag)
|
BroType* base_type(TypeTag tag)
|
||||||
{
|
{
|
||||||
static BroType* base_types[NUM_TYPES];
|
static BroType* base_types[NUM_TYPES];
|
||||||
|
|
21
src/Type.h
21
src/Type.h
|
@ -426,20 +426,9 @@ public:
|
||||||
std::list<std::string>* comments;
|
std::list<std::string>* comments;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RecordField {
|
|
||||||
public:
|
|
||||||
RecordField(int arg_base, int arg_offset, int arg_total_offset);
|
|
||||||
|
|
||||||
int base; // which base element it belongs to
|
|
||||||
int offset; // where it is in that base
|
|
||||||
int total_offset; // where it is in the aggregate record
|
|
||||||
};
|
|
||||||
declare(PDict,RecordField);
|
|
||||||
|
|
||||||
class RecordType : public BroType {
|
class RecordType : public BroType {
|
||||||
public:
|
public:
|
||||||
RecordType(type_decl_list* types);
|
RecordType(type_decl_list* types);
|
||||||
RecordType(TypeList* base, type_decl_list* refinements);
|
|
||||||
|
|
||||||
~RecordType();
|
~RecordType();
|
||||||
|
|
||||||
|
@ -473,15 +462,11 @@ public:
|
||||||
void DescribeFieldsReST(ODesc* d, bool func_args) const;
|
void DescribeFieldsReST(ODesc* d, bool func_args) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RecordType() { fields = 0; base = 0; types = 0; }
|
RecordType() { types = 0; }
|
||||||
|
|
||||||
void Init(TypeList* arg_base);
|
|
||||||
|
|
||||||
DECLARE_SERIAL(RecordType)
|
DECLARE_SERIAL(RecordType)
|
||||||
|
|
||||||
int num_fields;
|
int num_fields;
|
||||||
PDict(RecordField)* fields;
|
|
||||||
TypeList* base;
|
|
||||||
type_decl_list* types;
|
type_decl_list* types;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -587,10 +572,6 @@ protected:
|
||||||
BroType* yield_type;
|
BroType* yield_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Returns the given type refinement, or error_type() if it's illegal.
|
|
||||||
extern BroType* refine_type(TypeList* base, type_decl_list* refinements);
|
|
||||||
|
|
||||||
// Returns the BRO basic (non-parameterized) type with the given type.
|
// Returns the BRO basic (non-parameterized) type with the given type.
|
||||||
extern BroType* base_type(TypeTag tag);
|
extern BroType* base_type(TypeTag tag);
|
||||||
|
|
||||||
|
|
15
src/parse.y
15
src/parse.y
|
@ -2,7 +2,7 @@
|
||||||
// See the file "COPYING" in the main distribution directory for copyright.
|
// See the file "COPYING" in the main distribution directory for copyright.
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%expect 88
|
%expect 87
|
||||||
|
|
||||||
%token TOK_ADD TOK_ADD_TO TOK_ADDR TOK_ANY
|
%token TOK_ADD TOK_ADD_TO TOK_ADDR TOK_ANY
|
||||||
%token TOK_ATENDIF TOK_ATELSE TOK_ATIF TOK_ATIFDEF TOK_ATIFNDEF
|
%token TOK_ATENDIF TOK_ATELSE TOK_ATIF TOK_ATIFDEF TOK_ATIFNDEF
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
%type <expr> expr init anonymous_function
|
%type <expr> expr init anonymous_function
|
||||||
%type <event_expr> event
|
%type <event_expr> event
|
||||||
%type <stmt> stmt stmt_list func_body for_head
|
%type <stmt> stmt stmt_list func_body for_head
|
||||||
%type <type> type opt_type refined_type enum_body
|
%type <type> type opt_type enum_body
|
||||||
%type <func_type> func_hdr func_params
|
%type <func_type> func_hdr func_params
|
||||||
%type <type_l> type_list
|
%type <type_l> type_list
|
||||||
%type <type_decl> type_decl formal_args_decl
|
%type <type_decl> type_decl formal_args_decl
|
||||||
|
@ -1104,7 +1104,7 @@ decl:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
| TOK_TYPE global_id ':' refined_type opt_attr ';'
|
| TOK_TYPE global_id ':' type opt_attr ';'
|
||||||
{
|
{
|
||||||
add_type($2, $4, $5, 0);
|
add_type($2, $4, $5, 0);
|
||||||
|
|
||||||
|
@ -1134,7 +1134,7 @@ decl:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
| TOK_EVENT event_id ':' refined_type opt_attr ';'
|
| TOK_EVENT event_id ':' type_list opt_attr ';'
|
||||||
{
|
{
|
||||||
add_type($2, $4, $5, 1);
|
add_type($2, $4, $5, 1);
|
||||||
|
|
||||||
|
@ -1220,13 +1220,6 @@ func_params:
|
||||||
{ $$ = new FuncType($2, base_type(TYPE_VOID), 0); }
|
{ $$ = new FuncType($2, base_type(TYPE_VOID), 0); }
|
||||||
;
|
;
|
||||||
|
|
||||||
refined_type:
|
|
||||||
type_list '{' type_decl_list '}'
|
|
||||||
{ $$ = refine_type($1, $3); }
|
|
||||||
| type_list
|
|
||||||
{ $$ = refine_type($1, 0); }
|
|
||||||
;
|
|
||||||
|
|
||||||
opt_type:
|
opt_type:
|
||||||
':' type
|
':' type
|
||||||
{ $$ = $2; }
|
{ $$ = $2; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue