Skip to content

Commit 4467ada

Browse files
committed
Merge branch 'pull-request/326'
* pull-request/326: zend_register_null_constant fixed zend_register_bool_constant usage in macros use REGISTER_MAIN_* in zend_register_standard_constants zend_API.h included ZVAL_* family in use use Z_* family macros zend_register_bool_constant patch
2 parents 8d2651d + 2c0d93b commit 4467ada

2 files changed

Lines changed: 40 additions & 43 deletions

File tree

Zend/zend_constants.c

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "zend_variables.h"
2626
#include "zend_operators.h"
2727
#include "zend_globals.h"
28-
28+
#include "zend_API.h"
2929

3030
void free_zend_constant(zend_constant *c)
3131
{
@@ -119,42 +119,12 @@ void zend_register_standard_constants(TSRMLS_D)
119119
REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS);
120120
/* true/false constants */
121121
{
122-
zend_constant c;
123-
124-
c.flags = CONST_PERSISTENT | CONST_CT_SUBST;
125-
c.module_number = 0;
126-
127-
c.name = zend_strndup(ZEND_STRL("TRUE"));
128-
c.name_len = sizeof("TRUE");
129-
c.value.value.lval = 1;
130-
c.value.type = IS_BOOL;
131-
zend_register_constant(&c TSRMLS_CC);
132-
133-
c.name = zend_strndup(ZEND_STRL("FALSE"));
134-
c.name_len = sizeof("FALSE");
135-
c.value.value.lval = 0;
136-
c.value.type = IS_BOOL;
137-
zend_register_constant(&c TSRMLS_CC);
138-
139-
c.name = zend_strndup(ZEND_STRL("NULL"));
140-
c.name_len = sizeof("NULL");
141-
c.value.type = IS_NULL;
142-
zend_register_constant(&c TSRMLS_CC);
143-
144-
c.flags = CONST_PERSISTENT | CONST_CS;
145-
146-
c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE"));
147-
c.name_len = sizeof("ZEND_THREAD_SAFE");
148-
c.value.value.lval = ZTS_V;
149-
c.value.type = IS_BOOL;
150-
zend_register_constant(&c TSRMLS_CC);
151-
152-
c.name = zend_strndup(ZEND_STRL("ZEND_DEBUG_BUILD"));
153-
c.name_len = sizeof("ZEND_DEBUG_BUILD");
154-
c.value.value.lval = ZEND_DEBUG;
155-
c.value.type = IS_BOOL;
156-
zend_register_constant(&c TSRMLS_CC);
122+
REGISTER_MAIN_BOOL_CONSTANT("TRUE", 1, CONST_PERSISTENT | CONST_CT_SUBST);
123+
REGISTER_MAIN_BOOL_CONSTANT("FALSE", 0, CONST_PERSISTENT | CONST_CT_SUBST);
124+
REGISTER_MAIN_BOOL_CONSTANT("ZEND_THREAD_SAFE", ZTS_V, CONST_PERSISTENT | CONST_CS);
125+
REGISTER_MAIN_BOOL_CONSTANT("ZEND_DEBUG_BUILD", ZEND_DEBUG, CONST_PERSISTENT | CONST_CS);
157126
}
127+
REGISTER_MAIN_NULL_CONSTANT("NULL", CONST_PERSISTENT | CONST_CT_SUBST);
158128
}
159129

160130

@@ -175,13 +145,35 @@ void clean_non_persistent_constants(TSRMLS_D)
175145
}
176146
}
177147

148+
ZEND_API void zend_register_null_constant(const char *name, uint name_len, int flags, int module_number TSRMLS_DC)
149+
{
150+
zend_constant c;
151+
152+
ZVAL_NULL(&c.value);
153+
c.flags = flags;
154+
c.name = zend_strndup(name, name_len-1);
155+
c.name_len = name_len;
156+
c.module_number = module_number;
157+
zend_register_constant(&c TSRMLS_CC);
158+
}
159+
160+
ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC)
161+
{
162+
zend_constant c;
163+
164+
ZVAL_BOOL(&c.value, bval);
165+
c.flags = flags;
166+
c.name = zend_strndup(name, name_len-1);
167+
c.name_len = name_len;
168+
c.module_number = module_number;
169+
zend_register_constant(&c TSRMLS_CC);
170+
}
178171

