Skip to content
Prev Previous commit
Next Next commit
Add descriptors to @classmethod and @staticmethod
  • Loading branch information
ChJR committed Jun 21, 2022
commit c3d14171efab66d8200ddae9faca17f6573caa98
30 changes: 30 additions & 0 deletions vm/src/builtins/classmethod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,36 @@ impl PyClassMethod {
self.callable.lock().clone()
}

#[pyproperty(magic)]
fn wrapped(&self) -> PyObjectRef {
self.callable.clone()
}

#[pyproperty(magic)]
fn module(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__module__", vm)
}

#[pyproperty(magic)]
fn qualname(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__qualname__", vm)
}

#[pyproperty(magic)]
fn name(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__name__", vm)
}

#[pyproperty(magic)]
fn annotations(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__annotations__", vm)
}

#[pyproperty(magic)]
fn doc(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__doc__", vm)
}

#[pyproperty(magic)]
fn isabstractmethod(&self, vm: &VirtualMachine) -> PyObjectRef {
match vm.get_attribute_opt(self.callable.lock().clone(), "__isabstractmethod__") {
Expand Down
30 changes: 30 additions & 0 deletions vm/src/builtins/staticmethod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,36 @@ impl PyStaticMethod {
self.callable.clone()
}

#[pyproperty(magic)]
fn wrapped(&self) -> PyObjectRef {
self.callable.clone()
}

#[pyproperty(magic)]
fn module(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__module__", vm)
}

#[pyproperty(magic)]
fn qualname(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__qualname__", vm)
}

#[pyproperty(magic)]
fn name(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__name__", vm)
}

#[pyproperty(magic)]
fn annotations(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__annotations__", vm)
}

#[pyproperty(magic)]
fn doc(&self, vm: &VirtualMachine) -> PyResult {
self.callable.get_attr("__doc__", vm)
}

#[pyproperty(magic)]
fn isabstractmethod(&self, vm: &VirtualMachine) -> PyObjectRef {
match vm.get_attribute_opt(self.callable.clone(), "__isabstractmethod__") {
Expand Down