Add opaque type to lexer, parser, and BroType.

This commit is contained in:
Matthias Vallentin 2012-11-28 19:49:46 -08:00
parent e2fdf16e0c
commit aba8275346
4 changed files with 69 additions and 1 deletions

View file

@ -96,6 +96,7 @@ BroType::BroType(TypeTag t, bool arg_base_type)
case TYPE_LIST:
case TYPE_FUNC:
case TYPE_FILE:
case TYPE_OPAQUE:
case TYPE_VECTOR:
case TYPE_TYPE:
internal_tag = TYPE_INTERNAL_OTHER;
@ -1262,6 +1263,42 @@ bool FileType::DoUnserialize(UnserialInfo* info)
return yield != 0;
}
OpaqueType::OpaqueType(const string& name)
: BroType(TYPE_OPAQUE), name(name)
{
}
void OpaqueType::Describe(ODesc* d) const
{
if ( d->IsReadable() )
d->AddSP("opaque of");
else
d->Add(int(Tag()));
d->Add(name.c_str());
}
// TODO: Serialization semantics not yet defined.
//
// IMPLEMENT_SERIAL(OpaqueType, SER_OPAQUE_TYPE);
//
// bool OpaqueType::DoSerialize(SerialInfo* info) const
// {
// DO_SERIALIZE(SER_OPAQUE_TYPE, BroType);
// return SERIALIZE(name);
// }
//
// bool OpaqueType::DoUnserialize(UnserialInfo* info)
// {
// DO_UNSERIALIZE(BroType);
//
// char const* n;
// if ( ! UNSERIALIZE_STR(&n, 0) );
// return false;
// name = n;
// return true;
// }
EnumType::EnumType(const string& arg_name)
: BroType(TYPE_ENUM)
{
@ -1716,6 +1753,10 @@ int same_type(const BroType* t1, const BroType* t2, int is_init)
case TYPE_FILE:
return same_type(t1->YieldType(), t2->YieldType(), is_init);
case TYPE_OPAQUE:
// FIXME: Should we downcast here and compare the opaque type names?
return 1;
case TYPE_TYPE:
return same_type(t1, t2, is_init);
@ -1805,6 +1846,7 @@ int is_assignable(BroType* t)
case TYPE_VECTOR:
case TYPE_FILE:
case TYPE_OPAQUE:
case TYPE_TABLE:
case TYPE_TYPE:
return 1;