From 98ad225ee707f873cb4fb5c2525c58c1f97c52d3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Dec 2025 10:00:03 +0000 Subject: [PATCH 1/3] Initial plan From 3a60a311bc1fba370807811734b6ad394ee081b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Dec 2025 10:17:26 +0000 Subject: [PATCH 2/3] fix object sizeof int handling Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com> --- crates/vm/src/builtins/object.rs | 7 ++++++- extra_tests/snippets/builtin_object.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/vm/src/builtins/object.rs b/crates/vm/src/builtins/object.rs index 6f072542547..4f42780b9c8 100644 --- a/crates/vm/src/builtins/object.rs +++ b/crates/vm/src/builtins/object.rs @@ -1,4 +1,4 @@ -use super::{PyDictRef, PyList, PyStr, PyStrRef, PyType, PyTypeRef}; +use super::{PyDictRef, PyInt, PyList, PyStr, PyStrRef, PyType, PyTypeRef}; use crate::common::hash::PyHash; use crate::types::PyTypeFlags; use crate::{ @@ -526,6 +526,11 @@ impl PyBaseObject { #[pymethod] fn __sizeof__(zelf: PyObjectRef) -> usize { + if let Some(int) = zelf.downcast_ref::() { + let bits = int.as_bigint().bits(); + return std::mem::size_of::() + (((bits + 7) & !7) / 8) as usize; + } + zelf.class().slots.basicsize } } diff --git a/extra_tests/snippets/builtin_object.py b/extra_tests/snippets/builtin_object.py index 64486e1673e..98c78c679fe 100644 --- a/extra_tests/snippets/builtin_object.py +++ b/extra_tests/snippets/builtin_object.py @@ -32,3 +32,6 @@ class MyObject: 0: "ab", } assert "ab ab" == "{k[0]} {vv}".format(k=d, vv=d[0]) + +big = 1223456789812391231291231231231212312312312312312312321321321321312312321123123123199129391239219394923912949213021949302194942130123949203912430392402139210492139123012940219394923942395943856228368385 +assert object.__sizeof__(big) >= big.__sizeof__() From 747b998983ef59179d122db22d4a4ceb000c6022 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" Date: Thu, 15 Jan 2026 09:06:31 +0900 Subject: [PATCH 3/3] fix --- crates/vm/src/builtins/int.rs | 3 ++- crates/vm/src/builtins/object.rs | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/vm/src/builtins/int.rs b/crates/vm/src/builtins/int.rs index 9b74b66e3a7..cc42d02733a 100644 --- a/crates/vm/src/builtins/int.rs +++ b/crates/vm/src/builtins/int.rs @@ -444,7 +444,8 @@ impl PyInt { #[pymethod] fn __sizeof__(&self) -> usize { - core::mem::size_of::() + (((self.value.bits() + 7) & !7) / 8) as usize + let digits = self.value.iter_u32_digits().count().max(1); + core::mem::size_of::() + (::ITEMSIZE * digits) } #[pymethod] diff --git a/crates/vm/src/builtins/object.rs b/crates/vm/src/builtins/object.rs index 4f42780b9c8..5d4bfe80fd8 100644 --- a/crates/vm/src/builtins/object.rs +++ b/crates/vm/src/builtins/object.rs @@ -527,8 +527,10 @@ impl PyBaseObject { #[pymethod] fn __sizeof__(zelf: PyObjectRef) -> usize { if let Some(int) = zelf.downcast_ref::() { - let bits = int.as_bigint().bits(); - return std::mem::size_of::() + (((bits + 7) & !7) / 8) as usize; + let digits = int.as_bigint().iter_u32_digits().count(); + let basicsize = zelf.class().slots.basicsize; + let itemsize = zelf.class().slots.itemsize; + return basicsize + itemsize * digits; } zelf.class().slots.basicsize