#include "ext/date/php_date.h"
#include "ext/spl/spl_exceptions.h"
-#include "ext/spl/spl_iterators.h"
#include "php_ion.h"
#include "ion_private.h"
Z_PARAM_LONG(location)
ZEND_PARSE_PARAMETERS_END();
- obj->loc.location = location;
+ obj->loc.location = (SID) location;
php_ion_symbol_iloc_ctor(obj);
}
static ZEND_METHOD(ion_Symbol, __construct)
Z_PARAM_OBJ_OF_CLASS_OR_NULL(obj->iloc, ce_Symbol_ImportLocation)
ZEND_PARSE_PARAMETERS_END();
- obj->sym.sid = sid;
+ obj->sym.sid = (SID) sid;
php_ion_symbol_ctor(obj);
}
static ZEND_METHOD(ion_Symbol, equals)
PTR_CHECK(obj);
zend_long precision;
- zend_object *precision_obj;
+ zend_object *precision_obj = NULL, *format_obj = NULL;
zend_string *fmt = NULL, *dt = NULL;
zval *tz = NULL;
ZEND_PARSE_PARAMETERS_START(1, 4)
Z_PARAM_OBJ_OF_CLASS_OR_LONG(precision_obj, ce_Timestamp_Precision, precision)
Z_PARAM_OPTIONAL
- Z_PARAM_STR_OR_NULL(fmt)
+ Z_PARAM_OBJ_OF_CLASS_OR_STR_OR_NULL(format_obj, ce_Timestamp_Format, fmt)
Z_PARAM_STR_OR_NULL(dt)
Z_PARAM_ZVAL(tz)
ZEND_PARSE_PARAMETERS_END();
if (precision_obj) {
precision = Z_LVAL_P(zend_enum_fetch_case_value(precision_obj));
}
+ if (format_obj) {
+ fmt = Z_STR_P(zend_enum_fetch_case_value(format_obj));
+ }
php_ion_timestamp_ctor(obj, precision, fmt, dt, tz);
}
static ZEND_METHOD(ion_Timestamp, __toString)
if (o_round) {
round = Z_LVAL_P(zend_enum_fetch_case_value(o_round));
}
- php_ion_decimal_ctx_init(&obj->ctx, digits, emax, emin, round, clamp);
+ php_ion_decimal_ctx_init(&obj->ctx, digits, emax, emin, round, clamp); // NOLINT(cppcoreguidelines-narrowing-conversions)
php_ion_decimal_ctx_ctor(obj, o_round);
}
static inline void make_decimal_ctx(INTERNAL_FUNCTION_PARAMETERS, int kind)
zend_update_property_bool(opt->std.ce, &opt->std, ZEND_STRL("returnSystemValues"),
opt->opt.return_system_values = ret_sys_val);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("newLine"),
- opt->opt.new_line_char = ch_nl);
+ opt->opt.new_line_char = (int) ch_nl);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("maxContainerDepth"),
- opt->opt.max_container_depth = max_depth);
+ opt->opt.max_container_depth = (SIZE) max_depth);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("maxAnnotations"),
- opt->opt.max_annotation_count = max_ann);
+ opt->opt.max_annotation_count = (SIZE) max_ann);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("maxAnnotationBuffered"),
- opt->opt.max_annotation_buffered = max_ann_buf);
+ opt->opt.max_annotation_buffered = (SIZE) max_ann_buf);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("symbolThreshold"),
- opt->opt.symbol_threshold = sym_thr);
+ opt->opt.symbol_threshold = (SIZE) sym_thr);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("userValueThreshold"),
- opt->opt.user_value_threshold = uval_thr);
+ opt->opt.user_value_threshold = (SIZE) uval_thr);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("chunkThreshold"),
- opt->opt.chunk_threshold = chunk_thr);
+ opt->opt.chunk_threshold = (SIZE) chunk_thr);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("allocationPageSize"),
- opt->opt.allocation_page_size = alloc_pgsz);
+ opt->opt.allocation_page_size = (SIZE) alloc_pgsz);
zend_update_property_long(opt->std.ce, &opt->std, ZEND_STRL("skipCharacterValidation"),
- opt->opt.skip_character_validation = skip_validation);
+ opt->opt.skip_character_validation = (SIZE) skip_validation);
}
static ZEND_METHOD(ion_Reader_Reader, hasChildren)
{
ZEND_PARSE_PARAMETERS_NONE();
- int32_t count, max = php_ion_obj(reader_options, obj->opt)->opt.max_annotation_count;
+ int32_t count, max;
+ if (obj->opt) {
+ max = php_ion_obj(reader_options, obj->opt)->opt.max_annotation_count;
+ } else {
+ max = 10;
+ }
ION_SYMBOL *ptr = ecalloc(sizeof(*ptr), max);
iERR err = ion_reader_get_annotation_symbols(obj->reader, ptr, max, &count);
if (!err) {
ZEND_PARSE_PARAMETERS_NONE();
- ION_CHECK(ion_reader_read_double(obj->reader, &Z_DVAL_P(return_value)));
+ double dval;
+ ION_CHECK(ion_reader_read_double(obj->reader, &dval));
+ RETURN_DOUBLE(dval);
}
static ZEND_METHOD(ion_Reader_Reader, readDecimal)
{
RETURN_TRUE;
}
fail:
- if (zstr != Z_STR_P(ref)) {
- zend_string_release(zstr);
- }
+ zend_string_release(zstr);
ZVAL_EMPTY_STRING(ref);
RETURN_FALSE;
}
zval *zstream;
zend_long length;
- ZEND_PARSE_PARAMETERS_START(1, 2);
+ ZEND_PARSE_PARAMETERS_START(2, 2);
Z_PARAM_RESOURCE(zstream);
Z_PARAM_LONG(length)
ZEND_PARSE_PARAMETERS_END();
zend_update_property_bool(obj->std.ce, &obj->std, ZEND_STRL("indentTabs"),
obj->opt.indent_with_tabs = tabs);
zend_update_property_long(obj->std.ce, &obj->std, ZEND_STRL("indentSize"),
- obj->opt.indent_size = indent);
+ obj->opt.indent_size = (SIZE) indent);
zend_update_property_bool(obj->std.ce, &obj->std, ZEND_STRL("smallContainersInline"),
obj->opt.small_containers_in_line = small_cntr_inl);
zend_update_property_bool(obj->std.ce, &obj->std, ZEND_STRL("suppressSystemValues"),
zend_update_property_bool(obj->std.ce, &obj->std, ZEND_STRL("flushEveryValue"),
obj->opt.flush_every_value = flush);
zend_update_property_long(obj->std.ce, &obj->std, ZEND_STRL("maxContainerDepth"),
- obj->opt.max_container_depth = max_depth);
+ obj->opt.max_container_depth = (SIZE) max_depth);
zend_update_property_long(obj->std.ce, &obj->std, ZEND_STRL("maxAnnotations"),
- obj->opt.max_annotation_count = max_ann);
+ obj->opt.max_annotation_count = (SIZE) max_ann);
zend_update_property_long(obj->std.ce, &obj->std, ZEND_STRL("tempBufferSize"),
- obj->opt.temp_buffer_size = temp);
+ obj->opt.temp_buffer_size = (SIZE) temp);
zend_update_property_long(obj->std.ce, &obj->std, ZEND_STRL("allocationPageSize"),
- obj->opt.allocation_page_size = alloc);
+ obj->opt.allocation_page_size = (SIZE) alloc);
}
static ZEND_METHOD(ion_Writer_Writer, writeNull)
{
SIZE flushed;
ION_CHECK(ion_writer_flush(obj->writer, &flushed));
- if (obj->type == BUFFER_WRITER) {
- smart_str_0(&obj->buffer.str);
- }
RETURN_LONG(flushed);
}
static ZEND_METHOD(ion_Writer_Writer, finish)
SIZE flushed;
ION_CHECK(ion_writer_finish(obj->writer, &flushed));
- if (obj->type == BUFFER_WRITER) {
- smart_str_0(&obj->buffer.str);
- }
RETURN_LONG(flushed);
}
static ZEND_METHOD(ion_Writer_Writer, writeOne)
php_ion_writer *obj = php_ion_obj(writer, Z_OBJ_P(ZEND_THIS));
PTR_CHECK(obj);
- zval *ref;
- ZEND_PARSE_PARAMETERS_START(1, 2)
- Z_PARAM_ZVAL(ref)
+ ZEND_PARSE_PARAMETERS_START(0, 1)
Z_PARAM_OPTIONAL
Z_PARAM_OBJ_OF_CLASS_OR_NULL(obj->opt, ce_Writer_Options)
ZEND_PARSE_PARAMETERS_END();
obj->type = BUFFER_WRITER;
- ZVAL_COPY(&obj->buffer.val, ref);
- zval_dtor(Z_REFVAL_P(ref));
-
php_ion_writer_ctor(obj);
}
static ZEND_METHOD(ion_Writer_Buffer_Writer, getBuffer)
ZEND_PARSE_PARAMETERS_NONE();
- RETVAL_STR(zend_string_dup(obj->buffer.str.s, 0));
+ RETVAL_STR(php_ion_writer_buffer_copy(obj));
+}
+static ZEND_METHOD(ion_Writer_Buffer_Writer, resetBuffer)
+{
+ php_ion_writer *obj = php_ion_obj(writer, Z_OBJ_P(ZEND_THIS));
+ OBJ_CHECK(obj);
+
+ ZEND_PARSE_PARAMETERS_NONE();
+
+ php_ion_writer_buffer_reset(obj);
}
static ZEND_METHOD(ion_Writer_Stream_Writer, __construct)
{
}
#define ZEND_ARG_VARIADIC_OBJ_TYPE_MASK(pass_by_ref, name, classname, type_mask, default_value) \
- { #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#classname, type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0)), default_value },
+ { #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#classname, ((type_mask) | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0))), default_value },
#include "ion_arginfo.h"
+// spl_iterators.h includes ext/pcre/php_pcre.h which might not find pcre2.h
+extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator;
+
PHP_MINIT_FUNCTION(ion)
{
// true globals
if (SUCCESS != g_sym_init()) {
return FAILURE;
}
+ g_intern_str_init();
// Catalog
php_ion_register(catalog, Catalog, zend_ce_countable);
// Timestamp
ce_Timestamp = register_class_ion_Timestamp(php_date_get_date_ce());
+ ce_Timestamp_Format = register_class_ion_Timestamp_Format();
ce_Timestamp_Precision = register_class_ion_Timestamp_Precision();
// Type