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
)
47 # if PHP_MINOR_VERSION == 0
49 int zend_declare_property_double(zend_class_entry
*ce
, char *name
, int name_length
, double value
, int access_type TSRMLS_DC
)
51 zval
*property
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
52 ZVAL_DOUBLE(property
, value
);
53 return zend_declare_property(ce
, name
, name_length
, property
, access_type TSRMLS_CC
);
56 void zend_update_property_double(zend_class_entry
*scope
, zval
*object
, char *name
, int name_length
, double value TSRMLS_DC
)
58 zval
*tmp
= tmp_zval();
59 ZVAL_DOUBLE(tmp
, value
);
60 zend_update_property(scope
, object
, name
, name_length
, tmp TSRMLS_CC
);
63 int zend_declare_property_bool(zend_class_entry
*ce
, char *name
, int name_length
, long value
, int access_type TSRMLS_DC
)
65 zval
*property
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
66 ZVAL_BOOL(property
, value
);
67 return zend_declare_property(ce
, name
, name_length
, property
, access_type TSRMLS_CC
);
70 void zend_update_property_bool(zend_class_entry
*scope
, zval
*object
, char *name
, int name_length
, long value TSRMLS_DC
)
72 zval
*tmp
= tmp_zval();
73 ZVAL_BOOL(tmp
, value
);
74 zend_update_property(scope
, object
, name
, name_length
, tmp TSRMLS_CC
);
77 # endif /* PHP_MINOR_VERSION == 0 */
79 int zend_declare_class_constant(zend_class_entry
*ce
, char *name
, size_t name_length
, zval
*value TSRMLS_DC
)
81 return zend_hash_add(&ce
->constants_table
, name
, name_length
, &value
, sizeof(zval
*), NULL
);
84 int zend_declare_class_constant_long(zend_class_entry
*ce
, char *name
, size_t name_length
, long value TSRMLS_DC
)
86 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
87 ZVAL_LONG(constant
, value
);
88 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
91 int zend_declare_class_constant_bool(zend_class_entry
*ce
, char *name
, size_t name_length
, zend_bool value TSRMLS_DC
)
93 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
94 ZVAL_BOOL(constant
, value
);
95 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
98 int zend_declare_class_constant_double(zend_class_entry
*ce
, char *name
, size_t name_length
, double value TSRMLS_DC
)
100 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
101 ZVAL_DOUBLE(constant
, value
);
102 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
105 int zend_declare_class_constant_string(zend_class_entry
*ce
, char *name
, size_t name_length
, char *value TSRMLS_DC
)
107 return zend_declare_class_constant_stringl(ce
, name
, name_length
, value
, strlen(value
) TSRMLS_CC
);
110 int zend_declare_class_constant_stringl(zend_class_entry
*ce
, char *name
, size_t name_length
, char *value
, size_t value_length TSRMLS_DC
)
112 zval
*constant
= new_zval(ce
->type
& ZEND_INTERNAL_CLASS
);
113 if (ce
->type
& ZEND_INTERNAL_CLASS
) {
114 ZVAL_STRINGL(constant
, zend_strndup(value
, value_length
), value_length
, 0);
116 ZVAL_STRINGL(constant
, value
, value_length
, 1);
118 return zend_declare_class_constant(ce
, name
, name_length
, constant TSRMLS_CC
);
121 int zend_update_static_property(zend_class_entry
*scope
, char *name
, size_t name_len
, zval
*value TSRMLS_DC
)
124 zval
**property
= NULL
;
125 zend_class_entry
*old_scope
= EG(scope
);
129 if (!(property
= zend_std_get_static_property(scope
, name
, name_len
, 0 TSRMLS_CC
))) {
131 } else if (*property
== value
) {
135 if (PZVAL_IS_REF(*property
)) {
136 zval_dtor(*property
);
137 (*property
)->type
= value
->type
;
138 (*property
)->value
= value
->value
;
140 if (value
->refcount
) {
141 zval_copy_ctor(*property
);
145 zval_copy_ctor(*property
);
149 zval_ptr_dtor(&value
);
150 EG(scope
) = old_scope
;
155 int zend_update_static_property_bool(zend_class_entry
*scope
, char *name
, size_t name_len
, zend_bool value TSRMLS_DC
)
157 zval
*tmp
= tmp_zval();
158 ZVAL_BOOL(tmp
, value
);
159 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
162 int zend_update_static_property_long(zend_class_entry
*scope
, char *name
, size_t name_len
, long value TSRMLS_DC
)
164 zval
*tmp
= tmp_zval();
165 ZVAL_LONG(tmp
, value
);
166 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
169 int zend_update_static_property_double(zend_class_entry
*scope
, char *name
, size_t name_len
, double value TSRMLS_DC
)
171 zval
*tmp
= tmp_zval();
172 ZVAL_DOUBLE(tmp
, value
);
173 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
176 int zend_update_static_property_string(zend_class_entry
*scope
, char *name
, size_t name_len
, char *value TSRMLS_DC
)
178 zval
*tmp
= tmp_zval();
179 ZVAL_STRING(tmp
, value
, 1);
180 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
183 int zend_update_static_property_stringl(zend_class_entry
*scope
, char *name
, size_t name_len
, char *value
, size_t value_len TSRMLS_DC
)
185 zval
*tmp
= tmp_zval();
186 ZVAL_STRINGL(tmp
, value
, value_len
, 1);
187 return zend_update_static_property(scope
, name
, name_len
, tmp TSRMLS_CC
);
190 void zend_fix_static_properties(zend_class_entry
*ce
, HashTable
*static_members TSRMLS_DC
)
192 zend_hash_copy(static_members
, ce
->static_members
, (copy_ctor_func_t
) zval_add_ref
, NULL
, sizeof(zval
*));
193 zend_hash_destroy(ce
->static_members
);
194 zend_hash_init_ex(ce
->static_members
, static_members
->nNumOfElements
, NULL
, ZVAL_PTR_DTOR
, 1, 0);
197 void zend_init_static_properties(zend_class_entry
*ce
, HashTable
*static_members TSRMLS_DC
)
199 zend_hash_copy(ce
->static_members
, static_members
, (copy_ctor_func_t
) dup_zval
, NULL
, sizeof(zval
*));
202 void zend_clean_static_properties(zend_class_entry
*ce TSRMLS_DC
)
204 zend_hash_clean(ce
->static_members
);
207 #endif /* PHP_MAJOR_VERSION == 5 */
214 * vim600: noet sw=4 ts=4 fdm=marker
215 * vim<600: noet sw=4 ts=4