about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-01-23T12·54+0200
committerflokli <flokli@flokli.de>2024-01-24T14·00+0000
commite1d25891638597b0085033fd99814fce83fab4b9 (patch)
tree60f8250dfe2780430e3cbc0ae810426955094ca7
parentadff7be4d15e9c038e1600559d5d7226023c3c73 (diff)
fix(tvix/eval/value/function): use BTreeMap for function arg names r/7447
At least toXML wants to get these out in a sorted fashion.

Change-Id: I6373d7488fff7c40dc2ddeeecd03ba537c92c4af
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10685
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
-rw-r--r--tvix/eval/src/compiler/mod.rs4
-rw-r--r--tvix/eval/src/value/function.rs6
2 files changed, 5 insertions, 5 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs
index 5e0c1899c0e5..4bb734290c3e 100644
--- a/tvix/eval/src/compiler/mod.rs
+++ b/tvix/eval/src/compiler/mod.rs
@@ -21,7 +21,7 @@ mod scope;
 use codemap::Span;
 use rnix::ast::{self, AstToken};
 use smol_str::SmolStr;
-use std::collections::HashMap;
+use std::collections::{BTreeMap, HashMap};
 use std::path::{Path, PathBuf};
 use std::rc::{Rc, Weak};
 use std::sync::Arc;
@@ -994,7 +994,7 @@ impl Compiler<'_> {
         // the bindings to first declare them, then populate them, and
         // then finalise any necessary recursion into the scope.
         let mut entries: Vec<TrackedFormal> = vec![];
-        let mut arguments = HashMap::default();
+        let mut arguments = BTreeMap::default();
 
         for entry in pattern.pat_entries() {
             let ident = entry.ident().unwrap();
diff --git a/tvix/eval/src/value/function.rs b/tvix/eval/src/value/function.rs
index 77ac7112d2cb..8131cffa0230 100644
--- a/tvix/eval/src/value/function.rs
+++ b/tvix/eval/src/value/function.rs
@@ -1,5 +1,5 @@
 //! This module implements the runtime representation of functions.
-use std::{collections::HashMap, hash::Hash, rc::Rc};
+use std::{collections::BTreeMap, hash::Hash, rc::Rc};
 
 use codemap::Span;
 use smol_str::SmolStr;
@@ -11,7 +11,7 @@ use super::NixString;
 #[derive(Clone, Debug, PartialEq)]
 pub(crate) struct Formals {
     /// Map from argument name, to whether that argument is required
-    pub(crate) arguments: HashMap<NixString, bool>,
+    pub(crate) arguments: BTreeMap<NixString, bool>,
 
     /// Do the formals of this function accept extra arguments
     pub(crate) ellipsis: bool,
@@ -27,7 +27,7 @@ impl Formals {
     /// ellipsis
     pub(crate) fn contains<Q>(&self, arg: &Q) -> bool
     where
-        Q: ?Sized + Hash + Eq,
+        Q: ?Sized + Hash + Ord + Eq,
         NixString: std::borrow::Borrow<Q>,
     {
         self.ellipsis || self.arguments.contains_key(arg)