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.