summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Bernstein <max.bernstein@shopify.com>2025-02-06 15:37:49 -0500
committerTakashi Kokubun <takashikkbn@gmail.com>2025-04-18 21:52:56 +0900
commit518a387d6c5ca72eab09eaea8091234cd86132e8 (patch)
treeaa64d33a1c70c52fde6931d18bfe590c6b253508
parent5f199c8f4b217a3b931fc5335fe79fe0e34ffd95 (diff)
Pretty print fixnum
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/13131
-rw-r--r--zjit/src/cruby.rs5
-rw-r--r--zjit/src/ir.rs1
2 files changed, 6 insertions, 0 deletions
diff --git a/zjit/src/cruby.rs b/zjit/src/cruby.rs
index 709f60bcd0..4f2e881f36 100644
--- a/zjit/src/cruby.rs
+++ b/zjit/src/cruby.rs
@@ -466,6 +466,11 @@ impl VALUE {
}
}
+ pub fn as_fixnum(self) -> i64 {
+ assert!(self.fixnum_p());
+ (self.0 >> 1) as i64
+ }
+
pub fn as_isize(self) -> isize {
let VALUE(is) = self;
is as isize
diff --git a/zjit/src/ir.rs b/zjit/src/ir.rs
index ad198f2fca..28ac98e5ea 100644
--- a/zjit/src/ir.rs
+++ b/zjit/src/ir.rs
@@ -32,6 +32,7 @@ enum Opnd {
impl std::fmt::Display for Opnd {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
+ Opnd::Const(val) if val.fixnum_p() => write!(f, "Fixnum({})", val.as_fixnum()),
Opnd::Const(val) => write!(f, "Const({:?})", val.as_ptr::<u8>()),
Opnd::Insn(insn_id) => write!(f, "{insn_id}"),
}