Browse Source

Zend: Convert _zend_op_array literal fields to uint32_t

pull/18362/merge
Gina Peter Banyard 2 months ago
parent
commit
c515c04b0a
  1. 13
      Zend/Optimizer/compact_literals.c
  2. 6
      Zend/Optimizer/zend_optimizer.c
  3. 2
      Zend/Optimizer/zend_optimizer_internal.h
  4. 2
      Zend/zend_compile.c
  5. 4
      Zend/zend_compile.h
  6. 2
      sapi/phpdbg/phpdbg_info.c

13
Zend/Optimizer/compact_literals.c

@ -110,7 +110,7 @@ static zend_string *create_str_cache_key(zval *literal, uint8_t num_related)
void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx *ctx)
{
zend_op *opline, *end;
int i, j, n, *map;
int n, *map;
uint32_t cache_size;
zval zv, *pos;
literal_info *info;
@ -124,6 +124,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
int *const_slot, *class_slot, *func_slot, *bind_var_slot, *property_slot, *method_slot, *jmp_slot;
if (op_array->last_literal) {
uint32_t j;
info = (literal_info*)zend_arena_calloc(&ctx->arena, op_array->last_literal, sizeof(literal_info));
/* Mark literals of specific types */
@ -258,9 +259,9 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
op_array->function_name ? op_array->function_name->val : "main");
fprintf(stderr, "Literals table size %d\n", op_array->last_literal);
for (int i = 0; i < op_array->last_literal; i++) {
for (uint32_t i = 0; i < op_array->last_literal; i++) {
zend_string *str = zval_get_string(op_array->literals + i);
fprintf(stderr, "Literal %d, val (%zu):%s\n", i, ZSTR_LEN(str), ZSTR_VAL(str));
fprintf(stderr, "Literal %" PRIu32 ", val (%zu):%s\n", i, ZSTR_LEN(str), ZSTR_VAL(str));
zend_string_release(str);
}
fflush(stderr);
@ -272,7 +273,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
zend_hash_init(&hash, op_array->last_literal, NULL, NULL, 0);
map = (int*)zend_arena_alloc(&ctx->arena, op_array->last_literal * sizeof(int));
memset(map, 0, op_array->last_literal * sizeof(int));
for (i = 0; i < op_array->last_literal; i++) {
for (uint32_t i = 0; i < op_array->last_literal; i++) {
if (!info[i].num_related) {
/* unset literal */
zval_ptr_dtor_nogc(&op_array->literals[i]);
@ -770,9 +771,9 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
{
fprintf(stderr, "Optimized literals table size %d\n", op_array->last_literal);
for (int i = 0; i < op_array->last_literal; i++) {
for (uint32_t i = 0; i < op_array->last_literal; i++) {
zend_string *str = zval_get_string(op_array->literals + i);
fprintf(stderr, "Literal %d, val (%zu):%s\n", i, ZSTR_LEN(str), ZSTR_VAL(str));
fprintf(stderr, "Literal %" PRIu32 ", val (%zu):%s\n", i, ZSTR_LEN(str), ZSTR_VAL(str));
zend_string_release(str);
}
fflush(stderr);

6
Zend/Optimizer/zend_optimizer.c

@ -210,9 +210,9 @@ void zend_optimizer_convert_to_free_op1(zend_op_array *op_array, zend_op *opline
}
}
int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv)
uint32_t zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv)
{
int i = op_array->last_literal;
uint32_t i = op_array->last_literal;
op_array->last_literal++;
op_array->literals = (zval*)erealloc(op_array->literals, op_array->last_literal * sizeof(zval));
ZVAL_COPY_VALUE(&op_array->literals[i], zv);
@ -220,7 +220,7 @@ int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv)
return i;
}
static inline int zend_optimizer_add_literal_string(zend_op_array *op_array, zend_string *str) {
static inline uint32_t zend_optimizer_add_literal_string(zend_op_array *op_array, zend_string *str) {
zval zv;
ZVAL_STR(&zv, str);
zend_string_hash_val(str);

2
Zend/Optimizer/zend_optimizer_internal.h

@ -79,7 +79,7 @@ static inline bool zend_optimizer_is_loop_var_free(const zend_op *opline) {
}
void zend_optimizer_convert_to_free_op1(zend_op_array *op_array, zend_op *opline);
int zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv);
uint32_t zend_optimizer_add_literal(zend_op_array *op_array, const zval *zv);
bool zend_optimizer_get_persistent_constant(zend_string *name, zval *result, int copy);
void zend_optimizer_collect_constant(zend_optimizer_ctx *ctx, zval *name, zval* value);
bool zend_optimizer_get_collected_constant(HashTable *constants, zval *name, zval* value);

2
Zend/zend_compile.c

@ -588,7 +588,7 @@ static inline void zend_insert_literal(zend_op_array *op_array, zval *zv, int li
static int zend_add_literal(zval *zv) /* {{{ */
{
zend_op_array *op_array = CG(active_op_array);
int i = op_array->last_literal;
uint32_t i = op_array->last_literal;
op_array->last_literal++;
if (i >= CG(context).literals_size) {
while (i >= CG(context).literals_size) {

4
Zend/zend_compile.h

@ -198,7 +198,7 @@ typedef struct _zend_oparray_context {
zend_op_array *op_array;
uint32_t opcodes_size;
uint32_t vars_size;
int literals_size;
uint32_t literals_size;
uint32_t fast_call_var;
uint32_t try_catch_offset;
int current_brk_cont;
@ -550,7 +550,7 @@ struct _zend_op_array {
uint32_t line_start;
uint32_t line_end;
int last_literal;
uint32_t last_literal;
uint32_t num_dynamic_func_defs;
zval *literals;

2
sapi/phpdbg/phpdbg_info.c

@ -307,7 +307,7 @@ PHPDBG_INFO(literal) /* {{{ */
bool in_executor = PHPDBG_G(in_execution) && EG(current_execute_data) && EG(current_execute_data)->func;
if (in_executor || PHPDBG_G(ops)) {
zend_op_array *ops = in_executor ? &EG(current_execute_data)->func->op_array : PHPDBG_G(ops);
int literal = 0, count = ops->last_literal - 1;
uint32_t literal = 0, count = ops->last_literal - 1;
if (ops->function_name) {
if (ops->scope) {

Loading…
Cancel
Save