From d4528162d129b4b5abf841f124bd90c063b3e01f Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 9 Nov 2020 19:03:42 -0800 Subject: [PATCH] GH-1273: Change SizeExpr to yield "any" type when operating on "any" --- src/Expr.cc | 4 +++- .../btest/Baseline/language.sizeof-any/error | 2 ++ .../btest/Baseline/language.sizeof-any/output | 6 ++++++ testing/btest/language/sizeof-any.zeek | 20 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 testing/btest/Baseline/language.sizeof-any/error create mode 100644 testing/btest/Baseline/language.sizeof-any/output create mode 100644 testing/btest/language/sizeof-any.zeek diff --git a/src/Expr.cc b/src/Expr.cc index ba8370065b..16df1bf79a 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -1162,7 +1162,9 @@ SizeExpr::SizeExpr(ExprPtr arg_op) if ( IsError() ) return; - if ( op->GetType()->InternalType() == TYPE_INTERNAL_DOUBLE ) + if ( op->GetType()->Tag() == TYPE_ANY ) + SetType(base_type(TYPE_ANY)); + else if ( op->GetType()->InternalType() == TYPE_INTERNAL_DOUBLE ) SetType(base_type(TYPE_DOUBLE)); else SetType(base_type(TYPE_COUNT)); diff --git a/testing/btest/Baseline/language.sizeof-any/error b/testing/btest/Baseline/language.sizeof-any/error new file mode 100644 index 0000000000..7d3ba6bc34 --- /dev/null +++ b/testing/btest/Baseline/language.sizeof-any/error @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in ./lacks-type-cast.zeek, line 3: requires arithmetic operands (1 + aa) diff --git a/testing/btest/Baseline/language.sizeof-any/output b/testing/btest/Baseline/language.sizeof-any/output new file mode 100644 index 0000000000..8dbf1d1ecb --- /dev/null +++ b/testing/btest/Baseline/language.sizeof-any/output @@ -0,0 +1,6 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +13.0, time +13.0, double +13.0, double +14.0 +14.0 diff --git a/testing/btest/language/sizeof-any.zeek b/testing/btest/language/sizeof-any.zeek new file mode 100644 index 0000000000..d9102edfcb --- /dev/null +++ b/testing/btest/language/sizeof-any.zeek @@ -0,0 +1,20 @@ +# @TEST-EXEC: zeek -b %INPUT >output 2>&1 +# @TEST-EXEC: btest-diff output + +# @TEST-EXEC-FAIL: zeek -b lacks-type-cast.zeek >error 2>&1 +# @TEST-EXEC: btest-diff error + +local a: any = double_to_time(13.0); +local aa = |a|; +local aaa = |a as time|; +print a, type_name(a); +print aa, type_name(aa); +print aaa, type_name(aaa); +print 1 + (aa as double); +print 1 + aaa; + +@TEST-START-FILE lacks-type-cast.zeek +local a: any = double_to_time(13.0); +local aa = |a|; +print 1 + aa; +@TEST-END-FILE