void _http_message_object_init(INIT_FUNC_ARGS)
{
+ zval constants;
+
HTTP_REGISTER_CLASS_EX(HttpMessage, http_message_object, NULL, 0);
HTTP_LONG_CONSTANT("HTTP_MSG_NONE", HTTP_MSG_NONE);
{
zend_class_entry *ce = http_message_object_ce;
+ DCL_CONST(long, "NONE", HTTP_MSG_NONE);
+ DCL_CONST(long, "REQUEST", HTTP_MSG_REQUEST);
+ DCL_CONST(long, "RESPONSE", HTTP_MSG_RESPONSE);
+
DCL_PROP(PROTECTED, long, type, HTTP_MSG_NONE);
DCL_PROP(PROTECTED, string, body, "");
DCL_PROP(PROTECTED, string, requestMethod, "");
#endif
+static inline zval *new_class_constant_zval(zend_class_entry *ce)
+{
+ zval *z;
+ if (ce->type & ZEND_INTERNAL_CLASS) {
+ z = malloc(sizeof(zval));
+ } else {
+ ALLOC_ZVAL(z);
+ }
+ INIT_PZVAL(z);
+ return z;
+}
+
+int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC)
+{
+ return zend_hash_add(&ce->constants_table, name, name_length, &value, sizeof(zval *), NULL);
+}
+
+int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC)
+{
+ zval *constant = new_class_constant_zval(ce);
+ ZVAL_LONG(constant, value);
+ return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC)
+{
+ zval *constant = new_class_constant_zval(ce);
+ ZVAL_BOOL(constant, value);
+ return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC)
+{
+ zval *constant = new_class_constant_zval(ce);
+ ZVAL_DOUBLE(constant, value);
+ return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC)
+{
+ return zend_declare_class_constant_stringl(ce, name, name_length, value, strlen(value) TSRMLS_CC);
+}
+
+int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC)
+{
+ zval *constant = new_class_constant_zval(ce);
+ Z_TYPE_P(constant) = IS_STRING;
+ Z_STRLEN_P(constant) = value_length;
+ Z_STRVAL_P(constant) = malloc(value_length + 1);
+ memcpy(Z_STRVAL_P(constant), value, value_length);
+ Z_STRVAL_P(constant)[value_length] = '\0';
+ return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+
/*
* Local variables:
* tab-width: 4
extern void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC);
#endif
+int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC);
+int zend_declare_class_constant_null(zend_class_entry *ce, char *name, size_t name_length TSRMLS_DC);
+int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC);
+int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC);
+int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC);
+int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC);
+int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC);
#endif
/*
name## _ce = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
name## _ce->ce_flags |= flags; \
memcpy(& name## _handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
+ zend_hash_init(& name## _ce->constants_table, 0, NULL, ZVAL_INTERNAL_PTR_DTOR, 1); \
name## _declare_default_properties(); \
}
# define GET_PROP(o, n) GET_PROP_EX(o, getThis(), n)
# define GET_PROP_EX(o, this, n) zend_read_property(o->zo.ce, this, (#n), sizeof(#n)-1, 0 TSRMLS_CC)
+# define DCL_CONST(t, n, v) zend_declare_class_constant_ ##t(ce, (n), sizeof(n), (v) TSRMLS_CC)
+
# define ACC_PROP_PRIVATE(ce, flags) ((flags & ZEND_ACC_PRIVATE) && (EG(scope) && ce == EG(scope))
# define ACC_PROP_PROTECTED(ce, flags) ((flags & ZEND_ACC_PROTECTED) && (zend_check_protected(ce, EG(scope))))
# define ACC_PROP_PUBLIC(flags) (flags & ZEND_ACC_PUBLIC)