31#define IS_CONSTANT_VISITED_MARK 0x80
33#define IS_CONSTANT_VISITED(zv) (Z_CONSTANT_FLAGS_P(zv) & IS_CONSTANT_VISITED_MARK)
34#define MARK_CONSTANT_VISITED(zv) Z_CONSTANT_FLAGS_P(zv) |= IS_CONSTANT_VISITED_MARK
35#define RESET_CONSTANT_VISITED(zv) Z_CONSTANT_FLAGS_P(zv) &= ~IS_CONSTANT_VISITED_MARK
45 zval_ptr_dtor_nogc(&c->
value);
61static void copy_zend_constant(
zval *
zv)
84static int clean_module_constant(
zval *el,
void *
arg)
87 int module_number = *(
int *)
arg;
112 register_zend_constants_symbols(0);
114 true_const = zend_hash_str_find_ptr(
EG(zend_constants),
"TRUE",
sizeof(
"TRUE")-1);
115 false_const = zend_hash_str_find_ptr(
EG(zend_constants),
"FALSE",
sizeof(
"FALSE")-1);
116 null_const = zend_hash_str_find_ptr(
EG(zend_constants),
"NULL",
sizeof(
"NULL")-1);
177static zend_constant *zend_get_halt_offset_constant(
const char *
name,
size_t name_len)
180 static const char haltoff[] =
"__COMPILER_HALT_OFFSET__";
182 if (!
EG(current_execute_data)) {
184 }
else if (name_len ==
sizeof(
"__COMPILER_HALT_OFFSET__")-1 &&
185 !memcmp(
name,
"__COMPILER_HALT_OFFSET__",
sizeof(
"__COMPILER_HALT_OFFSET__")-1)) {
186 const char *cfilename;
194 sizeof(
"__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0);
195 c = zend_hash_find_ptr(
EG(zend_constants), haltname);
196 zend_string_efree(haltname);
206 if ((
name[0] ==
'n' ||
name[0] ==
'N') &&
207 (
name[1] ==
'u' ||
name[1] ==
'U') &&
208 (
name[2] ==
'l' ||
name[2] ==
'L') &&
213 if ((
name[0] ==
't' ||
name[0] ==
'T') &&
214 (
name[1] ==
'r' ||
name[1] ==
'R') &&
215 (
name[2] ==
'u' ||
name[2] ==
'U') &&
221 if ((
name[0] ==
'f' ||
name[0] ==
'F') &&
222 (
name[1] ==
'a' ||
name[1] ==
'A') &&
223 (
name[2] ==
'l' ||
name[2] ==
'L') &&
224 (
name[3] ==
's' ||
name[3] ==
'S') &&
247static zend_constant *zend_get_constant_str_impl(
const char *
name,
size_t name_len)
254 c = zend_get_halt_offset_constant(
name, name_len);
259 return zend_get_special_const(
name, name_len);
363 ret_constant = &c->
value;
397 if (
name[0] ==
'\\') {
403 if ((colon = zend_memrchr(
name,
':', name_len)) &&
404 colon >
name && (*(colon - 1) ==
':')) {
405 int class_name_len = colon -
name - 1;
406 size_t const_name_len = name_len - class_name_len - 2;
407 zend_string *constant_name = zend_string_init(colon + 1, const_name_len, 0);
412 zend_string_efree(constant_name);
417 if ((colon = zend_memrchr(
name,
'\\', name_len)) !=
NULL) {
419 int prefix_len = colon -
name;
420 size_t const_name_len = name_len - prefix_len - 1;
421 const char *constant_name = colon + 1;
427 lcname_len = prefix_len + 1 + const_name_len;
431 lcname[prefix_len] =
'\\';
432 memcpy(
lcname + prefix_len + 1, constant_name, const_name_len + 1);
434 c = zend_hash_str_find_ptr(
EG(zend_constants),
lcname, lcname_len);
440 c = zend_get_constant_str_impl(constant_name, const_name_len);
447 c = zend_get_constant_str_impl(
name, name_len);
485 printf(
"Registering constant for module %d\n", c->module_number);
493 name = lowercase_name;
501 || zend_hash_add_constant(
EG(zend_constants),
name, c) ==
NULL
504 zend_string_release(c->
name);
506 zval_ptr_dtor_nogc(&c->
value);
510 if (lowercase_name) {
511 zend_string_release(lowercase_name);
printf(string $format, mixed ... $values)
copy(string $from, string $to, $context=null)
strrchr(string $haystack, string $needle, bool $before_needle=false)
unsigned char key[REFLECTION_KEY_LEN]
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API zend_result zend_update_class_constant(zend_class_constant *c, const zend_string *name, zend_class_entry *scope)
#define CE_CONSTANTS_TABLE(ce)
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_string * zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, bool internal)
#define ZEND_CLASS_CONST_FLAGS(c)
struct _zend_class_constant zend_class_constant
#define ZEND_ACC_DEPRECATED
#define ZEND_FETCH_CLASS_SILENT
#define IS_CONSTANT_UNQUALIFIED_IN_NAMESPACE
char * zend_visibility_string(uint32_t fn_flags)
#define ZEND_ACC_PROTECTED
ZEND_API zval * zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, uint32_t flags)
ZEND_API void zend_register_bool_constant(const char *name, size_t name_len, bool bval, int flags, int module_number)
#define IS_CONSTANT_VISITED(zv)
ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len, const char *strval, size_t strlen, int flags, int module_number)
ZEND_API zend_constant * _zend_get_special_const(const char *name, size_t len)
ZEND_API zval * zend_get_constant(zend_string *name)
ZEND_API void zend_register_string_constant(const char *name, size_t name_len, const char *strval, int flags, int module_number)
ZEND_API void zend_register_double_constant(const char *name, size_t name_len, double dval, int flags, int module_number)
#define RESET_CONSTANT_VISITED(zv)
void clean_module_constants(int module_number)
void zend_register_standard_constants(void)
ZEND_API zend_constant * zend_get_constant_ptr(zend_string *name)
ZEND_API zend_result zend_register_constant(zend_constant *c)
ZEND_API zval * zend_get_constant_str(const char *name, size_t name_len)
ZEND_API void zend_register_long_constant(const char *name, size_t name_len, zend_long lval, int flags, int module_number)
void free_zend_constant(zval *zv)
ZEND_API void zend_register_null_constant(const char *name, size_t name_len, int flags, int module_number)
#define MARK_CONSTANT_VISITED(zv)
ZEND_API bool zend_verify_const_access(zend_class_constant *c, zend_class_entry *scope)
ZEND_API zval * zend_get_class_constant_ex(zend_string *class_name, zend_string *constant_name, zend_class_entry *scope, uint32_t flags)
void zend_startup_constants(void)
#define ZEND_CONSTANT_FLAGS(c)
#define ZEND_CONSTANT_SET_FLAGS(c, _flags, _module_number)
#define ZEND_CONSTANT_DTOR
#define ZEND_CONSTANT_MODULE_NUMBER(c)
struct _zend_constant zend_constant
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_deprecated_class_constant(const zend_class_constant *c, const zend_string *constant_name)
ZEND_API zend_class_entry * zend_get_called_scope(zend_execute_data *ex)
ZEND_API const char * zend_get_executed_filename(void)
ZEND_API zend_class_entry * zend_fetch_class(zend_string *class_name, uint32_t fetch_type)
ZEND_API void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_APPLY_REMOVE
#define ZEND_HASH_APPLY_KEEP
struct _zend_string zend_string
ZEND_API bool zend_check_protected(const zend_class_entry *ce, const zend_class_entry *scope)
ZEND_API char *ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length)
ZEND_API void ZEND_FASTCALL zend_str_tolower(char *str, size_t length)
#define ALLOCA_FLAG(name)
#define do_alloca(p, use_heap)
#define free_alloca(p, use_heap)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
ZEND_API zend_new_interned_string_func_t zend_new_interned_string
#define zend_string_equals_literal(str, literal)
#define zend_string_equals_ci(s1, s2)
#define zend_string_equals_literal_ci(str, c)
struct _zend_array HashTable
#define ZSTR_HAS_CE_CACHE(s)
#define ZSTR_GET_CE_CACHE(s)
#define ZVAL_DOUBLE(z, d)
ZEND_RESULT_CODE zend_result
ZEND_API void zval_internal_ptr_dtor(zval *zval_ptr)