From f11d620cb62cc17baab58c92d0a81dcde90887f6 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 15 Apr 2013 18:13:09 +0100 Subject: [PATCH 1/4] zend_register_bool_constant patch --- Zend/zend_constants.c | 12 ++++++++++++ Zend/zend_constants.h | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 21580d3d5f607..c00caa87f5aa5 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -175,6 +175,18 @@ void clean_non_persistent_constants(TSRMLS_D) } } +ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC) +{ + zend_constant c; + + c.value.type = IS_BOOL; + c.value.value.lval = bval; + c.flags = flags; + c.name = zend_strndup(name, name_len-1); + c.name_len = name_len; + c.module_number = module_number; + zend_register_constant(&c TSRMLS_CC); +} ZEND_API void zend_register_long_constant(const char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC) { diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index c7261946c826f..a377c0f7ea11c 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -38,16 +38,19 @@ typedef struct _zend_constant { int module_number; } zend_constant; +#define REGISTER_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name), (bval), (flags), module_number TSRMLS_CC) #define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC) #define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), module_number TSRMLS_CC) #define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), module_number TSRMLS_CC) #define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), module_number TSRMLS_CC) +#define REGISTER_NS_BOOL_CONSTANT(ns, name, bval, flags) zend_register_long_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (bval), (flags), module_number TSRMLS_CC) #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) #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) #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) #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) +#define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags) zend_register_long_constant((name), sizeof(name), (bval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), 0 TSRMLS_CC) @@ -62,6 +65,7 @@ void zend_register_standard_constants(TSRMLS_D); void clean_non_persistent_constants(TSRMLS_D); ZEND_API int zend_get_constant(const char *name, uint name_len, zval *result TSRMLS_DC); ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result, zend_class_entry *scope, ulong flags TSRMLS_DC); +ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_long_constant(const char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_double_constant(const char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_string_constant(const char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC); From 2966e63faf36c62251852d2278aa209ff12e42c6 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 15 Apr 2013 18:27:45 +0100 Subject: [PATCH 2/4] use Z_* family macros --- Zend/zend_constants.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index c00caa87f5aa5..216206c4b7f75 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -126,33 +126,33 @@ void zend_register_standard_constants(TSRMLS_D) c.name = zend_strndup(ZEND_STRL("TRUE")); c.name_len = sizeof("TRUE"); - c.value.value.lval = 1; - c.value.type = IS_BOOL; + Z_LVAL(c.value) = 1; + Z_TYPE(c.value) = IS_BOOL; zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("FALSE")); c.name_len = sizeof("FALSE"); - c.value.value.lval = 0; - c.value.type = IS_BOOL; + Z_LVAL(c.value) = 0; + Z_TYPE(c.value) = IS_BOOL; zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("NULL")); c.name_len = sizeof("NULL"); - c.value.type = IS_NULL; + Z_TYPE(c.value) = IS_NULL; zend_register_constant(&c TSRMLS_CC); c.flags = CONST_PERSISTENT | CONST_CS; c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE")); c.name_len = sizeof("ZEND_THREAD_SAFE"); - c.value.value.lval = ZTS_V; - c.value.type = IS_BOOL; + Z_LVAL(c.value) = ZTS_V; + Z_TYPE(c.value) = IS_BOOL; zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("ZEND_DEBUG_BUILD")); c.name_len = sizeof("ZEND_DEBUG_BUILD"); - c.value.value.lval = ZEND_DEBUG; - c.value.type = IS_BOOL; + Z_LVAL(c.value) = ZEND_DEBUG; + Z_TYPE(c.value) = IS_BOOL; zend_register_constant(&c TSRMLS_CC); } } @@ -179,8 +179,8 @@ ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_ { zend_constant c; - c.value.type = IS_BOOL; - c.value.value.lval = bval; + Z_TYPE(c.value) = IS_BOOL; + Z_LVAL(c.value) = bval; c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -192,8 +192,8 @@ ZEND_API void zend_register_long_constant(const char *name, uint name_len, long { zend_constant c; - c.value.type = IS_LONG; - c.value.value.lval = lval; + Z_TYPE(c.value) = IS_LONG; + Z_LVAL(c.value) = lval; c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -206,8 +206,8 @@ ZEND_API void zend_register_double_constant(const char *name, uint name_len, dou { zend_constant c; - c.value.type = IS_DOUBLE; - c.value.value.dval = dval; + Z_TYPE(c.value) = IS_DOUBLE; + Z_DVAL(c.value) = dval; c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -220,9 +220,9 @@ ZEND_API void zend_register_stringl_constant(const char *name, uint name_len, ch { zend_constant c; - c.value.type = IS_STRING; - c.value.value.str.val = strval; - c.value.value.str.len = strlen; + Z_TYPE(c.value) = IS_STRING; + Z_STRVAL(c.value) = strval; + Z_STRLEN(c.value) = strlen; c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; From a49bb472a33f25640b6c5b7db965d866019367c5 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 15 Apr 2013 18:40:09 +0100 Subject: [PATCH 3/4] zend_API.h included ZVAL_* family in use --- Zend/zend_constants.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 216206c4b7f75..64b5edb81f66a 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -25,7 +25,7 @@ #include "zend_variables.h" #include "zend_operators.h" #include "zend_globals.h" - +#include "zend_API.h" void free_zend_constant(zend_constant *c) { @@ -126,33 +126,29 @@ void zend_register_standard_constants(TSRMLS_D) c.name = zend_strndup(ZEND_STRL("TRUE")); c.name_len = sizeof("TRUE"); - Z_LVAL(c.value) = 1; - Z_TYPE(c.value) = IS_BOOL; + ZVAL_BOOL(&c.value, 1); zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("FALSE")); c.name_len = sizeof("FALSE"); - Z_LVAL(c.value) = 0; - Z_TYPE(c.value) = IS_BOOL; + ZVAL_BOOL(&c.value, 0); zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("NULL")); c.name_len = sizeof("NULL"); - Z_TYPE(c.value) = IS_NULL; + ZVAL_NULL(&c.value); zend_register_constant(&c TSRMLS_CC); c.flags = CONST_PERSISTENT | CONST_CS; c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE")); c.name_len = sizeof("ZEND_THREAD_SAFE"); - Z_LVAL(c.value) = ZTS_V; - Z_TYPE(c.value) = IS_BOOL; + ZVAL_BOOL(&c.value, ZTS_V); zend_register_constant(&c TSRMLS_CC); c.name = zend_strndup(ZEND_STRL("ZEND_DEBUG_BUILD")); c.name_len = sizeof("ZEND_DEBUG_BUILD"); - Z_LVAL(c.value) = ZEND_DEBUG; - Z_TYPE(c.value) = IS_BOOL; + ZVAL_BOOL(&c.value, ZEND_DEBUG); zend_register_constant(&c TSRMLS_CC); } } @@ -179,8 +175,7 @@ ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_ { zend_constant c; - Z_TYPE(c.value) = IS_BOOL; - Z_LVAL(c.value) = bval; + ZVAL_BOOL(&c.value, bval); c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -192,8 +187,7 @@ ZEND_API void zend_register_long_constant(const char *name, uint name_len, long { zend_constant c; - Z_TYPE(c.value) = IS_LONG; - Z_LVAL(c.value) = lval; + ZVAL_LONG(&c.value, lval); c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -206,8 +200,7 @@ ZEND_API void zend_register_double_constant(const char *name, uint name_len, dou { zend_constant c; - Z_TYPE(c.value) = IS_DOUBLE; - Z_DVAL(c.value) = dval; + ZVAL_DOUBLE(&c.value, dval); c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; @@ -220,9 +213,7 @@ ZEND_API void zend_register_stringl_constant(const char *name, uint name_len, ch { zend_constant c; - Z_TYPE(c.value) = IS_STRING; - Z_STRVAL(c.value) = strval; - Z_STRLEN(c.value) = strlen; + ZVAL_STRINGL(&c.value, strval, strlen, 0); c.flags = flags; c.name = zend_strndup(name, name_len-1); c.name_len = name_len; From 2c0d93bcbf3ee0a561b066047a8dc551d2aacb06 Mon Sep 17 00:00:00 2001 From: krakjoe Date: Mon, 15 Apr 2013 20:47:13 +0100 Subject: [PATCH 4/4] zend_register_null_constant fixed zend_register_bool_constant usage in macros use REGISTER_MAIN_* in zend_register_standard_constants --- Zend/zend_constants.c | 48 +++++++++++++++---------------------------- Zend/zend_constants.h | 8 ++++++-- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 64b5edb81f66a..594559d58bf06 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -119,38 +119,12 @@ void zend_register_standard_constants(TSRMLS_D) REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS); /* true/false constants */ { - zend_constant c; - - c.flags = CONST_PERSISTENT | CONST_CT_SUBST; - c.module_number = 0; - - c.name = zend_strndup(ZEND_STRL("TRUE")); - c.name_len = sizeof("TRUE"); - ZVAL_BOOL(&c.value, 1); - zend_register_constant(&c TSRMLS_CC); - - c.name = zend_strndup(ZEND_STRL("FALSE")); - c.name_len = sizeof("FALSE"); - ZVAL_BOOL(&c.value, 0); - zend_register_constant(&c TSRMLS_CC); - - c.name = zend_strndup(ZEND_STRL("NULL")); - c.name_len = sizeof("NULL"); - ZVAL_NULL(&c.value); - zend_register_constant(&c TSRMLS_CC); - - c.flags = CONST_PERSISTENT | CONST_CS; - - c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE")); - c.name_len = sizeof("ZEND_THREAD_SAFE"); - ZVAL_BOOL(&c.value, ZTS_V); - zend_register_constant(&c TSRMLS_CC); - - c.name = zend_strndup(ZEND_STRL("ZEND_DEBUG_BUILD")); - c.name_len = sizeof("ZEND_DEBUG_BUILD"); - ZVAL_BOOL(&c.value, ZEND_DEBUG); - zend_register_constant(&c TSRMLS_CC); + REGISTER_MAIN_BOOL_CONSTANT("TRUE", 1, CONST_PERSISTENT | CONST_CT_SUBST); + REGISTER_MAIN_BOOL_CONSTANT("FALSE", 0, CONST_PERSISTENT | CONST_CT_SUBST); + REGISTER_MAIN_BOOL_CONSTANT("ZEND_THREAD_SAFE", ZTS_V, CONST_PERSISTENT | CONST_CS); + REGISTER_MAIN_BOOL_CONSTANT("ZEND_DEBUG_BUILD", ZEND_DEBUG, CONST_PERSISTENT | CONST_CS); } + REGISTER_MAIN_NULL_CONSTANT("NULL", CONST_PERSISTENT | CONST_CT_SUBST); } @@ -171,6 +145,18 @@ void clean_non_persistent_constants(TSRMLS_D) } } +ZEND_API void zend_register_null_constant(const char *name, uint name_len, int flags, int module_number TSRMLS_DC) +{ + zend_constant c; + + ZVAL_NULL(&c.value); + c.flags = flags; + c.name = zend_strndup(name, name_len-1); + c.name_len = name_len; + c.module_number = module_number; + zend_register_constant(&c TSRMLS_CC); +} + ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC) { zend_constant c; diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h index a377c0f7ea11c..718c173cc7b96 100644 --- a/Zend/zend_constants.h +++ b/Zend/zend_constants.h @@ -38,19 +38,22 @@ typedef struct _zend_constant { int module_number; } zend_constant; +#define REGISTER_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name), (flags), module_number TSRMLS_CC) #define REGISTER_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name), (bval), (flags), module_number TSRMLS_CC) #define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC) #define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), module_number TSRMLS_CC) #define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), module_number TSRMLS_CC) #define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), module_number TSRMLS_CC) -#define REGISTER_NS_BOOL_CONSTANT(ns, name, bval, flags) zend_register_long_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name)), (bval), (flags), module_number TSRMLS_CC) +#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) +#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) #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) #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) #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) #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) -#define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags) zend_register_long_constant((name), sizeof(name), (bval), (flags), 0 TSRMLS_CC) +#define REGISTER_MAIN_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name), (flags), 0 TSRMLS_CC) +#define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name), (bval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), 0 TSRMLS_CC) #define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), 0 TSRMLS_CC) @@ -66,6 +69,7 @@ void clean_non_persistent_constants(TSRMLS_D); ZEND_API int zend_get_constant(const char *name, uint name_len, zval *result TSRMLS_DC); ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result, zend_class_entry *scope, ulong flags TSRMLS_DC); ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_bool bval, int flags, int module_number TSRMLS_DC); +ZEND_API void zend_register_null_constant(const char *name, uint name_len, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_long_constant(const char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_double_constant(const char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC); ZEND_API void zend_register_string_constant(const char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC);