ZEND_API int zend_register_constant(zend_constant *c) { zend_string *lowercase_name = NULL; zend_string *name; int ret = SUCCESS; #if 0 printf("Registering constant for module %d\n", c->module_number); #endif if (c->module_number != PHP_USER_CONSTANT) { c->name = zend_new_interned_string(c->name); } if (!(c->flags & CONST_CS)) { lowercase_name = zend_string_alloc(ZSTR_LEN(c->name), c->flags & CONST_PERSISTENT); zend_str_tolower_copy(ZSTR_VAL(lowercase_name), ZSTR_VAL(c->name), ZSTR_LEN(c->name)); lowercase_name = zend_new_interned_string(lowercase_name); name = lowercase_name; } else { char *slash = strrchr(ZSTR_VAL(c->name), '\\'); if (slash) { lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), c->flags & CONST_PERSISTENT); zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name)); lowercase_name = zend_new_interned_string(lowercase_name); name = lowercase_name; } else { name = c->name; } } /* Check if the user is trying to define the internal pseudo constant name __COMPILER_HALT_OFFSET__ */ if ((ZSTR_LEN(c->name) == sizeof("__COMPILER_HALT_OFFSET__")-1 && !memcmp(ZSTR_VAL(name), "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1)) || zend_hash_add_constant(EG(zend_constants), name, c) == NULL) { /* The internal __COMPILER_HALT_OFFSET__ is prefixed by NULL byte */ if (ZSTR_VAL(c->name)[0] == '\0' && ZSTR_LEN(c->name) > sizeof("\0__COMPILER_HALT_OFFSET__")-1 && memcmp(ZSTR_VAL(name), "\0__COMPILER_HALT_OFFSET__", sizeof("\0__COMPILER_HALT_OFFSET__")) == 0) { } zend_error(E_NOTICE,"Constant %s already defined", ZSTR_VAL(name)); zend_string_release(c->name); if (!(c->flags & CONST_PERSISTENT)) { zval_dtor(&c->value); } ret = FAILURE; } if (lowercase_name) { zend_string_release(lowercase_name); } return ret; }
/* {{{ dt_register_superglobal Register a new superglobal */ int dt_register_superglobal(char* variableName, int len) { ulong h; /* Get hash */ h = zend_inline_hash_func(variableName, len + 1); /* Check if already registered */ if(zend_hash_quick_exists(CG(auto_globals), variableName, len + 1, h)) { return 0; } /* Register auto global */ zend_auto_global auto_global; auto_global.name = (char*) zend_new_interned_string((char*) variableName, len + 1, 0 TSRMLS_CC); auto_global.name_len = len; auto_global.auto_global_callback = NULL; # if DT_PHP_VERSION == 54 auto_global.jit = 1; # endif zend_hash_quick_add(CG(auto_globals), variableName, len + 1, h, &auto_global, sizeof(zend_auto_global), NULL); zend_rebuild_symbol_table(); return 1; }
ZEND_API int zend_register_constant(zend_constant *c) { zend_string *lowercase_name = NULL; zend_string *name; int ret = SUCCESS; zend_bool persistent = (ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) != 0; #if 0 printf("Registering constant for module %d\n", c->module_number); #endif char *slash = strrchr(ZSTR_VAL(c->name), '\\'); if (slash) { lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), persistent); zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name)); lowercase_name = zend_new_interned_string(lowercase_name); name = lowercase_name; } else { name = c->name; } /* Check if the user is trying to define any special constant */ if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__") || (!persistent && zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name))) || zend_hash_add_constant(EG(zend_constants), name, c) == NULL ) { zend_error(E_NOTICE,"Constant %s already defined", ZSTR_VAL(name)); zend_string_release(c->name); if (!persistent) { zval_ptr_dtor_nogc(&c->value); } ret = FAILURE; } if (lowercase_name) { zend_string_release(lowercase_name); } return ret; }
const char *apc_new_interned_string(const char *arKey, int nKeyLength TSRMLS_DC) { #ifndef ZTS ulong h; uint nIndex; Bucket *p; if (arKey >= APCSG(interned_strings_start) && arKey < APCSG(interned_strings_end)) { return arKey; } h = zend_inline_hash_func(arKey, nKeyLength); nIndex = h & APCSG(interned_strings).nTableMask; p = APCSG(interned_strings).arBuckets[nIndex]; while (p != NULL) { if ((p->h == h) && (p->nKeyLength == nKeyLength)) { if (!memcmp(p->arKey, arKey, nKeyLength)) { return p->arKey; } } p = p->pNext; } if (APCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength + 1) >= APCSG(interned_strings_end)) { /* no memory */ return NULL; } p = (Bucket *) APCSG(interned_strings_top); APCSG(interned_strings_top) += ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength + 1); p->arKey = (char*)(p+1); memcpy(p->arKey, arKey, nKeyLength); ((char *)p->arKey)[nKeyLength] = '\0'; p->nKeyLength = nKeyLength; p->h = h; p->pData = &p->pDataPtr; p->pDataPtr = p; p->pNext = APCSG(interned_strings).arBuckets[nIndex]; p->pLast = NULL; if (p->pNext) { p->pNext->pLast = p; } APCSG(interned_strings).arBuckets[nIndex] = p; p->pListLast = APCSG(interned_strings).pListTail; APCSG(interned_strings).pListTail = p; p->pListNext = NULL; if (p->pListLast != NULL) { p->pListLast->pListNext = p; } if (!APCSG(interned_strings).pListHead) { APCSG(interned_strings).pListHead = p; } APCSG(interned_strings).nNumOfElements++; return p->arKey; #else return zend_new_interned_string(arKey, nKeyLength, 0 TSRMLS_CC); #endif }
PHALCON_STATIC void phalcon_init_interned_strings(TSRMLS_D) { phalcon_interned_DELETE = zend_new_interned_string(ZEND_STRS("DELETE"), 0 TSRMLS_CC); phalcon_interned_GET = zend_new_interned_string(ZEND_STRS("GET"), 0 TSRMLS_CC); phalcon_interned_HEAD = zend_new_interned_string(ZEND_STRS("HEAD"), 0 TSRMLS_CC); phalcon_interned_OPTIONS = zend_new_interned_string(ZEND_STRS("OPTIONS"), 0 TSRMLS_CC); phalcon_interned_PATCH = zend_new_interned_string(ZEND_STRS("PATCH"), 0 TSRMLS_CC); phalcon_interned_POST = zend_new_interned_string(ZEND_STRS("POST"), 0 TSRMLS_CC); phalcon_interned_PUT = zend_new_interned_string(ZEND_STRS("PUT"), 0 TSRMLS_CC); phalcon_interned_action = zend_new_interned_string(ZEND_STRS("action"), 0 TSRMLS_CC); phalcon_interned_alias = zend_new_interned_string(ZEND_STRS("alias"), 0 TSRMLS_CC); phalcon_interned_all = zend_new_interned_string(ZEND_STRS("all"), 0 TSRMLS_CC); phalcon_interned_allowEmpty = zend_new_interned_string(ZEND_STRS("allowEmpty"), 0 TSRMLS_CC); phalcon_interned_arguments = zend_new_interned_string(ZEND_STRS("arguments"), 0 TSRMLS_CC); phalcon_interned_balias = zend_new_interned_string(ZEND_STRS("balias"), 0 TSRMLS_CC); phalcon_interned_binary_op = zend_new_interned_string(ZEND_STRS("binary-op"), 0 TSRMLS_CC); phalcon_interned_code = zend_new_interned_string(ZEND_STRS("code"), 0 TSRMLS_CC); phalcon_interned_column = zend_new_interned_string(ZEND_STRS("column"), 0 TSRMLS_CC); phalcon_interned_columns = zend_new_interned_string(ZEND_STRS("columns"), 0 TSRMLS_CC); phalcon_interned_conditions = zend_new_interned_string(ZEND_STRS("conditions"), 0 TSRMLS_CC); phalcon_interned_controller = zend_new_interned_string(ZEND_STRS("controller"), 0 TSRMLS_CC); phalcon_interned_delete = zend_new_interned_string(ZEND_STRS("delete"), 0 TSRMLS_CC); phalcon_interned_dispatcher = zend_new_interned_string(ZEND_STRS("dispatcher"), 0 TSRMLS_CC); phalcon_interned_distinct = zend_new_interned_string(ZEND_STRS("distinct"), 0 TSRMLS_CC); phalcon_interned_domain = zend_new_interned_string(ZEND_STRS("domain"), 0 TSRMLS_CC); phalcon_interned_escaper = zend_new_interned_string(ZEND_STRS("escaper"), 0 TSRMLS_CC); phalcon_interned_expr = zend_new_interned_string(ZEND_STRS("expr"), 0 TSRMLS_CC); phalcon_interned_fields = zend_new_interned_string(ZEND_STRS("fields"), 0 TSRMLS_CC); phalcon_interned_file = zend_new_interned_string(ZEND_STRS("file"), 0 TSRMLS_CC); phalcon_interned_filter = zend_new_interned_string(ZEND_STRS("filter"), 0 TSRMLS_CC); phalcon_interned_functionCall = zend_new_interned_string(ZEND_STRS("functionCall"), 0 TSRMLS_CC); phalcon_interned_group = zend_new_interned_string(ZEND_STRS("group"), 0 TSRMLS_CC); phalcon_interned_groupBy = zend_new_interned_string(ZEND_STRS("groupBy"), 0 TSRMLS_CC); phalcon_interned_having = zend_new_interned_string(ZEND_STRS("having"), 0 TSRMLS_CC); phalcon_interned_items = zend_new_interned_string(ZEND_STRS("items"), 0 TSRMLS_CC); phalcon_interned_joins = zend_new_interned_string(ZEND_STRS("joins"), 0 TSRMLS_CC); phalcon_interned_label = zend_new_interned_string(ZEND_STRS("label"), 0 TSRMLS_CC); phalcon_interned_left = zend_new_interned_string(ZEND_STRS("left"), 0 TSRMLS_CC); phalcon_interned_limit = zend_new_interned_string(ZEND_STRS("limit"), 0 TSRMLS_CC); phalcon_interned_line = zend_new_interned_string(ZEND_STRS("line"), 0 TSRMLS_CC); phalcon_interned_message = zend_new_interned_string(ZEND_STRS("message"), 0 TSRMLS_CC); phalcon_interned_model = zend_new_interned_string(ZEND_STRS("model"), 0 TSRMLS_CC); phalcon_interned_models = zend_new_interned_string(ZEND_STRS("models"), 0 TSRMLS_CC); phalcon_interned_modelsCache = zend_new_interned_string(ZEND_STRS("modelsCache"), 0 TSRMLS_CC); phalcon_interned_modelsManager = zend_new_interned_string(ZEND_STRS("modelsManager"), 0 TSRMLS_CC); phalcon_interned_modelsMetadata = zend_new_interned_string(ZEND_STRS("modelsMetadata"), 0 TSRMLS_CC); phalcon_interned_module = zend_new_interned_string(ZEND_STRS("module"), 0 TSRMLS_CC); phalcon_interned_name = zend_new_interned_string(ZEND_STRS("name"), 0 TSRMLS_CC); phalcon_interned_namespace = zend_new_interned_string(ZEND_STRS("namespace"), 0 TSRMLS_CC); phalcon_interned_ns_alias = zend_new_interned_string(ZEND_STRS("ns-alias"), 0 TSRMLS_CC); phalcon_interned_number = zend_new_interned_string(ZEND_STRS("number"), 0 TSRMLS_CC); phalcon_interned_offset = zend_new_interned_string(ZEND_STRS("offset"), 0 TSRMLS_CC); phalcon_interned_op = zend_new_interned_string(ZEND_STRS("op"), 0 TSRMLS_CC); phalcon_interned_order = zend_new_interned_string(ZEND_STRS("order"), 0 TSRMLS_CC); phalcon_interned_orderBy = zend_new_interned_string(ZEND_STRS("orderBy"), 0 TSRMLS_CC); phalcon_interned_params = zend_new_interned_string(ZEND_STRS("params"), 0 TSRMLS_CC); phalcon_interned_parent = zend_new_interned_string(ZEND_STRS("parent"), 0 TSRMLS_CC); phalcon_interned_paths = zend_new_interned_string(ZEND_STRS("paths"), 0 TSRMLS_CC); phalcon_interned_qualified = zend_new_interned_string(ZEND_STRS("qualified"), 0 TSRMLS_CC); phalcon_interned_qualifiedName = zend_new_interned_string(ZEND_STRS("qualifiedName"), 0 TSRMLS_CC); phalcon_interned_request = zend_new_interned_string(ZEND_STRS("request"), 0 TSRMLS_CC); phalcon_interned_response = zend_new_interned_string(ZEND_STRS("response"), 0 TSRMLS_CC); phalcon_interned_right = zend_new_interned_string(ZEND_STRS("right"), 0 TSRMLS_CC); phalcon_interned_router = zend_new_interned_string(ZEND_STRS("router"), 0 TSRMLS_CC); phalcon_interned_select = zend_new_interned_string(ZEND_STRS("select"), 0 TSRMLS_CC); phalcon_interned_self = zend_new_interned_string(ZEND_STRS("self"), 0 TSRMLS_CC); phalcon_interned_session = zend_new_interned_string(ZEND_STRS("session"), 0 TSRMLS_CC); phalcon_interned_sort = zend_new_interned_string(ZEND_STRS("sort"), 0 TSRMLS_CC); phalcon_interned_source = zend_new_interned_string(ZEND_STRS("source"), 0 TSRMLS_CC); phalcon_interned_static = zend_new_interned_string(ZEND_STRS("static"), 0 TSRMLS_CC); phalcon_interned_sqlAlias = zend_new_interned_string(ZEND_STRS("sqlAlias"), 0 TSRMLS_CC); phalcon_interned_table = zend_new_interned_string(ZEND_STRS("table"), 0 TSRMLS_CC); phalcon_interned_tables = zend_new_interned_string(ZEND_STRS("tables"), 0 TSRMLS_CC); phalcon_interned_type = zend_new_interned_string(ZEND_STRS("type"), 0 TSRMLS_CC); phalcon_interned_update = zend_new_interned_string(ZEND_STRS("update"), 0 TSRMLS_CC); phalcon_interned_url = zend_new_interned_string(ZEND_STRS("url"), 0 TSRMLS_CC); phalcon_interned_value = zend_new_interned_string(ZEND_STRS("value"), 0 TSRMLS_CC); phalcon_interned_values = zend_new_interned_string(ZEND_STRS("values"), 0 TSRMLS_CC); phalcon_interned_where = zend_new_interned_string(ZEND_STRS("where"), 0 TSRMLS_CC); phalcon_interned_rows = zend_new_interned_string(ZEND_STRS("rows"), 0 TSRMLS_CC); phalcon_interned_cookies = zend_new_interned_string(ZEND_STRS("cookies"), 0 TSRMLS_CC); phalcon_interned_annotations = zend_new_interned_string(ZEND_STRS("annotations"), 0 TSRMLS_CC); phalcon_interned_security = zend_new_interned_string(ZEND_STRS("security"), 0 TSRMLS_CC); phalcon_interned_crypt = zend_new_interned_string(ZEND_STRS("crypt"), 0 TSRMLS_CC); phalcon_interned_flash = zend_new_interned_string(ZEND_STRS("flash"), 0 TSRMLS_CC); phalcon_interned_flashSession = zend_new_interned_string(ZEND_STRS("flashSession"), 0 TSRMLS_CC); phalcon_interned_tag = zend_new_interned_string(ZEND_STRS("tag"), 0 TSRMLS_CC); phalcon_interned_sessionBag = zend_new_interned_string(ZEND_STRS("sessionBag"), 0 TSRMLS_CC); phalcon_interned_eventsManager = zend_new_interned_string(ZEND_STRS("eventsManager"), 0 TSRMLS_CC); phalcon_interned_transactionManager = zend_new_interned_string(ZEND_STRS("transactions"), 0 TSRMLS_CC); phalcon_interned_assets = zend_new_interned_string(ZEND_STRS("assets"), 0 TSRMLS_CC); }