Changeset 930 in svn


Ignore:
Timestamp:
2012-06-26T13:53:44Z (3 years ago)
Author:
Xuefer
Message:

fix disassembler for 2.4 literal

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/disassembler.c

    r749 r930  
    2323    int bufsize = 2;
    2424    char *buf;
     25    xc_dasm_t dasm;
    2526
    2627    xc_compile_result_init_cur(&cr, op_array TSRMLS_CC);
     
    3435    ALLOC_INIT_ZVAL(zv);
    3536    array_init(zv);
    36     xc_dasm_zend_op_array(zv, op_array TSRMLS_CC);
     37    xc_dasm_zend_op_array(&dasm, zv, op_array TSRMLS_CC);
    3738    add_assoc_zval_ex(dst, ZEND_STRS("op_array"), zv);
    3839
     
    4748        ALLOC_INIT_ZVAL(zv);
    4849        array_init(zv);
    49         xc_dasm_zend_function(zv, b->pData TSRMLS_CC);
     50        xc_dasm_zend_function(&dasm, zv, b->pData TSRMLS_CC);
    5051
    5152        keysize = BUCKET_KEY_SIZE(b) + 2;
     
    8485        ALLOC_INIT_ZVAL(zv);
    8586        array_init(zv);
    86         xc_dasm_zend_class_entry(zv, CestToCePtr(*(xc_cest_t *)b->pData) TSRMLS_CC);
     87        xc_dasm_zend_class_entry(&dasm, zv, CestToCePtr(*(xc_cest_t *)b->pData) TSRMLS_CC);
    8788
    8889        keysize = BUCKET_KEY_SIZE(b) + 2;
  • trunk/processor/hashtable.m4

    r844 r930  
    3737                ALLOC_INIT_ZVAL(zv);
    3838                array_init(zv);
    39                 FUNC_NAME (zv, (($2*)b->pData) TSRMLS_CC);
     39                FUNC_NAME (dasm, zv, (($2*)b->pData) TSRMLS_CC);
    4040                keysize = BUCKET_KEY_SIZE(b) + 2;
    4141                if (keysize > bufsize) {
  • trunk/processor/head.m4

    r917 r930  
    107107};
    108108/* }}} */
     109/* export: typedef struct _xc_dasm_t { const zend_op_array *active_op_array_src; } xc_dasm_t; :export {{{ */
     110/* }}} */
    109111/* {{{ memsetptr */
    110112IFAUTOCHECK(`dnl
  • trunk/processor/processor.m4

    r917 r930  
    161161    IFDASM(`
    162162        pushdefFUNC_NAME(`zval')
    163         FUNC_NAME (dst, src[0] TSRMLS_CC);
     163        FUNC_NAME (dasm, dst, src[0] TSRMLS_CC);
    164164        popdef(`FUNC_NAME')
    165165    ', `
     
    321321    IFDASM(`
    322322        pushdefFUNC_NAME(`zend_trait_alias')
    323         FUNC_NAME (dst, src[0] TSRMLS_CC);
     323        FUNC_NAME (dasm, dst, src[0] TSRMLS_CC);
    324324        popdef(`FUNC_NAME')
    325325    ', `
     
    334334    IFDASM(`
    335335        pushdefFUNC_NAME(`zend_trait_precedence')
    336         FUNC_NAME (dst, src[0] TSRMLS_CC);
     336        FUNC_NAME (dasm, dst, src[0] TSRMLS_CC);
    337337        popdef(`FUNC_NAME')
    338338    ', `
     
    523523                    zval *zv;
    524524                    ALLOC_INIT_ZVAL(zv);
    525                     *zv = src->$1.literal->constant;
     525                    *zv = dasm->active_op_array_src->literals[src->$1.constant].constant;
    526526                    zval_copy_ctor(zv);
    527527                    add_assoc_zval_ex(dst, ZEND_STRS("$1.constant"), zv);
     
    695695        processor->active_op_array_src = src;
    696696    ')
     697    IFDASM(`
     698        dasm->active_op_array_src = src;
     699    ')
    697700    {
    698701    IFRESTORE(`
     
    737740                pushdef(`UNION_znode_op_literal', `
    738741                    if (opline->$1_type == IS_CONST) {
    739                         opline->$1.constant = opline->$1.literal - src->literals;
    740                         opline->$1.literal = &dst->literals[opline->$1.constant];
     742                        opline->$1.literal = &dst->literals[opline->$1.literal - src->literals];
    741743                    }
    742744                ')
     
    751753#endif
    752754                    case ZEND_JMP:
    753                         Z_OP(opline->op1).jmp_addr = dst->opcodes + (Z_OP(opline->op1).jmp_addr - src->opcodes);
     755                        Z_OP(opline->op1).jmp_addr = &dst->opcodes[Z_OP(opline->op1).jmp_addr - src->opcodes];
    754756                        break;
    755757
     
    764766            case ZEND_JMP_SET_VAR:
    765767#endif
    766                         Z_OP(opline->op2).jmp_addr = dst->opcodes + (Z_OP(opline->op2).jmp_addr - src->opcodes);
     768                        Z_OP(opline->op2).jmp_addr = &dst->opcodes[Z_OP(opline->op2).jmp_addr - src->opcodes];
    767769                        break;
    768770
     
    971973        processor->active_op_array_src = NULL;
    972974    ')
     975    IFDASM(`
     976        dasm->active_op_array_src = NULL;
     977    ')
    973978')
    974979dnl }}}
  • trunk/processor/struct.m4

    r917 r930  
    1212        IFSTORE(  `xc_processor_t *processor, $1 *dst, const $1 * const src')
    1313        IFRESTORE(`xc_processor_t *processor, $1 *dst, const $1 * const src')
    14         IFDASM(   `zval *dst, const $1 * const src')
     14        IFDASM(   `xc_dasm_t *dasm, zval *dst, const $1 * const src')
    1515        IFASM(    `$1 *dst, const $1 * const src')
    1616        TSRMLS_DC
     
    137137        IFSTORE(  `processor, $6 $2, $6 $3')
    138138        IFRESTORE(`processor, $6 $2, $6 $3')
    139         IFDASM(   `zv, $6 $3')
     139        IFDASM(   `dasm, zv, $6 $3')
    140140        IFASM(    `$6 $2, $6 $3')
    141141        TSRMLS_CC
     
    192192                ALLOC_INIT_ZVAL(zv);
    193193                array_init(zv);
    194                 FUNC_NAME (zv, &(SRC(`$4[LOOPCOUNTER]')) TSRMLS_CC);
     194                FUNC_NAME (dasm, zv, &(SRC(`$4[LOOPCOUNTER]')) TSRMLS_CC);
    195195                add_next_index_zval(arr, zv);
    196196            }
  • trunk/utils.c

    r917 r930  
    240240    end = opline + op_array->last;
    241241    while (opline < end) {
    242 #ifndef ZEND_ENGINE_2_4
     242#ifdef ZEND_ENGINE_2_4
     243        if (opline->op1_type == IS_CONST) {
     244            opline->op1.literal = op_array->literals + opline->op1.constant;
     245        }
     246        if (opline->op2_type == IS_CONST) {
     247            opline->op2.literal = op_array->literals + opline->op2.constant;
     248        }
     249#else
    243250        if (Z_OP_TYPE(opline->op1) == IS_CONST) {
    244251            Z_SET_ISREF(Z_OP_CONSTANT(opline->op1));
Note: See TracChangeset for help on using the changeset viewer.