2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.0 of the PHP license, that |
6 | is bundled with this package in the file LICENSE, and is available |
7 | through the world-wide-web at http://www.php.net/license/3_0.txt. |
8 | If you did not receive a copy of the PHP license and are unable to |
9 | obtain it through the world-wide-web, please send a note to |
10 | license@php.net so we can mail you a copy immediately. |
11 +----------------------------------------------------------------------+
12 | Copyright (c) 2004-2005 Michael Wallner <mike@php.net> |
13 +----------------------------------------------------------------------+
21 #if PHP_MAJOR_VERSION == 5
23 static inline zval
*new_zval(int persistent
)
25 zval
*z
= pemalloc(sizeof(zval
), persistent
);
30 static inline zval
*tmp_zval(void)
39 static void dup_zval(zval
**z
)
46 # if PHP_MINOR_VERSION == 0
48 int zend_declare_property_double(zend_class_entry
*ce
, char *name
, int name_length
, double value
, int access_type TSRMLS_DC
)
50 zval
*property
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
51 ZVAL_DOUBLE(property
, value
);
52 return zend_declare_property(ce
, name
, name_length
, property
, access_type TSRMLS_CC
);
55 void zend_update_property_double(zend_class_entry
*scope
, zval
*object
, char *name
, int name_length
, double value TSRMLS_DC
)
57 zval
*tmp
= tmp_zval();
58 ZVAL_DOUBLE(tmp
, value
);
59 zend_update_property(scope
, object
, name
, name_length
, tmp TSRMLS_CC
);
62 int zend_declare_property_bool(zend_class_entry
*ce
, char *name
, int name_length
, long value
, int access_type TSRMLS_DC
)
64 zval
*property
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
65 ZVAL_BOOL(property
, value
);
66 return zend_declare_property(ce
, name
, name_length
, property
, access_type TSRMLS_CC
);
69 void zend_update_property_bool(zend_class_entry
*scope
, zval
*object
, char *name
, int name_length
, long value TSRMLS_DC
)
71 zval
*tmp
= tmp_zval();
72 ZVAL_BOOL(tmp
, value
);
73 zend_update_property(scope
, object
, name
, name_length
, tmp TSRMLS_CC
);
76 # endif /* PHP_MINOR_VERSION == 0 */
78 int zend_declare_class_constant(zend_class_entry
*ce
, char *name
, size_t name_length
, zval
*value TSRMLS_DC
)
80 return zend_hash_add(&ce
->constants_table
, name
, name_length
, &value
, sizeof(zval
*), NULL
);
83 int zend_declare_class_constant_long(zend_class_entry
*ce
, char *name
, size_t name_length
, long value TSRMLS_DC
)
85 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
86 ZVAL_LONG(constant
, value
);
87 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
90 int zend_declare_class_constant_bool(zend_class_entry
*ce
, char *name
, size_t name_length
, zend_bool value TSRMLS_DC
)
92 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
93 ZVAL_BOOL(constant
, value
);
94 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
97 int zend_declare_class_constant_double(zend_class_entry
*ce
, char *name
, size_t name_length
, double value TSRMLS_DC
)
99 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
100 ZVAL_DOUBLE(constant
, value
);
101 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
104 int zend_declare_class_constant_string(zend_class_entry
*ce
, char *name
, size_t name_length
, char *value TSRMLS_DC
)
106 return zend_declare_class_constant_stringl(ce
, name
, name_length
, value
, strlen(value
) TSRMLS_CC
);
109 int zend_declare_class_constant_stringl(zend_class_entry
*ce
, char *name
, size_t name_length
, char *value
, size_t value_length TSRMLS_DC
)
111 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
112 if (ce
->type
& ZEND_INTERNAL_CLASS
) {
113 ZVAL_STRINGL(constant
, zend_strndup(value
, value_length
), value_length
, 0);
115 ZVAL_STRINGL(constant
, value
, value_length
, 1);
117 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
120 int zend_update_static_property(zend_class_entry
*scope
, char *name
, size_t name_len
, zval
*value TSRMLS_DC
)
123 zval
**property
= NULL
;
124 zend_class_entry
*old_scope
= EG(scope
);
128 if (!(property
= zend_std_get_static_property(scope
, name
, name_len
, 0 TSRMLS_CC
))) {
130 } else if (*property
== value
) {
134 if (PZVAL_IS_REF(*property
)) {
135 zval_dtor(*property
);
136 (*property
)->type
= value
->type
;
137 (*property
)->value
= value
->value
;
139 if (value
->refcount
) {
140 zval_copy_ctor(*property
);
144 zval_copy_ctor(*property
);
149 EG(scope
) = old_scope
;
154 int zend_update_static_property_bool(zend_class_entry
*scope
, char *name
, size_t name_len
, zend_bool value TSRMLS_DC
)
156 zval
*tmp
= tmp_zval();
157 ZVAL_BOOL(tmp
, value
);
158 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
161 int zend_update_static_property_long(zend_class_entry
*scope
, char *name
, size_t name_len
, long value TSRMLS_DC
)
163 zval
*tmp
= tmp_zval();
164 ZVAL_LONG(tmp
, value
);
165 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
168 int zend_update_static_property_double(zend_class_entry
*scope
, char *name
, size_t name_len
, double value TSRMLS_DC
)
170 zval
*tmp
= tmp_zval();
171 ZVAL_DOUBLE(tmp
, value
);
172 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
175 int zend_update_static_property_string(zend_class_entry
*scope
, char *name
, size_t name_len
, char *value TSRMLS_DC
)
177 zval
*tmp
= tmp_zval();
178 ZVAL_STRING(tmp
, value
, 1);
179 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
182 int zend_update_static_property_stringl(zend_class_entry
*scope
, char *name
, size_t name_len
, char *value
, size_t value_len TSRMLS_DC
)
184 zval
*tmp
= tmp_zval();
185 ZVAL_STRINGL(tmp
, value
, value_len
, 1);
186 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
189 void zend_fix_static_properties(zend_class_entry
*ce
, HashTable
*static_members TSRMLS_DC
)
191 zend_hash_copy(static_members
, ce
->static_members
, (copy_ctor_func_t
) zval_add_ref
, NULL
, sizeof(zval
*));
192 zend_hash_destroy(ce
->static_members
);
193 zend_hash_init_ex(ce
->static_members
, 0, NULL
, ZVAL_PTR_DTOR
, 1, 0);
196 void zend_init_static_properties(zend_class_entry
*ce
, HashTable
*static_members TSRMLS_DC
)
198 zend_hash_copy(ce
->static_members
, static_members
, (copy_ctor_func_t
) dup_zval
, NULL
, sizeof(zval
*));
201 void zend_clean_static_properties(zend_class_entry
*ce TSRMLS_DC
)
203 zend_hash_clean(ce
->static_members
);
206 #endif /* PHP_MAJOR_VERSION == 5 */
213 * vim600: noet sw=4 ts=4 fdm=marker
214 * vim<600: noet sw=4 ts=4