diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-02-17 17:59:18 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-17 17:59:18 +0400 |
commit | 2b9b9afa7a9a66f9c80013ce4121183bdff434e8 (patch) | |
tree | 6fa09b93653af14de10c02215632e5cc458cf60a /Zend/zend_constants.c | |
parent | 50661690709630bd5dcea599bb0f276083292921 (diff) | |
download | php-git-2b9b9afa7a9a66f9c80013ce4121183bdff434e8.tar.gz |
Use better data structures (incomplete)
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r-- | Zend/zend_constants.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index f6cbac3968..04162c8b70 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -27,12 +27,17 @@ #include "zend_globals.h" #include "zend_API.h" -void free_zend_constant(zend_constant *c) +void free_zend_constant(zval *zv) { + zend_constant *c = Z_PTR_P(zv); + if (!(c->flags & CONST_PERSISTENT)) { zval_dtor(&c->value); + } else { + zval_internal_dtor(&c->value); } STR_RELEASE(c->name); + free(c); } @@ -40,12 +45,12 @@ static void copy_zend_constant(zval *zv) { zend_constant *c = Z_PTR_P(zv); - Z_PTR_P(zv) = pemalloc(sizeof(zend_constant), c->flags & CONST_PERSISTENT); + Z_PTR_P(zv) = malloc(sizeof(zend_constant)/*, c->flags & CONST_PERSISTENT*/); memcpy(Z_PTR_P(zv), c, sizeof(zend_constant)); c->name = STR_DUP(c->name, c->flags & CONST_PERSISTENT); - if (!(c->flags & CONST_PERSISTENT)) { +//??? if (!(c->flags & CONST_PERSISTENT)) { zval_copy_ctor(&c->value); - } +//??? } } @@ -55,14 +60,16 @@ void zend_copy_constants(HashTable *target, HashTable *source) } -static int clean_non_persistent_constant(const zend_constant *c TSRMLS_DC) +static int clean_non_persistent_constant(zval *zv TSRMLS_DC) { + zend_constant *c = Z_PTR_P(zv); return (c->flags & CONST_PERSISTENT) ? ZEND_HASH_APPLY_STOP : ZEND_HASH_APPLY_REMOVE; } -static int clean_non_persistent_constant_full(const zend_constant *c TSRMLS_DC) +static int clean_non_persistent_constant_full(zval *zv TSRMLS_DC) { + zend_constant *c = Z_PTR_P(zv); return (c->flags & CONST_PERSISTENT) ? 0 : 1; } @@ -139,9 +146,9 @@ int zend_shutdown_constants(TSRMLS_D) void clean_non_persistent_constants(TSRMLS_D) { if (EG(full_tables_cleanup)) { - zend_hash_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant_full TSRMLS_CC); + zend_hash_apply(EG(zend_constants), clean_non_persistent_constant_full TSRMLS_CC); } else { - zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC); + zend_hash_reverse_apply(EG(zend_constants), clean_non_persistent_constant TSRMLS_CC); } } @@ -151,8 +158,7 @@ ZEND_API void zend_register_null_constant(const char *name, uint name_len, int f ZVAL_NULL(&c.value); c.flags = flags; - // TODO: remove -1 ??? - c.name = STR_INIT(name, name_len-1, flags & CONST_PERSISTENT); + c.name = STR_INIT(name, name_len, flags & CONST_PERSISTENT); c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } @@ -163,8 +169,7 @@ ZEND_API void zend_register_bool_constant(const char *name, uint name_len, zend_ ZVAL_BOOL(&c.value, bval); c.flags = flags; - // TODO: remove -1 ??? - c.name = STR_INIT(name, name_len-1, flags & CONST_PERSISTENT); + c.name = STR_INIT(name, name_len, flags & CONST_PERSISTENT); c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } @@ -175,8 +180,7 @@ ZEND_API void zend_register_long_constant(const char *name, uint name_len, long ZVAL_LONG(&c.value, lval); c.flags = flags; - // TODO: remove -1 ??? - c.name = STR_INIT(name, name_len-1, flags & CONST_PERSISTENT); + c.name = STR_INIT(name, name_len, flags & CONST_PERSISTENT); c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } @@ -188,8 +192,7 @@ ZEND_API void zend_register_double_constant(const char *name, uint name_len, dou ZVAL_DOUBLE(&c.value, dval); c.flags = flags; - // TODO: remove -1 ??? - c.name = STR_INIT(name, name_len-1, flags & CONST_PERSISTENT); + c.name = STR_INIT(name, name_len, flags & CONST_PERSISTENT); c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } @@ -200,10 +203,9 @@ ZEND_API void zend_register_stringl_constant(const char *name, uint name_len, ch zend_constant c; //??? ZVAL_STRINGL(&c.value, strval, strlen, 0); - ZVAL_STRINGL(&c.value, strval, strlen); + ZVAL_STR(&c.value, STR_INIT(strval, strlen, flags & CONST_PERSISTENT)); c.flags = flags; - // TODO: remove -1 ??? - c.name = STR_INIT(name, name_len-1, flags & CONST_PERSISTENT); + c.name = STR_INIT(name, name_len, flags & CONST_PERSISTENT); c.module_number = module_number; zend_register_constant(&c TSRMLS_CC); } @@ -254,16 +256,16 @@ static zend_constant *zend_get_special_constant(const char *name, uint name_len } else if (name_len == sizeof("__COMPILER_HALT_OFFSET__")-1 && !memcmp(name, "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1)) { const char *cfilename; - char *haltname; - int len, clen; + zend_string *haltname; + int clen; cfilename = zend_get_executed_filename(TSRMLS_C); clen = strlen(cfilename); /* check for __COMPILER_HALT_OFFSET__ */ - zend_mangle_property_name(&haltname, &len, haltoff, + haltname = zend_mangle_property_name(haltoff, sizeof("__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0); - c = zend_hash_str_find_ptr(EG(zend_constants), haltname, len); - efree(haltname); + c = zend_hash_find_ptr(EG(zend_constants), haltname); + STR_FREE(haltname); return c; } else { return NULL; @@ -469,14 +471,14 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC) if (!(c->flags & CONST_CS)) { //??? /* keep in mind that c->name_len already contains the '\0' */ - lowercase_name = STR_ALLOC(c->name->len, 0); + lowercase_name = STR_ALLOC(c->name->len, c->flags & CONST_PERSISTENT); zend_str_tolower_copy(lowercase_name->val, c->name->val, c->name->len); lowercase_name = zend_new_interned_string(lowercase_name TSRMLS_CC); name = lowercase_name; } else { char *slash = strrchr(c->name->val, '\\'); if (slash) { - lowercase_name = STR_ALLOC(c->name->len, 0); + lowercase_name = STR_ALLOC(c->name->len, c->flags & CONST_PERSISTENT); zend_str_tolower_copy(lowercase_name->val, c->name->val, c->name->len); lowercase_name = zend_new_interned_string(lowercase_name TSRMLS_CC); name = lowercase_name; |