From 074faf202fe19618ee0f6ab5c8a37fdb401d29b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=AF=8C=E9=B9=8F?= Date: Wed, 4 Jun 2025 17:07:34 +0800 Subject: [PATCH] Fix `&ordered` attribute not preserved in table initializer assignments --- src/Var.cc | 2 +- .../btest/Baseline/language.set-iteration/out | 18 ++++++++++++++++++ .../Baseline/language.table-iteration/out | 9 +++++++++ testing/btest/language/set-iteration.zeek | 15 +++++++++++++++ testing/btest/language/table-iteration.zeek | 15 +++++++++++++++ 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/Var.cc b/src/Var.cc index cef01d6ff4..5df4746aa4 100644 --- a/src/Var.cc +++ b/src/Var.cc @@ -142,7 +142,7 @@ static ExprPtr initialize_var(const IDPtr& id, InitClass c, ExprPtr init) { ExprPtr assignment; if ( c == INIT_FULL ) - assignment = make_intrusive(lhs, init, false); + assignment = make_intrusive(lhs, init, false, nullptr, id->GetAttrs()); else if ( c == INIT_EXTRA ) assignment = make_intrusive(lhs, init); else if ( c == INIT_REMOVE ) diff --git a/testing/btest/Baseline/language.set-iteration/out b/testing/btest/Baseline/language.set-iteration/out index e859e0d929..79e7a37b2c 100644 --- a/testing/btest/Baseline/language.set-iteration/out +++ b/testing/btest/Baseline/language.set-iteration/out @@ -23,3 +23,21 @@ copy(ordered_sset) 3 4 5 +ordered_sset2 +foo +bar +baz +1 +2 +3 +4 +5 +copy(ordered_sset2) +foo +bar +baz +1 +2 +3 +4 +5 diff --git a/testing/btest/Baseline/language.table-iteration/out b/testing/btest/Baseline/language.table-iteration/out index 1845af6a24..56523d43df 100644 --- a/testing/btest/Baseline/language.table-iteration/out +++ b/testing/btest/Baseline/language.table-iteration/out @@ -1,7 +1,16 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +tbl 2 1 3 +tbl2 +1 +2 +3 +tbl3 +4 +5 +6 1 2 3 diff --git a/testing/btest/language/set-iteration.zeek b/testing/btest/language/set-iteration.zeek index 274fb917a6..2ad2c4fb6b 100644 --- a/testing/btest/language/set-iteration.zeek +++ b/testing/btest/language/set-iteration.zeek @@ -4,6 +4,12 @@ global sset: set[string]; global ordered_sset: set[string] &ordered; +global ordered_sset2: set[string] = { + "foo", + "bar", +} &ordered &redef; + +redef ordered_sset2 += { "baz" }; event zeek_init() { @@ -12,6 +18,7 @@ event zeek_init() { add sset[cat(i)]; add ordered_sset[cat(i)]; + add ordered_sset2[cat(i)]; } print "sset"; @@ -29,4 +36,12 @@ event zeek_init() print "copy(ordered_sset)"; for ( s in copy(ordered_sset) ) print s; + + print "ordered_sset2"; + for ( s in ordered_sset2 ) + print s; + + print "copy(ordered_sset2)"; + for ( s in copy(ordered_sset2) ) + print s; } diff --git a/testing/btest/language/table-iteration.zeek b/testing/btest/language/table-iteration.zeek index f17b791210..75f8228619 100644 --- a/testing/btest/language/table-iteration.zeek +++ b/testing/btest/language/table-iteration.zeek @@ -4,6 +4,12 @@ global tbl: table[count] of count; global tbl2: table[count] of count &ordered; +global tbl3: table[count] of count = { + [4] = 4, + [5] = 5, +} &ordered &redef; + +redef tbl3 += { [6] = 6 }; event zeek_init() { @@ -13,15 +19,24 @@ event zeek_init() ++i; tbl[i] = i; tbl2[i] = i; + tbl3[i] = i; } + print "tbl"; for ( [k], v in tbl ) { print(v); } + print "tbl2"; for ( [k], v in tbl2 ) { print(v); } + + print "tbl3"; + for ( [k], v in tbl3 ) + { + print(v); + } }