Skip to content

Commit 4640be4

Browse files
committed
PyFuncArgs Kwargs defaults to IndexMap
1 parent 83f6dd7 commit 4640be4

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

vm/src/function.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,10 @@ impl<T: TryFromObject> FromArgOptional for T {
278278
/// KwArgs is only for functions that accept arbitrary keyword arguments. For
279279
/// functions that accept only *specific* named arguments, a rust struct with
280280
/// an appropriate FromArgs implementation must be created.
281-
pub struct KwArgs<T = PyObjectRef>(HashMap<String, T>);
281+
pub struct KwArgs<T = PyObjectRef>(IndexMap<String, T>);
282282

283283
impl<T> KwArgs<T> {
284-
pub fn new(map: HashMap<String, T>) -> Self {
284+
pub fn new(map: IndexMap<String, T>) -> Self {
285285
KwArgs(map)
286286
}
287287

@@ -290,13 +290,13 @@ impl<T> KwArgs<T> {
290290
}
291291
}
292292
impl<T> From<HashMap<String, T>> for KwArgs<T> {
293-
fn from(map: HashMap<String, T>) -> Self {
294-
KwArgs(map)
293+
fn from(kwargs: HashMap<String, T>) -> Self {
294+
KwArgs(kwargs.into_iter().collect())
295295
}
296296
}
297297
impl<T> Default for KwArgs<T> {
298298
fn default() -> Self {
299-
KwArgs(HashMap::new())
299+
KwArgs(IndexMap::new())
300300
}
301301
}
302302

@@ -305,7 +305,7 @@ where
305305
T: TryFromObject,
306306
{
307307
fn from_args(vm: &VirtualMachine, args: &mut PyFuncArgs) -> Result<Self, ArgumentError> {
308-
let mut kwargs = HashMap::new();
308+
let mut kwargs = IndexMap::new();
309309
for (name, value) in args.remaining_keywords() {
310310
kwargs.insert(name, T::try_from_object(vm, value)?);
311311
}
@@ -315,7 +315,7 @@ where
315315

316316
impl<T> IntoIterator for KwArgs<T> {
317317
type Item = (String, T);
318-
type IntoIter = std::collections::hash_map::IntoIter<String, T>;
318+
type IntoIter = indexmap::map::IntoIter<String, T>;
319319

320320
fn into_iter(self) -> Self::IntoIter {
321321
self.0.into_iter()

vm/src/stdlib/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1253,7 +1253,7 @@ mod _io {
12531253
&file_io_class,
12541254
PyFuncArgs::from((
12551255
Args::new(vec![file, vm.ctx.new_str(mode.clone())]),
1256-
KwArgs::new(maplit::hashmap! {
1256+
KwArgs::from(maplit::hashmap! {
12571257
"closefd".to_owned() => vm.ctx.new_bool(opts.closefd),
12581258
"opener".to_owned() => vm.unwrap_or_none(opts.opener),
12591259
}),

0 commit comments

Comments
 (0)