Merge remote-tracking branch 'origin/topic/etyp/type-const'

* origin/topic/etyp/type-const:
  Make types into constants
This commit is contained in:
Tim Wojtulewicz 2025-01-24 15:47:15 -07:00
commit 99023b14d5
6 changed files with 84 additions and 33 deletions

14
CHANGES
View file

@ -1,3 +1,17 @@
7.2.0-dev.122 | 2025-01-24 15:47:15 -0700
* Make types into constants (Evan Typanski, Corelight)
This allows types to be used in expressions, but they can't be
reassigned. Note that this was meant to be a special "type expression" -
but that is unnecessary complexity.
Type expressions would allow access to the type without going through
its constant value, but the constant value is never changed, so it's
simply a few more checks if necessary when functionality gets expanded.
This way, ZAM and other code will not need updates, so the potential for
increased work in the future is probably not worth caring about.
7.2.0-dev.116 | 2025-01-24 11:42:14 -0700
* Fix errors from rst linting on the generated docs (Tim Wojtulewicz, Corelight)

3
NEWS
View file

@ -16,6 +16,9 @@ New Functionality
Zeek now raises a warning when a script declares these events while this
option is set to true.
- Types can now be used as constants in Zeek script. This allows types to be
directly passed into BIFs without aliasing.
Changed Functionality
---------------------

View file

@ -1 +1 @@
7.2.0-dev.116
7.2.0-dev.122

View file

@ -64,7 +64,7 @@
%type <expr> expr opt_expr rhs opt_init anonymous_function lambda_body index_slice opt_deprecated when_condition
%type <event_expr> event
%type <stmt> stmt stmt_list func_body for_head
%type <type> type opt_type enum_body
%type <type> simple_type type opt_type enum_body
%type <func_type> func_hdr func_params
%type <type_l> type_list
%type <type_decl> type_decl formal_args_decl
@ -1026,6 +1026,13 @@ expr:
$$ = new ConstExpr({AdoptRef{}, $1});
}
| simple_type
{
set_location(@1);
TypePtr ty{AdoptRef(), $1};
$$ = new ConstExpr(make_intrusive<TypeVal>(ty, true));
}
| '/' { begin_RE(); } TOK_PATTERN_TEXT TOK_PATTERN_END
{
set_location(@3);
@ -1153,63 +1160,75 @@ enum_body_elem:
}
;
type:
TOK_BOOL {
simple_type:
TOK_BOOL
{
set_location(@1);
$$ = base_type(TYPE_BOOL)->Ref();
}
| TOK_INT {
| TOK_INT
{
set_location(@1);
$$ = base_type(TYPE_INT)->Ref();
}
| TOK_COUNT {
| TOK_COUNT
{
set_location(@1);
$$ = base_type(TYPE_COUNT)->Ref();
}
| TOK_DOUBLE {
| TOK_DOUBLE
{
set_location(@1);
$$ = base_type(TYPE_DOUBLE)->Ref();
}
| TOK_TIME {
| TOK_TIME
{
set_location(@1);
$$ = base_type(TYPE_TIME)->Ref();
}
| TOK_INTERVAL {
| TOK_INTERVAL
{
set_location(@1);
$$ = base_type(TYPE_INTERVAL)->Ref();
}
| TOK_STRING {
| TOK_STRING
{
set_location(@1);
$$ = base_type(TYPE_STRING)->Ref();
}
| TOK_PATTERN {
| TOK_PATTERN
{
set_location(@1);
$$ = base_type(TYPE_PATTERN)->Ref();
}
| TOK_PORT {
| TOK_PORT
{
set_location(@1);
$$ = base_type(TYPE_PORT)->Ref();
}
| TOK_ADDR {
| TOK_ADDR
{
set_location(@1);
$$ = base_type(TYPE_ADDR)->Ref();
}
| TOK_SUBNET {
| TOK_SUBNET
{
set_location(@1);
$$ = base_type(TYPE_SUBNET)->Ref();
}
| TOK_ANY {
| TOK_ANY
{
set_location(@1);
$$ = base_type(TYPE_ANY)->Ref();
}
@ -1265,24 +1284,6 @@ type:
$$ = new VectorType({AdoptRef{}, $3});
}
| TOK_FUNCTION func_params
{
set_location(@1, @2);
$$ = $2;
}
| TOK_EVENT '(' formal_args ')'
{
set_location(@1, @3);
$$ = new FuncType({AdoptRef{}, $3}, nullptr, FUNC_FLAVOR_EVENT);
}
| TOK_HOOK '(' formal_args ')'
{
set_location(@1, @3);
$$ = new FuncType({AdoptRef{}, $3}, base_type(TYPE_BOOL), FUNC_FLAVOR_HOOK);
}
| TOK_FILE TOK_OF type
{
set_location(@1, @3);
@ -1301,6 +1302,26 @@ type:
$$ = new OpaqueType($3);
}
type:
simple_type
| TOK_FUNCTION func_params
{
set_location(@1, @2);
$$ = $2;
}
| TOK_HOOK '(' formal_args ')'
{
set_location(@1, @3);
$$ = new FuncType({AdoptRef{}, $3}, base_type(TYPE_BOOL), FUNC_FLAVOR_HOOK);
}
| TOK_EVENT '(' formal_args ')'
{
set_location(@1, @3);
$$ = new FuncType({AdoptRef{}, $3}, nullptr, FUNC_FLAVOR_EVENT);
}
| resolve_id
{
if ( ! $1 || ! ($$ = $1->IsType() ? $1->GetType().get() : nullptr) )

View file

@ -0,0 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=aoeu, valid=T]
type

View file

@ -0,0 +1,10 @@
# @TEST-DOC: Test valid use of type expressions in scripts
# @TEST-EXEC: zeek -b %INPUT
# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff .stdout
event zeek_init()
{
# Try a couple of functions that take types
print from_json("\"aoeu\"", string);
print type_name(string);
}