Fix unpack_ex related messages

This commit is contained in:
Jeong YunWon committed 2020-05-30 01:07:38 +00:00
1 parent 7bce7baf4a
commit 9338dcdf45
3 files changed
+14 -4

No files matched your search

+8 -1
View File
@@ -1399,7 +1399,14 @@ impl<O: OutputStream> Compiler<O> {
}
}
}
_ => return Err(self.error(CompileErrorType::Assign(target.name()))),
_ => {
return Err(self.error(match target.node {
ast::ExpressionType::Starred { .. } => CompileErrorType::SyntaxError(
"starred assignment target must be in a list or tuple".to_owned(),
),
_ => CompileErrorType::Assign(target.name()),
}))
}
}
Ok(())
+5 -2
View File
@@ -940,7 +940,9 @@ impl ExecutingFrame<'_> {
if unpack {
for obj in self.pop_multiple(size) {
// Take all key-value pairs from the dict:
let dict: PyDictRef = obj.downcast().expect("Need a dictionary to build a map.");
let dict: PyDictRef = obj.downcast().map_err(|obj| {
vm.new_type_error(format!("'{}' object is not a mapping", obj.class().name))
})?;
for (key, value) in dict {
if for_call {
if map_obj.contains_key(&key, vm) {
@@ -1014,6 +1016,7 @@ impl ExecutingFrame<'_> {
let kwargs = if *has_kwargs {
let kw_dict: PyDictRef = match self.pop_value().downcast() {
Err(_) => {
// TODO: check collections.abc.Mapping
return Err(vm.new_type_error("Kwargs must be a dict.".to_owned()));
}
Ok(x) => x,
@@ -1137,7 +1140,7 @@ impl ExecutingFrame<'_> {
let min_expected = before + after;
if elements.len() < min_expected {
Err(vm.new_value_error(format!(
"Not enough values to unpack (expected at least {}, got {}",
"not enough values to unpack (expected at least {}, got {})",
min_expected,
elements.len()
)))
+1 -1
View File
@@ -26,7 +26,7 @@ pub fn get_iter(vm: &VirtualMachine, iter_target: &PyObjectRef) -> PyResult {
vm.invoke(&method, vec![])
} else {
vm.get_method_or_type_error(iter_target.clone(), "__getitem__", || {
format!("Cannot iterate over {}", iter_target.class().name)
format!("'{}' object is not iterable", iter_target.class().name)
})?;
Ok(PySequenceIterator::new_forward(iter_target.clone())
.into_ref(vm)