diff --git a/CHANGES b/CHANGES index 5031164c7e..66deb2f238 100644 --- a/CHANGES +++ b/CHANGES @@ -1,17 +1,3 @@ -7.2.0-dev.118 | 2025-01-24 15:42:51 -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) diff --git a/NEWS b/NEWS index 6a6c2a04be..b0e99cb9c3 100644 --- a/NEWS +++ b/NEWS @@ -16,9 +16,6 @@ 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 --------------------- diff --git a/VERSION b/VERSION index 52178fa2fe..b5b111d81e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.0-dev.118 +7.2.0-dev.116 diff --git a/src/parse.y b/src/parse.y index 06286dfa24..eac4d95c4e 100644 --- a/src/parse.y +++ b/src/parse.y @@ -64,7 +64,7 @@ %type expr opt_expr rhs opt_init anonymous_function lambda_body index_slice opt_deprecated when_condition %type event %type stmt stmt_list func_body for_head -%type simple_type type opt_type enum_body +%type type opt_type enum_body %type func_hdr func_params %type type_list %type type_decl formal_args_decl @@ -765,10 +765,6 @@ expr: reporter->Error("index slice assignment may not be used" " in arbitrary expression contexts, only" " as a statement"); - // Type types cannot be reassigned because that could require parse-time - // control flow to resolve a variable's type - if ( $1->Tag() == EXPR_NAME && $1->GetType()->Tag() == TYPE_TYPE ) - $1->Error("type variables cannot be reassigned"); $$ = get_assign_expr({AdoptRef{}, $1}, {AdoptRef{}, $4}, in_init).release(); } @@ -1030,13 +1026,6 @@ expr: $$ = new ConstExpr({AdoptRef{}, $1}); } - | simple_type - { - set_location(@1); - TypePtr ty{AdoptRef(), $1}; - $$ = new ConstExpr(make_intrusive(ty, true)); - } - | '/' { begin_RE(); } TOK_PATTERN_TEXT TOK_PATTERN_END { set_location(@3); @@ -1164,75 +1153,63 @@ enum_body_elem: } ; -simple_type: - TOK_BOOL - { +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(); } @@ -1288,6 +1265,24 @@ simple_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); @@ -1306,31 +1301,9 @@ simple_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->GetType()->Tag() == TYPE_TYPE ) - $$ = $1->GetType()->AsTypeType()->GetType()->Ref(); - else if ( ! $1 || ! ($$ = $1->IsType() ? $1->GetType().get() : nullptr) ) + if ( ! $1 || ! ($$ = $1->IsType() ? $1->GetType().get() : nullptr) ) { NullStmt here; if ( $1 ) diff --git a/testing/btest/Baseline/language.type-expr-assignment/.stderr b/testing/btest/Baseline/language.type-expr-assignment/.stderr deleted file mode 100644 index cc3e8e6964..0000000000 --- a/testing/btest/Baseline/language.type-expr-assignment/.stderr +++ /dev/null @@ -1,2 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error in <...>/type-expr-assignment.zeek, line 8: type variables cannot be reassigned (str) diff --git a/testing/btest/Baseline/language.type-expr/.stdout b/testing/btest/Baseline/language.type-expr/.stdout deleted file mode 100644 index 08b4f709b2..0000000000 --- a/testing/btest/Baseline/language.type-expr/.stdout +++ /dev/null @@ -1,6 +0,0 @@ -### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -hi there :) -hey!! -42 -[v=aoeu, valid=T] -type diff --git a/testing/btest/language/type-expr-assignment.zeek b/testing/btest/language/type-expr-assignment.zeek deleted file mode 100644 index 7311fef4a7..0000000000 --- a/testing/btest/language/type-expr-assignment.zeek +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-DOC: Ensure redefining a type expression ID is an error -# @TEST-EXEC-FAIL: zeek -b %INPUT -# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr - -event zeek_init() - { - local str = string; - str = count; - local my_string: str = "aoeu"; # This will still be a string - print my_string; - } diff --git a/testing/btest/language/type-expr.zeek b/testing/btest/language/type-expr.zeek deleted file mode 100644 index fe64754a74..0000000000 --- a/testing/btest/language/type-expr.zeek +++ /dev/null @@ -1,23 +0,0 @@ -# @TEST-DOC: Test valid use of type expressions in scripts -# @TEST-EXEC: zeek -b %INPUT -# @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff .stdout - -global global_str = string; -global my_global_string: global_str = "hey!!"; - -event zeek_init() - { - local str = string; - local my_string: str = "hi there :)"; - print my_string; - print my_global_string; - - local integer = int; - local my_int: integer = 41; - my_int += 1; - print my_int; - - # Try a couple of functions that take types - print from_json("\"aoeu\"", string); - print type_name(string); - }