summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eval/dict.rs2
-rw-r--r--tests/typ/compiler/dict.typ6
2 files changed, 7 insertions, 1 deletions
diff --git a/src/eval/dict.rs b/src/eval/dict.rs
index 1b28a6ba..49a60147 100644
--- a/src/eval/dict.rs
+++ b/src/eval/dict.rs
@@ -88,7 +88,7 @@ impl Dict {
/// Remove a mapping by `key` and return the value.
pub fn remove(&mut self, key: &str) -> StrResult<Value> {
- match Arc::make_mut(&mut self.0).remove(key) {
+ match Arc::make_mut(&mut self.0).shift_remove(key) {
Some(value) => Ok(value),
None => Err(missing_key(key)),
}
diff --git a/tests/typ/compiler/dict.typ b/tests/typ/compiler/dict.typ
index fd95920b..6a2f1c7c 100644
--- a/tests/typ/compiler/dict.typ
+++ b/tests/typ/compiler/dict.typ
@@ -61,6 +61,12 @@
#test(dict, (a: 3, b: 1))
---
+// Test that removal keeps order.
+#let dict = (a: 1, b: 2, c: 3, d: 4)
+#dict.remove("b")
+#test(dict.keys(), ("a", "c", "d"))
+
+---
// Error: 24-29 duplicate key: first
#(first: 1, second: 2, first: 3)