Changeset 726 for branches/1.3/utils.c


Ignore:
Timestamp:
2011-04-09T14:59:31+02:00 (4 years ago)
Author:
moo
Message:

merge from trunk

Location:
branches/1.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/1.3

  • branches/1.3/utils.c

    r708 r726  
    2020
    2121#define OP_ZVAL_DTOR(op) do { \
    22     Z_UNSET_ISREF((op).u.constant); \
    23     zval_dtor(&(op).u.constant); \
     22    Z_UNSET_ISREF(Z_OP_CONSTANT(op)); \
     23    zval_dtor(&Z_OP_CONSTANT(op)); \
    2424} while(0)
    2525xc_compile_result_t *xc_compile_result_init(xc_compile_result_t *cr, /* {{{ */
     
    135135    zend_op *opline, *end;
    136136
     137#ifndef ZEND_ENGINE_2_4
    137138    if (!op_array->done_pass_two) {
    138139        return 0;
    139140    }
     141#endif
    140142
    141143    opline = op_array->opcodes;
     
    148150#endif
    149151            case ZEND_JMP:
    150                 opline->op1.u.opline_num = opline->op1.u.jmp_addr - op_array->opcodes;
    151                 assert(opline->op1.u.opline_num < op_array->last);
     152                Z_OP(opline->op1).opline_num = Z_OP(opline->op1).jmp_addr - op_array->opcodes;
     153                assert(Z_OP(opline->op1).opline_num < op_array->last);
    152154                break;
    153155            case ZEND_JMPZ:
     
    158160            case ZEND_JMP_SET:
    159161#endif
    160                 opline->op2.u.opline_num = opline->op2.u.jmp_addr - op_array->opcodes;
    161                 assert(opline->op2.u.opline_num < op_array->last);
     162                Z_OP(opline->op2).opline_num = Z_OP(opline->op2).jmp_addr - op_array->opcodes;
     163                assert(Z_OP(opline->op2).opline_num < op_array->last);
    162164                break;
    163165        }
     
    165167        opline++;
    166168    }
     169#ifndef ZEND_ENGINE_2_4
    167170    op_array->done_pass_two = 0;
     171#endif
    168172
    169173    return 0;
     
    174178    zend_op *opline, *end;
    175179
     180#ifndef ZEND_ENGINE_2_4
    176181    if (op_array->done_pass_two) {
    177182        return 0;
    178183    }
     184#endif
    179185
    180186    /*
     
    186192    end = opline + op_array->last;
    187193    while (opline < end) {
    188         if (opline->op1.op_type == IS_CONST) {
    189             Z_SET_ISREF(opline->op1.u.constant);
    190             Z_SET_REFCOUNT(opline->op1.u.constant, 2); /* Make sure is_ref won't be reset */
    191 
    192         }
    193         if (opline->op2.op_type == IS_CONST) {
    194             Z_SET_ISREF(opline->op2.u.constant);
    195             Z_SET_REFCOUNT(opline->op2.u.constant, 2);
     194        if (Z_OP_TYPE(opline->op1) == IS_CONST) {
     195            Z_SET_ISREF(Z_OP_CONSTANT(opline->op1));
     196            Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op1), 2); /* Make sure is_ref won't be reset */
     197
     198        }
     199        if (Z_OP_TYPE(opline->op2) == IS_CONST) {
     200            Z_SET_ISREF(Z_OP_CONSTANT(opline->op2));
     201            Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op2), 2);
    196202        }
    197203#ifdef ZEND_ENGINE_2_1
     
    201207#endif
    202208            case ZEND_JMP:
    203                 assert(opline->op1.u.opline_num < op_array->last);
    204                 opline->op1.u.jmp_addr = op_array->opcodes + opline->op1.u.opline_num;
     209                assert(Z_OP(opline->op1).opline_num < op_array->last);
     210                Z_OP(opline->op1).jmp_addr = op_array->opcodes + Z_OP(opline->op1).opline_num;
    205211                break;
    206212            case ZEND_JMPZ:
     
    211217            case ZEND_JMP_SET:
    212218#endif
    213                 assert(opline->op2.u.opline_num < op_array->last);
    214                 opline->op2.u.jmp_addr = op_array->opcodes + opline->op2.u.opline_num;
     219                assert(Z_OP(opline->op2).opline_num < op_array->last);
     220                Z_OP(opline->op2).jmp_addr = op_array->opcodes + Z_OP(opline->op2).opline_num;
    215221                break;
    216222        }
     
    220226    }
    221227
     228#ifndef ZEND_ENGINE_2_4
    222229    op_array->done_pass_two = 1;
     230#endif
    223231    return 0;
    224232}
     
    226234
    227235#ifdef HAVE_XCACHE_OPCODE_SPEC_DEF
    228 static void xc_fix_opcode_ex_znode(int tofix, xc_op_spec_t spec, znode *znode, int type TSRMLS_DC) /* {{{ */
     236static void xc_fix_opcode_ex_znode(int tofix, xc_op_spec_t spec, zend_uchar *op_type, znode_op *op, int type TSRMLS_DC) /* {{{ */
    229237{
    230238#ifdef ZEND_ENGINE_2
    231     if ((znode->op_type != IS_UNUSED && (spec == OPSPEC_UCLASS || spec == OPSPEC_CLASS)) ||
     239    if ((*op_type != IS_UNUSED && (spec == OPSPEC_UCLASS || spec == OPSPEC_CLASS)) ||
    232240            spec == OPSPEC_FETCH) {
    233241        if (tofix) {
    234             switch (znode->op_type) {
     242            switch (*op_type) {
    235243            case IS_VAR:
    236244            case IS_TMP_VAR:
     
    239247            default:
    240248                /* TODO: data lost, find a way to keep it */
    241                 /* assert(znode->op_type == IS_CONST); */
    242                 znode->op_type = IS_TMP_VAR;
     249                /* assert(*op_type == IS_CONST); */
     250                *op_type = IS_TMP_VAR;
    243251            }
    244252        }
    245253    }
    246     switch (znode->op_type) {
     254    switch (*op_type) {
    247255    case IS_TMP_VAR:
    248256    case IS_VAR:
    249257        if (tofix) {
    250             znode->u.var /= sizeof(temp_variable);
     258            Z_OP(*op).var /= sizeof(temp_variable);
    251259        }
    252260        else {
    253             znode->u.var *= sizeof(temp_variable);
     261            Z_OP(*op).var *= sizeof(temp_variable);
    254262        }
    255263    }
     
    270278            spec = xc_get_opcode_spec(opline->opcode);
    271279
    272             xc_fix_opcode_ex_znode(tofix, spec->op1, &opline->op1, 0 TSRMLS_CC);
    273             xc_fix_opcode_ex_znode(tofix, spec->op2, &opline->op2, 1 TSRMLS_CC);
    274             xc_fix_opcode_ex_znode(tofix, spec->res, &opline->result, 2 TSRMLS_CC);
     280            xc_fix_opcode_ex_znode(tofix, spec->op1, &Z_OP_TYPE(opline->op1),    &opline->op1, 0 TSRMLS_CC);
     281            xc_fix_opcode_ex_znode(tofix, spec->op2, &Z_OP_TYPE(opline->op2),    &opline->op2, 1 TSRMLS_CC);
     282            xc_fix_opcode_ex_znode(tofix, spec->res, &Z_OP_TYPE(opline->result), &opline->result, 2 TSRMLS_CC);
    275283        }
    276284    }
     
    304312#endif
    305313            case ZEND_JMP:
    306                 next = begin + opline->op1.u.opline_num;
     314                next = begin + Z_OP(opline->op1).opline_num;
    307315                break;
    308316
    309317            case ZEND_JMPZNZ:
    310                 next = begin + max(opline->op2.u.opline_num, opline->extended_value);
     318                next = begin + max(Z_OP(opline->op2).opline_num, opline->extended_value);
    311319                break;
    312320
     
    318326            case ZEND_JMP_SET:
    319327#endif
    320                 next = begin + opline->op2.u.opline_num;
     328                next = begin + Z_OP(opline->op2).opline_num;
    321329                break;
    322330
     
    371379            }
    372380
    373             parent_name = &(opline - 1)->op2.u.constant;
     381            parent_name = &(Z_OP_CONSTANT((opline - 1)->op2));
    374382            TRACE("binding with parent %s", Z_STRVAL_P(parent_name));
    375383            if (zend_lookup_class(Z_STRVAL_P(parent_name), Z_STRLEN_P(parent_name), &pce TSRMLS_CC) == FAILURE) {
     
    387395            zend_op *fetch_class_opline = opline - 1;
    388396
    389             TRACE("%s %p", Z_STRVAL(fetch_class_opline->op2.u.constant), Z_STRVAL(fetch_class_opline->op2.u.constant));
     397            TRACE("%s %p", Z_STRVAL(Z_OP_CONSTANT(fetch_class_opline->op2)), Z_STRVAL(Z_OP_CONSTANT(fetch_class_opline->op2)));
    390398            OP_ZVAL_DTOR(fetch_class_opline->op2);
    391399            fetch_class_opline->opcode = ZEND_NOP;
     
    421429    }
    422430
    423     zend_hash_del(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len);
     431    zend_hash_del(class_table, Z_OP_CONSTANT(opline->op1).value.str.val, Z_OP_CONSTANT(opline->op1).value.str.len);
    424432    OP_ZVAL_DTOR(opline->op1);
    425433    OP_ZVAL_DTOR(opline->op2);
     
    512520                ZESW(&stored_ce_ptr, NULL)
    513521                ) == FAILURE) {
    514         CG(zend_lineno) = ZESW(0, cep->line_start);
     522        CG(zend_lineno) = ZESW(0, Z_CLASS_INFO(*cep).line_start);
    515523#ifdef IS_UNICODE
    516524        zend_error(E_ERROR, "Cannot redeclare class %R", type, cep->name);
Note: See TracChangeset for help on using the changeset viewer.