From 3886f889ab96bca66d7d953dee3b06ca903385cd Mon Sep 17 00:00:00 2001 From: Narawit Rakket Date: Sat, 27 Nov 2021 15:01:02 +0700 Subject: [PATCH] Prepare to implement hash for tuple --- vm/src/builtins/range.rs | 11 ++++++----- vm/src/builtins/tuple.rs | 10 ++++++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/vm/src/builtins/range.rs b/vm/src/builtins/range.rs index fcc3a8fa5c..7a97e1061d 100644 --- a/vm/src/builtins/range.rs +++ b/vm/src/builtins/range.rs @@ -1,9 +1,10 @@ -use super::{PyInt, PyIntRef, PySlice, PyTupleRef, PyType, PyTypeRef}; -use crate::atomic_func; -use crate::common::hash::PyHash; +use super::{ + builtins_iter, tuple::tuple_hash, PyInt, PyIntRef, PySlice, PyTupleRef, PyType, PyTypeRef, +}; use crate::{ - builtins::builtins_iter, + atomic_func, class::PyClassImpl, + common::hash::PyHash, function::{FuncArgs, OptionalArg, PyComparisonValue}, protocol::{PyIterReturn, PyMappingMethods, PySequenceMethods}, types::{ @@ -442,7 +443,7 @@ impl Hashable for PyRange { zelf.step().into(), ] }; - crate::utils::hash_iter(elements.iter(), vm) + tuple_hash(&elements, vm) } } diff --git a/vm/src/builtins/tuple.rs b/vm/src/builtins/tuple.rs index 55c0c95d55..e89a854f1c 100644 --- a/vm/src/builtins/tuple.rs +++ b/vm/src/builtins/tuple.rs @@ -1,9 +1,9 @@ use once_cell::sync::Lazy; use super::{PositionIterInternal, PyGenericAlias, PyType, PyTypeRef}; -use crate::atomic_func; use crate::common::{hash::PyHash, lock::PyMutex}; use crate::{ + atomic_func, class::PyClassImpl, convert::{ToPyObject, TransmuteFromObject}, function::{OptionalArg, PyArithmeticValue, PyComparisonValue}, @@ -372,7 +372,7 @@ impl AsSequence for PyTuple { impl Hashable for PyTuple { #[inline] fn hash(zelf: &crate::Py, vm: &VirtualMachine) -> PyResult { - crate::utils::hash_iter(zelf.elements.iter(), vm) + tuple_hash(zelf.as_slice(), vm) } } @@ -523,3 +523,9 @@ impl ToPyObject for PyTupleTyped { self.tuple.into() } } + +pub(super) fn tuple_hash(elements: &[PyObjectRef], vm: &VirtualMachine) -> PyResult { + // TODO: See #3460 for the correct implementation. + // https://github.com/RustPython/RustPython/pull/3460 + crate::utils::hash_iter(elements.iter(), vm) +}