- case IS_REFERENCE:
- ION_CHECK(ion_writer_add_annotation_symbol(ser->writer, &PHP_ION_SYMBOL_REFERENCE));
- php_ion_serialize_zval(ser, Z_REFVAL_P(zv));
- break;
- }
+ ION_STRING is;
+ switch (Z_TYPE_P(zv)) {
+ case IS_STRING:
+ ION_CHECK(ion_writer_write_string(ser->writer, ion_string_from_zend(&is, Z_STR_P(zv))));
+ break;
+
+ case IS_ARRAY:
+ php_ion_serialize_array(ser, Z_ARRVAL_P(zv));
+ break;
+
+ case IS_OBJECT:
+ php_ion_serialize_object(ser, Z_OBJ_P(zv));
+ break;
+
+ case IS_REFERENCE:
+ ION_CHECK(ion_writer_add_annotation_symbol(ser->writer, &PHP_ION_SYMBOL_REFERENCE));
+ php_ion_serialize_zval(ser, Z_REFVAL_P(zv));
+ break;