|
2 | 2 | //! determined by a property inside the struct. The content of the Zval is stored in a union. |
3 | 3 |
|
4 | 4 | use core::slice; |
5 | | -use std::{convert::TryFrom, ptr}; |
| 5 | +use std::{convert::TryFrom, fmt::Debug, ptr}; |
6 | 6 |
|
7 | 7 | use crate::{ |
8 | 8 | bindings::{ |
@@ -365,6 +365,41 @@ impl<'a> Zval { |
365 | 365 | } |
366 | 366 | } |
367 | 367 |
|
| 368 | +impl Debug for Zval { |
| 369 | + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
| 370 | + let mut dbg = f.debug_struct("Zval"); |
| 371 | + let ty = self.get_type(); |
| 372 | + dbg.field("type", &ty); |
| 373 | + |
| 374 | + if let Ok(ty) = ty { |
| 375 | + macro_rules! field { |
| 376 | + ($value: expr) => { |
| 377 | + dbg.field("val", &$value) |
| 378 | + }; |
| 379 | + } |
| 380 | + |
| 381 | + match ty { |
| 382 | + DataType::Undef => field!("Undefined"), |
| 383 | + DataType::Null => field!("Null"), |
| 384 | + DataType::False => field!(false), |
| 385 | + DataType::True => field!(true), |
| 386 | + DataType::Long => field!(self.long()), |
| 387 | + DataType::Double => field!(self.double()), |
| 388 | + DataType::String => field!(self.string()), |
| 389 | + DataType::Array => field!(self.array()), |
| 390 | + DataType::Object => field!(self.object()), |
| 391 | + DataType::Resource => field!(self.resource()), |
| 392 | + DataType::Reference => field!(self.reference()), |
| 393 | + DataType::Callable => field!(self.string()), |
| 394 | + DataType::ConstantExpression => field!("Constant Expression"), |
| 395 | + DataType::Void => field!("Void"), |
| 396 | + }; |
| 397 | + } |
| 398 | + |
| 399 | + dbg.finish() |
| 400 | + } |
| 401 | +} |
| 402 | + |
368 | 403 | #[macro_use] |
369 | 404 | macro_rules! try_from_zval { |
370 | 405 | ($type: ty, $fn: ident) => { |
|
0 commit comments