179172
ZEND_API void zend_register_long_constant(const char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC)
180173
{
181174
zend_constant c;
182175

183-
c.value.type = IS_LONG;
184-
c.value.value.lval = lval;
176+
ZVAL_LONG(&c.value, lval);
185177
c.flags = flags;
186178
c.name = zend_strndup(name, name_len-1);
187179
c.name_len = name_len;
@@ -194,8 +186,7 @@ ZEND_API void zend_register_double_constant(const char *name, uint name_len, dou
194186
{
195187
zend_constant c;
196188

197-
c.value.type = IS_DOUBLE;
198-
c.value.value.dval = dval;
189+
ZVAL_DOUBLE(&c.value, dval);
199190
c.flags = flags;
200191
c.name = zend_strndup(name, name_len-1);
201192
c.name_len = name_len;
@@ -208,9 +199,7 @@ ZEND_API void zend_register_stringl_constant(const char *name, uint name_len, ch
208199
{
209200
zend_constant c;
210201

211-
c.value.type = IS_STRING;
212-
c.value.value.str.val = strval;
213-
c.value.value.str.len = strlen;
202+
ZVAL_STRINGL(&c.value, strval, strlen, 0);
214203
c.flags = flags;
215204
c.name = zend_strndup(name, name_len-1);
216205
c.name_len = name_len;

Zend/zend_constants.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,22 @@ typedef struct _zend_constant {
3838
int module_number;
3939
} zend_constant;
4040

41+
#define REGISTER_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name), (flags), module_number TSRMLS_CC)
42+
#define REGISTER_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name), (bval), (flags), module_number TSRMLS_CC)
4143
#define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
4244
#define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), module_number TSRMLS_CC)
4345
#define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), module_number TSRMLS_CC)
4446
#define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), module_number TSRMLS_CC)
4547

48+
#define REGISTER_NS_NULL_CONSTANT(ns, name, flags) zend_register_null_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (flags), module_number TSRMLS_CC)
49+
#define REGISTER_NS_BOOL_CONSTANT(ns, name, bval, flags) zend_register_bool_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (bval), (flags), module_number TSRMLS_CC)
4650
#define REGISTER_NS_LONG_CONSTANT(ns, name, lval, flags) zend_register_long_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (lval), (flags), module_number TSRMLS_CC)
4751
#define REGISTER_NS_DOUBLE_CONSTANT(ns, name, dval, flags) zend_register_double_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (dval), (flags), module_number TSRMLS_CC)
4852
#define REGISTER_NS_STRING_CONSTANT(ns, name, str, flags) zend_register_string_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (str), (flags), module_number TSRMLS_CC)
4953
#define REGISTER_NS_STRINGL_CONSTANT(ns, name, str, len, flags) zend_register_stringl_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (str), (len), (flags), module_number TSRMLS_CC)
5054

55+
#define REGISTER_MAIN_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name), (flags), 0 TSRMLS_CC)
56+
#define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name), (bval), (flags), 0 TSRMLS_CC)
5157
#define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), 0 TSRMLS_CC)
5258
#define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), 0 TSRMLS_CC)
5359
#define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), 0 TSRMLS_CC)
@@ -62,6 +68,8 @@ void zend_register_standard_constants(TSRMLS_D);
6268
void clean_non_persistent_constants(TSRMLS_D);
6369
ZEND_API int zend_get_constant(const char *name, uint name_len, zval *result TSRMLS_DC);
6470
ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result, zend_class_entry *scope, ulong flags TSRMLS_DC);
71+
ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC);
72+
ZEND_API void zend_register_null_constant(const char *name, uint name_len, int flags, int module_number TSRMLS_DC);
6573
ZEND_API void zend_register_long_constant(const char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC);
6674
ZEND_API void zend_register_double_constant(const char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC);
6775
ZEND_API void zend_register_string_constant(const char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC);

0 commit comments

Comments
 (0)