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:
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:
reporter->Error("union type in same_type()");

View file

@ -507,6 +507,7 @@ public:
TypeType* ShallowClone() override { return new TypeType(type); }
BroType* Type() { return type.get(); }
const BroType* Type() const { return type.get(); }
protected:
IntrusivePtr<BroType> type;

View file

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