A good poison value gives a recognizable fault address if someone erroneously dereferences. Asserting the pointer is not poison shouldn't be necessary, so move it to RUBY_DEBUG builds.alanwu (Alan Wu)
As the documentation puts it, transmute is "incredibly unsafe". We can express what we need to with pointer casts in these closure FFI situations, so let's use pointer casts.alanwu (Alan Wu)
As the documentation puts it, transmute is "incredibly unsafe". We can express what we need to with pointer casts in these closure FFI situations, so let's use pointer casts.alanwu (Alan Wu)
When references show up on in the type declaration, it's an invitation to think about how long the implicit lifetime is. This code doesn't do anything tricky lifetime-wise, so it looks better declaring only raw pointers.alanwu (Alan Wu)
The default `{:?}` still always prints the pointer address and never dereferences it, but now in hex. The "alternate" flag lets you do `println!("{my_ruby_object:#?}")` and get a rich printout like `VALUE(0x000000010232fd00 T_CLASS/Obje...alanwu (Alan Wu)
Most of the time, we want to assert that we compile and the compiled code runs without exiting. A small number of tests trigger side exits, and those are changed to use assert_compiles_allowing_exits(). ```console $ rg -F 'assert_compil...alanwu (Alan Wu)
Every class boots with a metaclass, and all metaclasses are subclasses of Class, so `types::Class` has no business in `ExactBitsAndClass`. In fact, we should never see an object whose RBasic::class is exactly rb_cClass because classes ge...alanwu (Alan Wu)
Previously, we had none-sensical lines such as: ``` v15:CPtr[CPtr(0x1008)] = Const CPtr(0x1010) ``` Which was a contradiction as the pointer in the type specialization should match the pointer on the right hand side.alanwu (Alan Wu)