forked from Rust-related/RustPython
Add name field on PyNameError
Signed-off-by: snowapril <sinjihng@gmail.com>
This commit is contained in:
@@ -721,7 +721,9 @@ impl ExceptionZoo {
|
||||
});
|
||||
|
||||
extend_exception!(PyMemoryError, ctx, &excs.memory_error);
|
||||
extend_exception!(PyNameError, ctx, &excs.name_error);
|
||||
extend_exception!(PyNameError, ctx, &excs.name_error, {
|
||||
"name" => ctx.none(),
|
||||
});
|
||||
extend_exception!(PyUnboundLocalError, ctx, &excs.unbound_local_error);
|
||||
|
||||
// os errors:
|
||||
|
||||
@@ -448,10 +448,13 @@ impl ExecutingFrame<'_> {
|
||||
)
|
||||
} else {
|
||||
let name = &self.code.freevars[i - self.code.cellvars.len()];
|
||||
vm.new_name_error(format!(
|
||||
"free variable '{}' referenced before assignment in enclosing scope",
|
||||
name
|
||||
))
|
||||
vm.new_name_error(
|
||||
format!(
|
||||
"free variable '{}' referenced before assignment in enclosing scope",
|
||||
name
|
||||
),
|
||||
name,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -609,7 +612,9 @@ impl ExecutingFrame<'_> {
|
||||
match res {
|
||||
Ok(()) => {}
|
||||
Err(e) if e.isinstance(&vm.ctx.exceptions.key_error) => {
|
||||
return Err(vm.new_name_error(format!("name '{}' is not defined", name)))
|
||||
return Err(
|
||||
vm.new_name_error(format!("name '{}' is not defined", name), name)
|
||||
)
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
}
|
||||
@@ -620,7 +625,9 @@ impl ExecutingFrame<'_> {
|
||||
match self.globals.del_item(name.clone(), vm) {
|
||||
Ok(()) => {}
|
||||
Err(e) if e.isinstance(&vm.ctx.exceptions.key_error) => {
|
||||
return Err(vm.new_name_error(format!("name '{}' is not defined", name)))
|
||||
return Err(
|
||||
vm.new_name_error(format!("name '{}' is not defined", name), name)
|
||||
)
|
||||
}
|
||||
Err(e) => return Err(e),
|
||||
}
|
||||
@@ -1124,7 +1131,7 @@ impl ExecutingFrame<'_> {
|
||||
fn load_global_or_builtin(&self, name: &PyStrRef, vm: &VirtualMachine) -> PyResult {
|
||||
self.globals
|
||||
.get_chain(self.builtins, name.clone(), vm)?
|
||||
.ok_or_else(|| vm.new_name_error(format!("name '{}' is not defined", name)))
|
||||
.ok_or_else(|| vm.new_name_error(format!("name '{}' is not defined", name), name))
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "flame-it", flame("Frame"))]
|
||||
|
||||
11
vm/src/vm.rs
11
vm/src/vm.rs
@@ -666,9 +666,14 @@ impl VirtualMachine {
|
||||
self.new_exception_msg(type_error, msg)
|
||||
}
|
||||
|
||||
pub fn new_name_error(&self, msg: String) -> PyBaseExceptionRef {
|
||||
let name_error = self.ctx.exceptions.name_error.clone();
|
||||
self.new_exception_msg(name_error, msg)
|
||||
pub fn new_name_error(&self, msg: String, name: &PyStrRef) -> PyBaseExceptionRef {
|
||||
let name_error_type = self.ctx.exceptions.name_error.clone();
|
||||
let name_error = self.new_exception_msg(name_error_type, msg);
|
||||
name_error
|
||||
.as_object()
|
||||
.set_attr("name", name.clone(), self)
|
||||
.unwrap();
|
||||
name_error
|
||||
}
|
||||
|
||||
pub fn new_unsupported_unary_error(&self, a: &PyObjectRef, op: &str) -> PyBaseExceptionRef {
|
||||
|
||||
Reference in New Issue
Block a user