diff --git a/CHANGES b/CHANGES index d315005341..6845f6d1f5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +8.0.0-dev.382 | 2025-06-06 17:33:39 +0200 + + * Fix `&ordered` attribute not preserved in table initializer assignments (赵富鹏) + 8.0.0-dev.380 | 2025-06-06 10:26:17 +0200 * docker: Add `net-tools` and `procps` dependencies (Edoardo Mich) diff --git a/VERSION b/VERSION index 4c23709aab..e4df050a75 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.0.0-dev.380 +8.0.0-dev.382 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); + } }