mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 09:38:19 +00:00
GH-786: fix Val::As methods casting incomplete types
This commit is contained in:
parent
5cba12444a
commit
902173a358
2 changed files with 59 additions and 33 deletions
30
src/Val.cc
30
src/Val.cc
|
@ -82,6 +82,36 @@ Val::~Val()
|
|||
#endif
|
||||
}
|
||||
|
||||
#define CONVERTER(tag, ctype, name) \
|
||||
ctype name() \
|
||||
{ \
|
||||
CHECK_TAG(type->Tag(), tag, "Val::CONVERTER", zeek::type_name) \
|
||||
return (ctype)(this); \
|
||||
}
|
||||
|
||||
#define CONST_CONVERTER(tag, ctype, name) \
|
||||
const ctype name() const \
|
||||
{ \
|
||||
CHECK_TAG(type->Tag(), tag, "Val::CONVERTER", zeek::type_name) \
|
||||
return (const ctype)(this); \
|
||||
}
|
||||
|
||||
#define CONVERTERS(tag, ctype, name) \
|
||||
CONVERTER(tag, ctype, name) \
|
||||
CONST_CONVERTER(tag, ctype, name)
|
||||
|
||||
CONVERTERS(zeek::TYPE_PATTERN, PatternVal*, Val::AsPatternVal)
|
||||
CONVERTERS(zeek::TYPE_PORT, PortVal*, Val::AsPortVal)
|
||||
CONVERTERS(zeek::TYPE_SUBNET, SubNetVal*, Val::AsSubNetVal)
|
||||
CONVERTERS(zeek::TYPE_ADDR, AddrVal*, Val::AsAddrVal)
|
||||
CONVERTERS(zeek::TYPE_TABLE, TableVal*, Val::AsTableVal)
|
||||
CONVERTERS(zeek::TYPE_RECORD, RecordVal*, Val::AsRecordVal)
|
||||
CONVERTERS(zeek::TYPE_LIST, ListVal*, Val::AsListVal)
|
||||
CONVERTERS(zeek::TYPE_STRING, StringVal*, Val::AsStringVal)
|
||||
CONVERTERS(zeek::TYPE_VECTOR, VectorVal*, Val::AsVectorVal)
|
||||
CONVERTERS(zeek::TYPE_ENUM, EnumVal*, Val::AsEnumVal)
|
||||
CONVERTERS(zeek::TYPE_OPAQUE, OpaqueVal*, Val::AsOpaqueVal)
|
||||
|
||||
IntrusivePtr<Val> Val::CloneState::NewClone(Val* src, IntrusivePtr<Val> dst)
|
||||
{
|
||||
clones.insert(std::make_pair(src, dst.get()));
|
||||
|
|
62
src/Val.h
62
src/Val.h
|
@ -277,42 +277,38 @@ public:
|
|||
bro_int_t ForceAsInt() const { return val.int_val; }
|
||||
bro_uint_t ForceAsUInt() const { return val.uint_val; }
|
||||
|
||||
#define CONVERTER(tag, ctype, name) \
|
||||
ctype name() \
|
||||
{ \
|
||||
CHECK_TAG(type->Tag(), tag, "Val::CONVERTER", zeek::type_name) \
|
||||
return (ctype)(this); \
|
||||
}
|
||||
PatternVal* AsPatternVal();
|
||||
const PatternVal* AsPatternVal() const;
|
||||
|
||||
CONVERTER(zeek::TYPE_PATTERN, PatternVal*, AsPatternVal)
|
||||
CONVERTER(zeek::TYPE_PORT, PortVal*, AsPortVal)
|
||||
CONVERTER(zeek::TYPE_SUBNET, SubNetVal*, AsSubNetVal)
|
||||
CONVERTER(zeek::TYPE_ADDR, AddrVal*, AsAddrVal)
|
||||
CONVERTER(zeek::TYPE_TABLE, TableVal*, AsTableVal)
|
||||
CONVERTER(zeek::TYPE_RECORD, RecordVal*, AsRecordVal)
|
||||
CONVERTER(zeek::TYPE_LIST, ListVal*, AsListVal)
|
||||
CONVERTER(zeek::TYPE_STRING, StringVal*, AsStringVal)
|
||||
CONVERTER(zeek::TYPE_VECTOR, VectorVal*, AsVectorVal)
|
||||
CONVERTER(zeek::TYPE_ENUM, EnumVal*, AsEnumVal)
|
||||
CONVERTER(zeek::TYPE_OPAQUE, OpaqueVal*, AsOpaqueVal)
|
||||
PortVal* AsPortVal();
|
||||
const PortVal* AsPortVal() const;
|
||||
|
||||
#define CONST_CONVERTER(tag, ctype, name) \
|
||||
const ctype name() const \
|
||||
{ \
|
||||
CHECK_TAG(type->Tag(), tag, "Val::CONVERTER", zeek::type_name) \
|
||||
return (const ctype)(this); \
|
||||
}
|
||||
SubNetVal* AsSubNetVal();
|
||||
const SubNetVal* AsSubNetVal() const;
|
||||
|
||||
CONST_CONVERTER(zeek::TYPE_PATTERN, PatternVal*, AsPatternVal)
|
||||
CONST_CONVERTER(zeek::TYPE_PORT, PortVal*, AsPortVal)
|
||||
CONST_CONVERTER(zeek::TYPE_SUBNET, SubNetVal*, AsSubNetVal)
|
||||
CONST_CONVERTER(zeek::TYPE_ADDR, AddrVal*, AsAddrVal)
|
||||
CONST_CONVERTER(zeek::TYPE_TABLE, TableVal*, AsTableVal)
|
||||
CONST_CONVERTER(zeek::TYPE_RECORD, RecordVal*, AsRecordVal)
|
||||
CONST_CONVERTER(zeek::TYPE_LIST, ListVal*, AsListVal)
|
||||
CONST_CONVERTER(zeek::TYPE_STRING, StringVal*, AsStringVal)
|
||||
CONST_CONVERTER(zeek::TYPE_VECTOR, VectorVal*, AsVectorVal)
|
||||
CONST_CONVERTER(zeek::TYPE_OPAQUE, OpaqueVal*, AsOpaqueVal)
|
||||
AddrVal* AsAddrVal();
|
||||
const AddrVal* AsAddrVal() const;
|
||||
|
||||
TableVal* AsTableVal();
|
||||
const TableVal* AsTableVal() const;
|
||||
|
||||
RecordVal* AsRecordVal();
|
||||
const RecordVal* AsRecordVal() const;
|
||||
|
||||
ListVal* AsListVal();
|
||||
const ListVal* AsListVal() const;
|
||||
|
||||
StringVal* AsStringVal();
|
||||
const StringVal* AsStringVal() const;
|
||||
|
||||
VectorVal* AsVectorVal();
|
||||
const VectorVal* AsVectorVal() const;
|
||||
|
||||
EnumVal* AsEnumVal();
|
||||
const EnumVal* AsEnumVal() const;
|
||||
|
||||
OpaqueVal* AsOpaqueVal();
|
||||
const OpaqueVal* AsOpaqueVal() const;
|
||||
|
||||
void Describe(ODesc* d) const override;
|
||||
virtual void DescribeReST(ODesc* d) const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue