Changeset 930


Ignore:
Timestamp:
2012-06-26T15:53:44+02:00 (3 years ago)
Author:
moo
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.