-#define Z_PARAM_OBJ_OF_CLASS_OR_NAMED_OR_NULL(obj_dest, iface_ce, impl_ce, arr_dest) \
- Z_PARAM_PROLOGUE(0,0) \
- if (!zend_parse_arg_obj(_arg, &(obj_dest), iface_ce, true)) { \
- if (UNEXPECTED(!zend_parse_arg_array(_arg, &(arr_dest), true, 0))) { \
- _error = (iface_ce)->name->val; \
- _error_code = ZPP_ERROR_WRONG_CLASS_OR_NULL; \
- break; \
- } \
- zval tmp; \
- object_init_ex(&tmp, impl_ce); \
- *(&(obj_dest)) = Z_OBJ(tmp); \
- zend_call_known_function((impl_ce)->constructor, obj_dest, impl_ce, \
- NULL, 0, NULL, Z_ARRVAL_P(arr_dest)); \
- if (EG(exception)) { \
- OBJ_RELEASE(obj_dest); \
- return; \
- } \
+static ZEND_METHOD(ion_Serializer_Serializer, serializeNull)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ ZEND_PARSE_PARAMETERS_NONE();
+
+ ION_CHECK(ion_writer_write_null(php_ion_obj(writer, obj->wri)->writer));
+}
+
+static ZEND_METHOD(ion_Serializer_Serializer, serializeBool)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ zend_bool b;
+ ZEND_PARSE_PARAMETERS_START(1, 1)
+ Z_PARAM_BOOL(b)
+ ZEND_PARSE_PARAMETERS_END();
+
+ ION_CHECK(ion_writer_write_bool(php_ion_obj(writer, obj->wri)->writer, b));
+}
+
+static ZEND_METHOD(ion_Serializer_Serializer, serializeInt)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ zend_long l;
+ ZEND_PARSE_PARAMETERS_START(1, 1)
+ Z_PARAM_LONG(l);
+ ZEND_PARSE_PARAMETERS_END();
+
+ ION_CHECK(ion_writer_write_int64(php_ion_obj(writer, obj->wri)->writer, l));
+}
+
+static ZEND_METHOD(ion_Serializer_Serializer, serializeFloat)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ double d;
+ ZEND_PARSE_PARAMETERS_START(1, 1)
+ Z_PARAM_DOUBLE(d);
+ ZEND_PARSE_PARAMETERS_END();
+
+ ION_CHECK(ion_writer_write_double(php_ion_obj(writer, obj->wri)->writer, d));
+}
+
+static ZEND_METHOD(ion_Serializer_Serializer, serializeString)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ zend_string *zs;
+ ZEND_PARSE_PARAMETERS_START(1, 1)
+ Z_PARAM_STR(zs);
+ ZEND_PARSE_PARAMETERS_END();
+
+ ION_STRING is;
+ ION_CHECK(ion_writer_write_string(php_ion_obj(writer, obj->wri)->writer, ion_string_from_zend(&is, zs)));
+}
+
+static ZEND_METHOD(ion_Serializer_Serializer, serializeArray)
+{
+ php_ion_serializer *obj = php_ion_obj(serializer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ zend_array *arr;
+ ZEND_PARSE_PARAMETERS_START(1, 1)
+ Z_PARAM_ARRAY_HT(arr)
+ ZEND_PARSE_PARAMETERS_END();
+
+ if (zend_array_is_list(arr)) {
+ php_ion_serialize_list(obj, arr);
+ } else {
+ php_ion_serialize_struct(obj, arr, false, false);