Merge remote-tracking branch 'origin/topic/vern/any-typetype-when-fix'

- Minor whitespace adjutment in merge

* origin/topic/vern/any-typetype-when-fix:
  bug fixes for using "when" in functions that have a local of type "any"
This commit is contained in:
Jon Siwek 2020-04-27 13:33:40 -07:00
commit b776f17cea
5 changed files with 32 additions and 2 deletions

View file

@ -1615,7 +1615,12 @@ bool same_type(const BroType* t1, const BroType* t2, bool is_init, bool match_re
} }
case TYPE_TYPE: case TYPE_TYPE:
return same_type(t1, t2, is_init, match_record_field_names); {
auto tt1 = t1->AsTypeType();
auto tt2 = t2->AsTypeType();
return same_type(tt1->Type(), tt1->Type(),
is_init, match_record_field_names);
}
case TYPE_UNION: case TYPE_UNION:
reporter->Error("union type in same_type()"); reporter->Error("union type in same_type()");

View file

@ -506,7 +506,8 @@ public:
explicit TypeType(IntrusivePtr<BroType> t) : BroType(TYPE_TYPE), type(std::move(t)) {} explicit TypeType(IntrusivePtr<BroType> t) : BroType(TYPE_TYPE), type(std::move(t)) {}
TypeType* ShallowClone() override { return new TypeType(type); } TypeType* ShallowClone() override { return new TypeType(type); }
BroType* Type() { return type.get(); } BroType* Type() { return type.get(); }
const BroType* Type() const { return type.get(); }
protected: protected:
IntrusivePtr<BroType> type; IntrusivePtr<BroType> type;

View file

@ -136,6 +136,10 @@ IntrusivePtr<Val> Val::DoClone(CloneState* state)
return {NewRef{}, this}; return {NewRef{}, this};
} }
if ( type->Tag() == TYPE_TYPE )
// These are immutable, essentially.
return {NewRef{}, this};
// Fall-through. // Fall-through.
default: default:

View file

@ -0,0 +1 @@
9

View file

@ -0,0 +1,19 @@
# @TEST-EXEC: zeek -b %INPUT >out
# @TEST-EXEC: btest-diff out
type c: count;
function foo(): count
{
local bar: any;
bar = c;
return when ( 5 > 3 )
{
return 9;
}
}
event zeek_init()
{
when ( local b = foo() )
print b;
}