forked from Rust-related/RustPython
Compare commits
3 Commits
impl_del_o
...
impl_del_o
| Author | SHA1 | Date | |
|---|---|---|---|
| b8d6f7b594 | |||
| dc0a75e903 | |||
| c40d24ed68 |
23
.github/workflows/ai-review.yml
vendored
23
.github/workflows/ai-review.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: PR Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: AI Code Review
|
||||
uses: gitea-actions/ai-reviewer@v0.6
|
||||
with:
|
||||
access-token: ${{ secrets.ACCESS_TOKEN }}
|
||||
full-context-model: "gpt-4o"
|
||||
full-context-api-key: ${{ secrets.OPENAI_API_KEY }}
|
||||
single-chunk-model: "claude-3-5-sonnet"
|
||||
single-chunk-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
exclude-files: "*.md,*.yaml"
|
||||
@@ -496,17 +496,13 @@ pub fn object_get_dict(obj: PyObjectRef, vm: &VirtualMachine) -> PyResult<PyDict
|
||||
.ok_or_else(|| vm.new_attribute_error("This object has no __dict__".to_owned()))
|
||||
}
|
||||
|
||||
pub fn object_set_dict(obj: PyObjectRef, dict: PySetterValue<PyDictRef>, vm: &VirtualMachine) -> PyResult<()> {
|
||||
match dict {
|
||||
PySetterValue::Assign(dict) => {
|
||||
obj.set_dict(dict)
|
||||
.map_err(|_| vm.new_attribute_error("This object has no __dict__".to_owned()))
|
||||
}
|
||||
PySetterValue::Delete => {
|
||||
obj.delete_dict()
|
||||
.map_err(|_| vm.new_attribute_error("This object has no deletable __dict__".to_owned()))
|
||||
}
|
||||
}
|
||||
pub fn object_set_dict(
|
||||
obj: PyObjectRef,
|
||||
dict: PySetterValue<PyDictRef>,
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<()> {
|
||||
obj.set_dict(dict)
|
||||
.map_err(|_| vm.new_attribute_error("This object has no __dict__ to delete".to_owned()))
|
||||
}
|
||||
|
||||
pub fn init(ctx: &Context) {
|
||||
|
||||
@@ -1288,7 +1288,7 @@ fn subtype_set_dict(obj: PyObjectRef, value: PyObjectRef, vm: &VirtualMachine) -
|
||||
descr_set(&descr, obj, PySetterValue::Assign(value), vm)
|
||||
}
|
||||
None => {
|
||||
object::object_set_dict(obj, PySetterValue::Delete, vm)?;
|
||||
object::object_set_dict(obj, PySetterValue::Assign(value.try_into_value(vm)?), vm)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ use crate::{
|
||||
lock::{PyMutex, PyMutexGuard, PyRwLock},
|
||||
refcount::RefCount,
|
||||
},
|
||||
function::PySetterValue,
|
||||
vm::VirtualMachine,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
@@ -707,26 +708,27 @@ impl PyObject {
|
||||
|
||||
/// Set the dict field. Returns `Err(dict)` if this object does not have a dict field
|
||||
/// in the first place.
|
||||
pub fn set_dict(&self, dict: PyDictRef) -> Result<(), PyDictRef> {
|
||||
match self.instance_dict() {
|
||||
Some(d) => {
|
||||
pub fn set_dict(&self, dict: PySetterValue<PyDictRef>) -> Result<(), PySetterValue<PyDictRef>> {
|
||||
match (self.instance_dict(), dict) {
|
||||
(Some(d), PySetterValue::Assign(dict)) => {
|
||||
d.set(dict);
|
||||
Ok(())
|
||||
}
|
||||
None => Err(dict),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn delete_dict(&self) -> Result<(), ()> {
|
||||
match self.instance_dict() {
|
||||
Some(_) => {
|
||||
(None, PySetterValue::Assign(dict)) => {
|
||||
unsafe {
|
||||
let ptr = self as *const _ as *mut PyObject;
|
||||
(*ptr).0.dict = Some(InstanceDict::new(dict));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
(Some(_), PySetterValue::Delete) => {
|
||||
unsafe {
|
||||
let ptr = self as *const _ as *mut PyObject;
|
||||
(*ptr).0.dict = None;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
None => Err(()),
|
||||
(None, PySetterValue::Delete) => Err(PySetterValue::Delete),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user