Annotation of embedaddon/php/Zend/zend_vm_execute.h, revision 1.1.1.5

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | Zend Engine                                                          |
                      4:    +----------------------------------------------------------------------+
1.1.1.5 ! misho       5:    | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) |
1.1       misho       6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 2.00 of the Zend license,     |
                      8:    | that is bundled with this package in the file LICENSE, and is        |
                      9:    | available through the world-wide-web at the following url:           |
                     10:    | http://www.zend.com/license/2_00.txt.                                |
                     11:    | If you did not receive a copy of the Zend license and are unable to  |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@zend.com so we can mail you a copy immediately.              |
                     14:    +----------------------------------------------------------------------+
                     15:    | Authors: Andi Gutmans <andi@zend.com>                                |
                     16:    |          Zeev Suraski <zeev@zend.com>                                |
                     17:    |          Dmitry Stogov <dmitry@zend.com>                             |
                     18:    +----------------------------------------------------------------------+
                     19: */
                     20: 
                     21: #ifdef ZEND_WIN32
                     22: # pragma warning(once : 4101)
                     23: #endif
1.1.1.2   misho      24: static user_opcode_handler_t zend_user_opcode_handlers[256] = {
                     25:        (user_opcode_handler_t)NULL,
                     26:        (user_opcode_handler_t)NULL,
                     27:        (user_opcode_handler_t)NULL,
                     28:        (user_opcode_handler_t)NULL,
                     29:        (user_opcode_handler_t)NULL,
                     30:        (user_opcode_handler_t)NULL,
                     31:        (user_opcode_handler_t)NULL,
                     32:        (user_opcode_handler_t)NULL,
                     33:        (user_opcode_handler_t)NULL,
                     34:        (user_opcode_handler_t)NULL,
                     35:        (user_opcode_handler_t)NULL,
                     36:        (user_opcode_handler_t)NULL,
                     37:        (user_opcode_handler_t)NULL,
                     38:        (user_opcode_handler_t)NULL,
                     39:        (user_opcode_handler_t)NULL,
                     40:        (user_opcode_handler_t)NULL,
                     41:        (user_opcode_handler_t)NULL,
                     42:        (user_opcode_handler_t)NULL,
                     43:        (user_opcode_handler_t)NULL,
                     44:        (user_opcode_handler_t)NULL,
                     45:        (user_opcode_handler_t)NULL,
                     46:        (user_opcode_handler_t)NULL,
                     47:        (user_opcode_handler_t)NULL,
                     48:        (user_opcode_handler_t)NULL,
                     49:        (user_opcode_handler_t)NULL,
                     50:        (user_opcode_handler_t)NULL,
                     51:        (user_opcode_handler_t)NULL,
                     52:        (user_opcode_handler_t)NULL,
                     53:        (user_opcode_handler_t)NULL,
                     54:        (user_opcode_handler_t)NULL,
                     55:        (user_opcode_handler_t)NULL,
                     56:        (user_opcode_handler_t)NULL,
                     57:        (user_opcode_handler_t)NULL,
                     58:        (user_opcode_handler_t)NULL,
                     59:        (user_opcode_handler_t)NULL,
                     60:        (user_opcode_handler_t)NULL,
                     61:        (user_opcode_handler_t)NULL,
                     62:        (user_opcode_handler_t)NULL,
                     63:        (user_opcode_handler_t)NULL,
                     64:        (user_opcode_handler_t)NULL,
                     65:        (user_opcode_handler_t)NULL,
                     66:        (user_opcode_handler_t)NULL,
                     67:        (user_opcode_handler_t)NULL,
                     68:        (user_opcode_handler_t)NULL,
                     69:        (user_opcode_handler_t)NULL,
                     70:        (user_opcode_handler_t)NULL,
                     71:        (user_opcode_handler_t)NULL,
                     72:        (user_opcode_handler_t)NULL,
                     73:        (user_opcode_handler_t)NULL,
                     74:        (user_opcode_handler_t)NULL,
                     75:        (user_opcode_handler_t)NULL,
                     76:        (user_opcode_handler_t)NULL,
                     77:        (user_opcode_handler_t)NULL,
                     78:        (user_opcode_handler_t)NULL,
                     79:        (user_opcode_handler_t)NULL,
                     80:        (user_opcode_handler_t)NULL,
                     81:        (user_opcode_handler_t)NULL,
                     82:        (user_opcode_handler_t)NULL,
                     83:        (user_opcode_handler_t)NULL,
                     84:        (user_opcode_handler_t)NULL,
                     85:        (user_opcode_handler_t)NULL,
                     86:        (user_opcode_handler_t)NULL,
                     87:        (user_opcode_handler_t)NULL,
                     88:        (user_opcode_handler_t)NULL,
                     89:        (user_opcode_handler_t)NULL,
                     90:        (user_opcode_handler_t)NULL,
                     91:        (user_opcode_handler_t)NULL,
                     92:        (user_opcode_handler_t)NULL,
                     93:        (user_opcode_handler_t)NULL,
                     94:        (user_opcode_handler_t)NULL,
                     95:        (user_opcode_handler_t)NULL,
                     96:        (user_opcode_handler_t)NULL,
                     97:        (user_opcode_handler_t)NULL,
                     98:        (user_opcode_handler_t)NULL,
                     99:        (user_opcode_handler_t)NULL,
                    100:        (user_opcode_handler_t)NULL,
                    101:        (user_opcode_handler_t)NULL,
                    102:        (user_opcode_handler_t)NULL,
                    103:        (user_opcode_handler_t)NULL,
                    104:        (user_opcode_handler_t)NULL,
                    105:        (user_opcode_handler_t)NULL,
                    106:        (user_opcode_handler_t)NULL,
                    107:        (user_opcode_handler_t)NULL,
                    108:        (user_opcode_handler_t)NULL,
                    109:        (user_opcode_handler_t)NULL,
                    110:        (user_opcode_handler_t)NULL,
                    111:        (user_opcode_handler_t)NULL,
                    112:        (user_opcode_handler_t)NULL,
                    113:        (user_opcode_handler_t)NULL,
                    114:        (user_opcode_handler_t)NULL,
                    115:        (user_opcode_handler_t)NULL,
                    116:        (user_opcode_handler_t)NULL,
                    117:        (user_opcode_handler_t)NULL,
                    118:        (user_opcode_handler_t)NULL,
                    119:        (user_opcode_handler_t)NULL,
                    120:        (user_opcode_handler_t)NULL,
                    121:        (user_opcode_handler_t)NULL,
                    122:        (user_opcode_handler_t)NULL,
                    123:        (user_opcode_handler_t)NULL,
                    124:        (user_opcode_handler_t)NULL,
                    125:        (user_opcode_handler_t)NULL,
                    126:        (user_opcode_handler_t)NULL,
                    127:        (user_opcode_handler_t)NULL,
                    128:        (user_opcode_handler_t)NULL,
                    129:        (user_opcode_handler_t)NULL,
                    130:        (user_opcode_handler_t)NULL,
                    131:        (user_opcode_handler_t)NULL,
                    132:        (user_opcode_handler_t)NULL,
                    133:        (user_opcode_handler_t)NULL,
                    134:        (user_opcode_handler_t)NULL,
                    135:        (user_opcode_handler_t)NULL,
                    136:        (user_opcode_handler_t)NULL,
                    137:        (user_opcode_handler_t)NULL,
                    138:        (user_opcode_handler_t)NULL,
                    139:        (user_opcode_handler_t)NULL,
                    140:        (user_opcode_handler_t)NULL,
                    141:        (user_opcode_handler_t)NULL,
                    142:        (user_opcode_handler_t)NULL,
                    143:        (user_opcode_handler_t)NULL,
                    144:        (user_opcode_handler_t)NULL,
                    145:        (user_opcode_handler_t)NULL,
                    146:        (user_opcode_handler_t)NULL,
                    147:        (user_opcode_handler_t)NULL,
                    148:        (user_opcode_handler_t)NULL,
                    149:        (user_opcode_handler_t)NULL,
                    150:        (user_opcode_handler_t)NULL,
                    151:        (user_opcode_handler_t)NULL,
                    152:        (user_opcode_handler_t)NULL,
                    153:        (user_opcode_handler_t)NULL,
                    154:        (user_opcode_handler_t)NULL,
                    155:        (user_opcode_handler_t)NULL,
                    156:        (user_opcode_handler_t)NULL,
                    157:        (user_opcode_handler_t)NULL,
                    158:        (user_opcode_handler_t)NULL,
                    159:        (user_opcode_handler_t)NULL,
                    160:        (user_opcode_handler_t)NULL,
                    161:        (user_opcode_handler_t)NULL,
                    162:        (user_opcode_handler_t)NULL,
                    163:        (user_opcode_handler_t)NULL,
                    164:        (user_opcode_handler_t)NULL,
                    165:        (user_opcode_handler_t)NULL,
                    166:        (user_opcode_handler_t)NULL,
                    167:        (user_opcode_handler_t)NULL,
                    168:        (user_opcode_handler_t)NULL,
                    169:        (user_opcode_handler_t)NULL,
                    170:        (user_opcode_handler_t)NULL,
                    171:        (user_opcode_handler_t)NULL,
                    172:        (user_opcode_handler_t)NULL,
                    173:        (user_opcode_handler_t)NULL,
                    174:        (user_opcode_handler_t)NULL,
                    175:        (user_opcode_handler_t)NULL,
                    176:        (user_opcode_handler_t)NULL,
                    177:        (user_opcode_handler_t)NULL,
                    178:        (user_opcode_handler_t)NULL,
                    179:        (user_opcode_handler_t)NULL,
                    180:        (user_opcode_handler_t)NULL,
                    181:        (user_opcode_handler_t)NULL,
                    182:        (user_opcode_handler_t)NULL,
                    183:        (user_opcode_handler_t)NULL,
                    184:        (user_opcode_handler_t)NULL,
                    185:        (user_opcode_handler_t)NULL,
                    186:        (user_opcode_handler_t)NULL,
                    187:        (user_opcode_handler_t)NULL,
                    188:        (user_opcode_handler_t)NULL,
                    189:        (user_opcode_handler_t)NULL,
                    190:        (user_opcode_handler_t)NULL,
                    191:        (user_opcode_handler_t)NULL,
                    192:        (user_opcode_handler_t)NULL,
                    193:        (user_opcode_handler_t)NULL,
                    194:        (user_opcode_handler_t)NULL,
                    195:        (user_opcode_handler_t)NULL,
                    196:        (user_opcode_handler_t)NULL,
                    197:        (user_opcode_handler_t)NULL,
                    198:        (user_opcode_handler_t)NULL,
                    199:        (user_opcode_handler_t)NULL,
                    200:        (user_opcode_handler_t)NULL,
                    201:        (user_opcode_handler_t)NULL,
                    202:        (user_opcode_handler_t)NULL,
                    203:        (user_opcode_handler_t)NULL,
                    204:        (user_opcode_handler_t)NULL,
                    205:        (user_opcode_handler_t)NULL,
                    206:        (user_opcode_handler_t)NULL,
                    207:        (user_opcode_handler_t)NULL,
                    208:        (user_opcode_handler_t)NULL,
                    209:        (user_opcode_handler_t)NULL,
                    210:        (user_opcode_handler_t)NULL,
                    211:        (user_opcode_handler_t)NULL,
                    212:        (user_opcode_handler_t)NULL,
                    213:        (user_opcode_handler_t)NULL,
                    214:        (user_opcode_handler_t)NULL,
                    215:        (user_opcode_handler_t)NULL,
                    216:        (user_opcode_handler_t)NULL,
                    217:        (user_opcode_handler_t)NULL,
                    218:        (user_opcode_handler_t)NULL,
                    219:        (user_opcode_handler_t)NULL,
                    220:        (user_opcode_handler_t)NULL,
                    221:        (user_opcode_handler_t)NULL,
                    222:        (user_opcode_handler_t)NULL,
                    223:        (user_opcode_handler_t)NULL,
                    224:        (user_opcode_handler_t)NULL,
                    225:        (user_opcode_handler_t)NULL,
                    226:        (user_opcode_handler_t)NULL,
                    227:        (user_opcode_handler_t)NULL,
                    228:        (user_opcode_handler_t)NULL,
                    229:        (user_opcode_handler_t)NULL,
                    230:        (user_opcode_handler_t)NULL,
                    231:        (user_opcode_handler_t)NULL,
                    232:        (user_opcode_handler_t)NULL,
                    233:        (user_opcode_handler_t)NULL,
                    234:        (user_opcode_handler_t)NULL,
                    235:        (user_opcode_handler_t)NULL,
                    236:        (user_opcode_handler_t)NULL,
                    237:        (user_opcode_handler_t)NULL,
                    238:        (user_opcode_handler_t)NULL,
                    239:        (user_opcode_handler_t)NULL,
                    240:        (user_opcode_handler_t)NULL,
                    241:        (user_opcode_handler_t)NULL,
                    242:        (user_opcode_handler_t)NULL,
                    243:        (user_opcode_handler_t)NULL,
                    244:        (user_opcode_handler_t)NULL,
                    245:        (user_opcode_handler_t)NULL,
                    246:        (user_opcode_handler_t)NULL,
                    247:        (user_opcode_handler_t)NULL,
                    248:        (user_opcode_handler_t)NULL,
                    249:        (user_opcode_handler_t)NULL,
                    250:        (user_opcode_handler_t)NULL,
                    251:        (user_opcode_handler_t)NULL,
                    252:        (user_opcode_handler_t)NULL,
                    253:        (user_opcode_handler_t)NULL,
                    254:        (user_opcode_handler_t)NULL,
                    255:        (user_opcode_handler_t)NULL,
                    256:        (user_opcode_handler_t)NULL,
                    257:        (user_opcode_handler_t)NULL,
                    258:        (user_opcode_handler_t)NULL,
                    259:        (user_opcode_handler_t)NULL,
                    260:        (user_opcode_handler_t)NULL,
                    261:        (user_opcode_handler_t)NULL,
                    262:        (user_opcode_handler_t)NULL,
                    263:        (user_opcode_handler_t)NULL,
                    264:        (user_opcode_handler_t)NULL,
                    265:        (user_opcode_handler_t)NULL,
                    266:        (user_opcode_handler_t)NULL,
                    267:        (user_opcode_handler_t)NULL,
                    268:        (user_opcode_handler_t)NULL,
                    269:        (user_opcode_handler_t)NULL,
                    270:        (user_opcode_handler_t)NULL,
                    271:        (user_opcode_handler_t)NULL,
                    272:        (user_opcode_handler_t)NULL,
                    273:        (user_opcode_handler_t)NULL,
                    274:        (user_opcode_handler_t)NULL,
                    275:        (user_opcode_handler_t)NULL,
                    276:        (user_opcode_handler_t)NULL,
                    277:        (user_opcode_handler_t)NULL,
                    278:        (user_opcode_handler_t)NULL,
                    279:        (user_opcode_handler_t)NULL,
                    280:        (user_opcode_handler_t)NULL
                    281: };
                    282: 
                    283: static zend_uchar zend_user_opcodes[256] = {0,
                    284:        1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
                    285:        17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
                    286:        33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
                    287:        49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
                    288:        65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
                    289:        81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
                    290:        97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
                    291:        113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
                    292:        129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
                    293:        145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
                    294:        161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
                    295:        177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
                    296:        193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
                    297:        209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
                    298:        225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
                    299:        241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
                    300: };
1.1       misho     301: 
                    302: static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op);
                    303: 
                    304: 
1.1.1.2   misho     305: #undef OPLINE
                    306: #undef DCL_OPLINE
                    307: #undef USE_OPLINE
                    308: #undef LOAD_OPLINE
                    309: #undef SAVE_OPLINE
                    310: #define OPLINE EX(opline)
                    311: #define DCL_OPLINE
                    312: #define USE_OPLINE zend_op *opline = EX(opline);
                    313: #define LOAD_OPLINE()
                    314: #define SAVE_OPLINE()
                    315: #undef CHECK_EXCEPTION
                    316: #undef HANDLE_EXCEPTION
                    317: #undef HANDLE_EXCEPTION_LEAVE
                    318: #define CHECK_EXCEPTION() LOAD_OPLINE()
                    319: #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
                    320: #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
                    321: #define LOAD_REGS()
                    322: #define ZEND_VM_CONTINUE()         return 0
                    323: #define ZEND_VM_RETURN()           return 1
                    324: #define ZEND_VM_ENTER()            return 2
                    325: #define ZEND_VM_LEAVE()            return 3
1.1       misho     326: #define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                    327: 
                    328: #define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC
                    329: #undef EX
                    330: #define EX(element) execute_data->element
                    331: 
1.1.1.2   misho     332: #undef EX_CV
                    333: #define EX_CV(var) EX(CVs)[var]
                    334: #undef EX_CVs
                    335: #define EX_CVs() EX(CVs)
                    336: #undef EX_T
                    337: #define EX_T(offset) (*(temp_variable *)((char *) EX(Ts) + offset))
                    338: #undef EX_Ts
                    339: #define EX_Ts() EX(Ts)
                    340: 
1.1       misho     341: 
                    342: ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)
                    343: {
1.1.1.2   misho     344:        DCL_OPLINE
1.1       misho     345:        zend_execute_data *execute_data;
                    346:        zend_bool nested = 0;
                    347:        zend_bool original_in_execution = EG(in_execution);
                    348: 
                    349: 
                    350:        if (EG(exception)) {
                    351:                return;
                    352:        }
                    353: 
                    354:        EG(in_execution) = 1;
                    355: 
                    356: zend_vm_enter:
                    357:        /* Initialize execute_data */
                    358:        execute_data = (zend_execute_data *)zend_vm_stack_alloc(
                    359:                ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)) +
                    360:                ZEND_MM_ALIGNED_SIZE(sizeof(zval**) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2)) +
                    361:                ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T TSRMLS_CC);
                    362: 
                    363:        EX(CVs) = (zval***)((char*)execute_data + ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)));
                    364:        memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);
                    365:        EX(Ts) = (temp_variable *)(((char*)EX(CVs)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval**) * op_array->last_var * (EG(active_symbol_table) ? 1 : 2)));
                    366:        EX(fbc) = NULL;
                    367:        EX(called_scope) = NULL;
                    368:        EX(object) = NULL;
                    369:        EX(old_error_reporting) = NULL;
                    370:        EX(op_array) = op_array;
                    371:        EX(symbol_table) = EG(active_symbol_table);
                    372:        EX(prev_execute_data) = EG(current_execute_data);
                    373:        EG(current_execute_data) = execute_data;
                    374:        EX(nested) = nested;
                    375:        nested = 1;
                    376: 
1.1.1.2   misho     377:        LOAD_REGS();
                    378: 
                    379:        if (!op_array->run_time_cache && op_array->last_cache_slot) {
                    380:                op_array->run_time_cache = ecalloc(op_array->last_cache_slot, sizeof(void*));
1.1       misho     381:        }
                    382: 
                    383:        if (op_array->this_var != -1 && EG(This)) {
                    384:                Z_ADDREF_P(EG(This)); /* For $this pointer */
                    385:                if (!EG(active_symbol_table)) {
1.1.1.2   misho     386:                        EX_CV(op_array->this_var) = (zval**)EX_CVs() + (op_array->last_var + op_array->this_var);
                    387:                        *EX_CV(op_array->this_var) = EG(This);
1.1       misho     388:                } else {
1.1.1.2   misho     389:                        if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), (void**)&EX_CV(op_array->this_var))==FAILURE) {
1.1       misho     390:                                Z_DELREF_P(EG(This));
                    391:                        }
                    392:                }
                    393:        }
                    394: 
1.1.1.2   misho     395:        EX(opline) = UNEXPECTED((op_array->fn_flags & ZEND_ACC_INTERACTIVE) != 0) && EG(start_op) ? EG(start_op) : op_array->opcodes;
1.1       misho     396:        EG(opline_ptr) = &EX(opline);
1.1.1.2   misho     397:        LOAD_OPLINE();
1.1       misho     398: 
                    399:        EX(function_state).function = (zend_function *) op_array;
                    400:        EX(function_state).arguments = NULL;
1.1.1.2   misho     401: 
1.1       misho     402:        while (1) {
                    403:        int ret;
                    404: #ifdef ZEND_WIN32
                    405:                if (EG(timed_out)) {
                    406:                        zend_timeout(0);
                    407:                }
                    408: #endif
                    409: 
1.1.1.2   misho     410:                if ((ret = OPLINE->handler(execute_data TSRMLS_CC)) > 0) {
1.1       misho     411:                        switch (ret) {
                    412:                                case 1:
                    413:                                        EG(in_execution) = original_in_execution;
                    414:                                        return;
                    415:                                case 2:
                    416:                                        op_array = EG(active_op_array);
                    417:                                        goto zend_vm_enter;
                    418:                                case 3:
                    419:                                        execute_data = EG(current_execute_data);
                    420:                                default:
                    421:                                        break;
                    422:                        }
                    423:                }
                    424: 
                    425:        }
                    426:        zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");
                    427: }
                    428: 
                    429: static int ZEND_FASTCALL  ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    430: {
1.1.1.2   misho     431:        USE_OPLINE
                    432: 
1.1       misho     433: #if DEBUG_ZEND>=2
1.1.1.2   misho     434:        printf("Jumping to %d\n", opline->op1.opline_num);
1.1       misho     435: #endif
1.1.1.2   misho     436:        ZEND_VM_SET_OPCODE(opline->op1.jmp_addr);
1.1       misho     437:        ZEND_VM_CONTINUE(); /* CHECK_ME */
                    438: }
                    439: 
                    440: static int ZEND_FASTCALL  ZEND_INIT_STRING_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    441: {
1.1.1.2   misho     442:        USE_OPLINE
                    443:        zval *tmp = &EX_T(opline->result.var).tmp_var;
1.1       misho     444: 
1.1.1.2   misho     445:        SAVE_OPLINE();
1.1       misho     446:        tmp->value.str.val = emalloc(1);
                    447:        tmp->value.str.val[0] = 0;
                    448:        tmp->value.str.len = 0;
                    449:        Z_SET_REFCOUNT_P(tmp, 1);
                    450:        tmp->type = IS_STRING;
                    451:        Z_UNSET_ISREF_P(tmp);
1.1.1.2   misho     452:        /*CHECK_EXCEPTION();*/
1.1       misho     453:        ZEND_VM_NEXT_OPCODE();
                    454: }
                    455: 
                    456: static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                    457: {
                    458:        zend_bool nested;
                    459:        zend_op_array *op_array = EX(op_array);
                    460: 
                    461:        EG(current_execute_data) = EX(prev_execute_data);
                    462:        EG(opline_ptr) = NULL;
                    463:        if (!EG(active_symbol_table)) {
1.1.1.2   misho     464:                zval ***cv = EX_CVs();
                    465:                zval ***end = cv + op_array->last_var;
1.1       misho     466:                while (cv != end) {
                    467:                        if (*cv) {
                    468:                                zval_ptr_dtor(*cv);
                    469:                        }
                    470:                        cv++;
                    471:                }
                    472:        }
                    473: 
                    474:        if ((op_array->fn_flags & ZEND_ACC_CLOSURE) && op_array->prototype) {
                    475:                zval_ptr_dtor((zval**)&op_array->prototype);
                    476:        }
                    477: 
                    478:        nested = EX(nested);
                    479: 
                    480:        zend_vm_stack_free(execute_data TSRMLS_CC);
                    481: 
                    482:        if (nested) {
                    483:                execute_data = EG(current_execute_data);
1.1.1.2   misho     484:        }
                    485:        if (nested) {
                    486:                USE_OPLINE
1.1       misho     487: 
1.1.1.2   misho     488:                LOAD_REGS();
                    489:                LOAD_OPLINE();
                    490:                if (UNEXPECTED(opline->opcode == ZEND_INCLUDE_OR_EVAL)) {
1.1       misho     491: 
                    492:                        EX(function_state).function = (zend_function *) EX(op_array);
                    493:                        EX(function_state).arguments = NULL;
                    494:                        EX(object) = EX(current_object);
                    495: 
                    496:                        EG(opline_ptr) = &EX(opline);
                    497:                        EG(active_op_array) = EX(op_array);
                    498:                        EG(return_value_ptr_ptr) = EX(original_return_value);
                    499:                        destroy_op_array(op_array TSRMLS_CC);
                    500:                        efree(op_array);
1.1.1.2   misho     501:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho     502:                                zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho     503:                                HANDLE_EXCEPTION_LEAVE();
                    504:                        } else if (RETURN_VALUE_USED(opline)) {
                    505:                                if (!EX_T(opline->result.var).var.ptr) { /* there was no return statement */
                    506:                                        zval *retval;
                    507: 
                    508:                                        ALLOC_ZVAL(retval);
                    509:                                        ZVAL_BOOL(retval, 1);
                    510:                                        INIT_PZVAL(retval);
                    511:                                        EX_T(opline->result.var).var.ptr = retval;
                    512:                                }
1.1       misho     513:                        }
                    514: 
1.1.1.2   misho     515:                        ZEND_VM_INC_OPCODE();
1.1       misho     516:                        ZEND_VM_LEAVE();
                    517:                } else {
                    518: 
                    519:                        EG(opline_ptr) = &EX(opline);
                    520:                        EG(active_op_array) = EX(op_array);
                    521:                        EG(return_value_ptr_ptr) = EX(original_return_value);
                    522:                        if (EG(active_symbol_table)) {
                    523:                                if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) {
                    524:                                        zend_hash_destroy(EG(active_symbol_table));
                    525:                                        FREE_HASHTABLE(EG(active_symbol_table));
                    526:                                } else {
                    527:                                        /* clean before putting into the cache, since clean
                    528:                                           could call dtors, which could use cached hash */
                    529:                                        zend_hash_clean(EG(active_symbol_table));
                    530:                                        *(++EG(symtable_cache_ptr)) = EG(active_symbol_table);
                    531:                                }
                    532:                        }
                    533:                        EG(active_symbol_table) = EX(symbol_table);
                    534: 
                    535:                        EX(function_state).function = (zend_function *) EX(op_array);
                    536:                        EX(function_state).arguments = NULL;
                    537: 
                    538:                        if (EG(This)) {
1.1.1.2   misho     539:                                if (UNEXPECTED(EG(exception) != NULL) && IS_CTOR_CALL(EX(called_scope))) {
1.1       misho     540:                                        if (IS_CTOR_USED(EX(called_scope))) {
                    541:                                                Z_DELREF_P(EG(This));
                    542:                                        }
                    543:                                        if (Z_REFCOUNT_P(EG(This)) == 1) {
                    544:                                                zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
                    545:                                        }
                    546:                                }
                    547:                                zval_ptr_dtor(&EG(This));
                    548:                        }
                    549:                        EG(This) = EX(current_this);
                    550:                        EG(scope) = EX(current_scope);
                    551:                        EG(called_scope) = EX(current_called_scope);
                    552: 
                    553:                        EX(object) = EX(current_object);
                    554:                        EX(called_scope) = DECODE_CTOR(EX(called_scope));
                    555: 
                    556:                        zend_vm_stack_clear_multiple(TSRMLS_C);
                    557: 
1.1.1.2   misho     558:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho     559:                                zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho     560:                                if (RETURN_VALUE_USED(opline) && EX_T(opline->result.var).var.ptr) {
                    561:                                        zval_ptr_dtor(&EX_T(opline->result.var).var.ptr);
1.1       misho     562:                                }
1.1.1.2   misho     563:                                HANDLE_EXCEPTION_LEAVE();
1.1       misho     564:                        }
                    565: 
1.1.1.2   misho     566:                        ZEND_VM_INC_OPCODE();
1.1       misho     567:                        ZEND_VM_LEAVE();
                    568:                }
                    569:        }
                    570:        ZEND_VM_RETURN();
                    571: }
                    572: 
                    573: static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                    574: {
1.1.1.2   misho     575:        USE_OPLINE
1.1       misho     576:        zend_bool should_change_scope = 0;
1.1.1.2   misho     577:        zend_function *fbc = EX(function_state).function;
1.1       misho     578: 
1.1.1.2   misho     579:        SAVE_OPLINE();
                    580:        if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
                    581:                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
                    582:                        zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", fbc->common.scope->name, fbc->common.function_name);
                    583:                        CHECK_EXCEPTION();
1.1       misho     584:                        ZEND_VM_NEXT_OPCODE(); /* Never reached */
                    585:                }
1.1.1.2   misho     586:                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1.1       misho     587:                        zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
1.1.1.2   misho     588:                                fbc->common.scope ? fbc->common.scope->name : "",
                    589:                                fbc->common.scope ? "::" : "",
                    590:                                fbc->common.function_name);
1.1       misho     591:                }
                    592:        }
1.1.1.2   misho     593:        if (fbc->common.scope &&
                    594:                !(fbc->common.fn_flags & ZEND_ACC_STATIC) &&
1.1       misho     595:                !EX(object)) {
                    596: 
1.1.1.2   misho     597:                if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1       misho     598:                        /* FIXME: output identifiers properly */
1.1.1.2   misho     599:                        zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically", fbc->common.scope->name, fbc->common.function_name);
1.1       misho     600:                } else {
                    601:                        /* FIXME: output identifiers properly */
                    602:                        /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho     603:                        zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically", fbc->common.scope->name, fbc->common.function_name);
1.1       misho     604:                }
                    605:        }
                    606: 
1.1.1.2   misho     607:        if (fbc->type == ZEND_USER_FUNCTION || fbc->common.scope) {
1.1       misho     608:                should_change_scope = 1;
                    609:                EX(current_this) = EG(This);
                    610:                EX(current_scope) = EG(scope);
                    611:                EX(current_called_scope) = EG(called_scope);
                    612:                EG(This) = EX(object);
1.1.1.2   misho     613:                EG(scope) = (fbc->type == ZEND_USER_FUNCTION || !EX(object)) ? fbc->common.scope : NULL;
1.1       misho     614:                EG(called_scope) = EX(called_scope);
                    615:        }
                    616: 
                    617:        zend_arg_types_stack_3_pop(&EG(arg_types_stack), &EX(called_scope), &EX(current_object), &EX(fbc));
                    618:        EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
1.1.1.2   misho     619:        LOAD_OPLINE();
                    620: 
                    621:        if (fbc->type == ZEND_INTERNAL_FUNCTION) {
                    622:                temp_variable *ret = &EX_T(opline->result.var);
1.1       misho     623: 
1.1.1.2   misho     624:                if (fbc->common.arg_info) {
1.1       misho     625:                        zend_uint i=0;
                    626:                        zval **p = (zval**)EX(function_state).arguments;
                    627:                        ulong arg_count = opline->extended_value;
                    628: 
                    629:                        while (arg_count>0) {
1.1.1.2   misho     630:                                zend_verify_arg_type(fbc, ++i, *(p-arg_count), 0 TSRMLS_CC);
1.1       misho     631:                                arg_count--;
                    632:                        }
                    633:                }
1.1.1.2   misho     634: 
1.1.1.3   misho     635:                if (EXPECTED(EG(exception) == NULL)) {
                    636:                        MAKE_STD_ZVAL(ret->var.ptr);
                    637:                        ZVAL_NULL(ret->var.ptr);
                    638:                        ret->var.ptr_ptr = &ret->var.ptr;
                    639:                        ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
1.1       misho     640: 
1.1.1.3   misho     641:                        if (!zend_execute_internal) {
                    642:                                /* saves one function call if zend_execute_internal is not used */
                    643:                                fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
                    644:                        } else {
                    645:                                zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC);
                    646:                        }
                    647: 
                    648:                        if (!RETURN_VALUE_USED(opline)) {
                    649:                                zval_ptr_dtor(&ret->var.ptr);
                    650:                        }
                    651:                } else if (RETURN_VALUE_USED(opline)) {
                    652:                        EX_T(opline->result.var).var.ptr = NULL;
1.1       misho     653:                }
1.1.1.2   misho     654:        } else if (fbc->type == ZEND_USER_FUNCTION) {
1.1       misho     655:                EX(original_return_value) = EG(return_value_ptr_ptr);
                    656:                EG(active_symbol_table) = NULL;
1.1.1.2   misho     657:                EG(active_op_array) = &fbc->op_array;
1.1       misho     658:                EG(return_value_ptr_ptr) = NULL;
                    659:                if (RETURN_VALUE_USED(opline)) {
1.1.1.2   misho     660:                        temp_variable *ret = &EX_T(opline->result.var);
                    661: 
                    662:                        ret->var.ptr = NULL;
                    663:                        EG(return_value_ptr_ptr) = &ret->var.ptr;
                    664:                        ret->var.ptr_ptr = &ret->var.ptr;
                    665:                        ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
1.1       misho     666:                }
                    667: 
1.1.1.2   misho     668:                if (EXPECTED(zend_execute == execute)) {
                    669:                        if (EXPECTED(EG(exception) == NULL)) {
                    670:                                ZEND_VM_ENTER();
                    671:                        }
1.1       misho     672:                } else {
                    673:                        zend_execute(EG(active_op_array) TSRMLS_CC);
                    674:                }
                    675: 
                    676:                EG(opline_ptr) = &EX(opline);
                    677:                EG(active_op_array) = EX(op_array);
                    678:                EG(return_value_ptr_ptr) = EX(original_return_value);
                    679:                if (EG(active_symbol_table)) {
                    680:                        if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) {
                    681:                                zend_hash_destroy(EG(active_symbol_table));
                    682:                                FREE_HASHTABLE(EG(active_symbol_table));
                    683:                        } else {
                    684:                                /* clean before putting into the cache, since clean
                    685:                                   could call dtors, which could use cached hash */
                    686:                                zend_hash_clean(EG(active_symbol_table));
                    687:                                *(++EG(symtable_cache_ptr)) = EG(active_symbol_table);
                    688:                        }
                    689:                }
                    690:                EG(active_symbol_table) = EX(symbol_table);
                    691:        } else { /* ZEND_OVERLOADED_FUNCTION */
1.1.1.2   misho     692:                MAKE_STD_ZVAL(EX_T(opline->result.var).var.ptr);
                    693:                ZVAL_NULL(EX_T(opline->result.var).var.ptr);
1.1       misho     694: 
                    695:                        /* Not sure what should be done here if it's a static method */
1.1.1.2   misho     696:                if (EXPECTED(EX(object) != NULL)) {
                    697:                        Z_OBJ_HT_P(EX(object))->call_method(fbc->common.function_name, opline->extended_value, EX_T(opline->result.var).var.ptr, &EX_T(opline->result.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
1.1       misho     698:                } else {
                    699:                        zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object");
                    700:                }
                    701: 
1.1.1.2   misho     702:                if (fbc->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
                    703:                        efree((char*)fbc->common.function_name);
1.1       misho     704:                }
1.1.1.2   misho     705:                efree(fbc);
1.1       misho     706: 
                    707:                if (!RETURN_VALUE_USED(opline)) {
1.1.1.2   misho     708:                        zval_ptr_dtor(&EX_T(opline->result.var).var.ptr);
1.1       misho     709:                } else {
1.1.1.2   misho     710:                        Z_UNSET_ISREF_P(EX_T(opline->result.var).var.ptr);
                    711:                        Z_SET_REFCOUNT_P(EX_T(opline->result.var).var.ptr, 1);
                    712:                        EX_T(opline->result.var).var.fcall_returned_reference = 0;
                    713:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho     714:                }
                    715:        }
                    716: 
                    717:        EX(function_state).function = (zend_function *) EX(op_array);
                    718:        EX(function_state).arguments = NULL;
                    719: 
                    720:        if (should_change_scope) {
                    721:                if (EG(This)) {
1.1.1.2   misho     722:                        if (UNEXPECTED(EG(exception) != NULL) && IS_CTOR_CALL(EX(called_scope))) {
1.1       misho     723:                                if (IS_CTOR_USED(EX(called_scope))) {
                    724:                                        Z_DELREF_P(EG(This));
                    725:                                }
                    726:                                if (Z_REFCOUNT_P(EG(This)) == 1) {
                    727:                                        zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
                    728:                                }
                    729:                        }
                    730:                        zval_ptr_dtor(&EG(This));
                    731:                }
                    732:                EG(This) = EX(current_this);
                    733:                EG(scope) = EX(current_scope);
                    734:                EG(called_scope) = EX(current_called_scope);
                    735:        }
                    736: 
                    737:        EX(object) = EX(current_object);
                    738:        EX(called_scope) = DECODE_CTOR(EX(called_scope));
                    739: 
                    740:        zend_vm_stack_clear_multiple(TSRMLS_C);
                    741: 
1.1.1.2   misho     742:        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho     743:                zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho     744:                if (RETURN_VALUE_USED(opline) && EX_T(opline->result.var).var.ptr) {
                    745:                        zval_ptr_dtor(&EX_T(opline->result.var).var.ptr);
1.1       misho     746:                }
1.1.1.2   misho     747:                HANDLE_EXCEPTION();
1.1       misho     748:        }
                    749: 
                    750:        ZEND_VM_NEXT_OPCODE();
                    751: }
                    752: 
                    753: static int ZEND_FASTCALL  ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    754: {
                    755:        EX(function_state).function = EX(fbc);
                    756:        return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                    757: }
                    758: 
                    759: static int ZEND_FASTCALL  ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    760: {
1.1.1.2   misho     761:        USE_OPLINE
                    762:        zend_uint arg_num = opline->op1.num;
1.1       misho     763:        zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC);
                    764: 
1.1.1.2   misho     765:        SAVE_OPLINE();
                    766:        if (UNEXPECTED(param == NULL)) {
1.1       misho     767:                if (zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL, opline->extended_value TSRMLS_CC)) {
1.1.1.2   misho     768:                        const char *space;
                    769:                        const char *class_name;
                    770:                        zend_execute_data *ptr;
                    771: 
                    772:                        if (EG(active_op_array)->scope) {
                    773:                                class_name = EG(active_op_array)->scope->name;
                    774:                                space = "::";
                    775:                        } else {
                    776:                                class_name = space = "";
                    777:                        }
                    778:                        ptr = EX(prev_execute_data);
                    779: 
1.1       misho     780:                        if(ptr && ptr->op_array) {
1.1.1.2   misho     781:                                zend_error(E_WARNING, "Missing argument %u for %s%s%s(), called in %s on line %d and defined", opline->op1.num, class_name, space, get_active_function_name(TSRMLS_C), ptr->op_array->filename, ptr->opline->lineno);
1.1       misho     782:                        } else {
1.1.1.2   misho     783:                                zend_error(E_WARNING, "Missing argument %u for %s%s%s()", opline->op1.num, class_name, space, get_active_function_name(TSRMLS_C));
1.1       misho     784:                        }
                    785:                }
                    786:        } else {
                    787:                zval **var_ptr;
                    788: 
                    789:                zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param, opline->extended_value TSRMLS_CC);
1.1.1.2   misho     790:                var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->result.var TSRMLS_CC);
1.1       misho     791:                Z_DELREF_PP(var_ptr);
                    792:                *var_ptr = *param;
                    793:                Z_ADDREF_PP(var_ptr);
                    794:        }
                    795: 
1.1.1.2   misho     796:        CHECK_EXCEPTION();
1.1       misho     797:        ZEND_VM_NEXT_OPCODE();
                    798: }
                    799: 
                    800: static int ZEND_FASTCALL  ZEND_NEW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    801: {
1.1.1.2   misho     802:        USE_OPLINE
1.1       misho     803:        zval *object_zval;
                    804:        zend_function *constructor;
                    805: 
1.1.1.2   misho     806:        SAVE_OPLINE();
                    807:        if (UNEXPECTED((EX_T(opline->op1.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) != 0)) {
                    808:                if (EX_T(opline->op1.var).class_entry->ce_flags & ZEND_ACC_INTERFACE) {
                    809:                        zend_error_noreturn(E_ERROR, "Cannot instantiate interface %s", EX_T(opline->op1.var).class_entry->name);
                    810:                } else if ((EX_T(opline->op1.var).class_entry->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
                    811:                        zend_error_noreturn(E_ERROR, "Cannot instantiate trait %s", EX_T(opline->op1.var).class_entry->name);
1.1       misho     812:                } else {
1.1.1.2   misho     813:                        zend_error_noreturn(E_ERROR, "Cannot instantiate abstract class %s", EX_T(opline->op1.var).class_entry->name);
1.1       misho     814:                }
                    815:        }
                    816:        ALLOC_ZVAL(object_zval);
1.1.1.2   misho     817:        object_init_ex(object_zval, EX_T(opline->op1.var).class_entry);
1.1       misho     818:        INIT_PZVAL(object_zval);
                    819: 
                    820:        constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
                    821: 
                    822:        if (constructor == NULL) {
                    823:                if (RETURN_VALUE_USED(opline)) {
1.1.1.2   misho     824:                        AI_SET_PTR(&EX_T(opline->result.var), object_zval);
1.1       misho     825:                } else {
                    826:                        zval_ptr_dtor(&object_zval);
                    827:                }
1.1.1.2   misho     828:                ZEND_VM_JMP(EX(op_array)->opcodes + opline->op2.opline_num);
1.1       misho     829:        } else {
                    830:                if (RETURN_VALUE_USED(opline)) {
                    831:                        PZVAL_LOCK(object_zval);
1.1.1.2   misho     832:                        AI_SET_PTR(&EX_T(opline->result.var), object_zval);
1.1       misho     833:                }
                    834: 
                    835:                zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), ENCODE_CTOR(EX(called_scope), RETURN_VALUE_USED(opline)));
                    836: 
                    837:                /* We are not handling overloaded classes right now */
                    838:                EX(object) = object_zval;
                    839:                EX(fbc) = constructor;
1.1.1.2   misho     840:                EX(called_scope) = EX_T(opline->op1.var).class_entry;
1.1       misho     841: 
1.1.1.2   misho     842:                CHECK_EXCEPTION();
1.1       misho     843:                ZEND_VM_NEXT_OPCODE();
                    844:        }
                    845: }
                    846: 
                    847: static int ZEND_FASTCALL  ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    848: {
1.1.1.2   misho     849:        USE_OPLINE
1.1       misho     850: 
1.1.1.2   misho     851:        SAVE_OPLINE();
                    852:        Z_LVAL(EX_T(opline->result.var).tmp_var) = EG(error_reporting);
                    853:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_LONG;  /* shouldn't be necessary */
1.1       misho     854:        if (EX(old_error_reporting) == NULL) {
1.1.1.2   misho     855:                EX(old_error_reporting) = &EX_T(opline->result.var).tmp_var;
1.1       misho     856:        }
                    857: 
                    858:        if (EG(error_reporting)) {
1.1.1.2   misho     859:                do {
                    860:                        EG(error_reporting) = 0;
                    861:                        if (!EG(error_reporting_ini_entry)) {
                    862:                                if (UNEXPECTED(zend_hash_find(EG(ini_directives), "error_reporting", sizeof("error_reporting"), (void **) &EG(error_reporting_ini_entry)) == FAILURE)) {
                    863:                                        break;
                    864:                                }
                    865:                        }
                    866:                        if (!EG(error_reporting_ini_entry)->modified) {
                    867:                                if (!EG(modified_ini_directives)) {
                    868:                                        ALLOC_HASHTABLE(EG(modified_ini_directives));
                    869:                                        zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
                    870:                                }
                    871:                                if (EXPECTED(zend_hash_add(EG(modified_ini_directives), "error_reporting", sizeof("error_reporting"), &EG(error_reporting_ini_entry), sizeof(zend_ini_entry*), NULL) == SUCCESS)) {
                    872:                                        EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
                    873:                                        EG(error_reporting_ini_entry)->orig_value_length = EG(error_reporting_ini_entry)->value_length;
                    874:                                        EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
                    875:                                        EG(error_reporting_ini_entry)->modified = 1;
                    876:                                }
                    877:                        } else if (EG(error_reporting_ini_entry)->value != EG(error_reporting_ini_entry)->orig_value) {
                    878:                                efree(EG(error_reporting_ini_entry)->value);
                    879:                        }
                    880:                        EG(error_reporting_ini_entry)->value = estrndup("0", sizeof("0")-1);
                    881:                        EG(error_reporting_ini_entry)->value_length = sizeof("0")-1;
                    882:                } while (0);
1.1       misho     883:        }
1.1.1.2   misho     884:        CHECK_EXCEPTION();
1.1       misho     885:        ZEND_VM_NEXT_OPCODE();
                    886: }
                    887: 
                    888: static int ZEND_FASTCALL  ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    889: {
1.1.1.2   misho     890:        SAVE_OPLINE();
1.1       misho     891:        zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EG(scope)->name, EX(op_array)->function_name);
                    892:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
                    893: }
                    894: 
                    895: static int ZEND_FASTCALL  ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    896: {
1.1.1.2   misho     897:        SAVE_OPLINE();
1.1       misho     898:        if (!EG(no_extensions)) {
                    899:                zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(op_array) TSRMLS_CC);
                    900:        }
1.1.1.2   misho     901:        CHECK_EXCEPTION();
1.1       misho     902:        ZEND_VM_NEXT_OPCODE();
                    903: }
                    904: 
                    905: static int ZEND_FASTCALL  ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    906: {
1.1.1.2   misho     907:        SAVE_OPLINE();
1.1       misho     908:        if (!EG(no_extensions)) {
                    909:                zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(op_array) TSRMLS_CC);
                    910:        }
1.1.1.2   misho     911:        CHECK_EXCEPTION();
1.1       misho     912:        ZEND_VM_NEXT_OPCODE();
                    913: }
                    914: 
                    915: static int ZEND_FASTCALL  ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    916: {
1.1.1.2   misho     917:        SAVE_OPLINE();
1.1       misho     918:        if (!EG(no_extensions)) {
                    919:                zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(op_array) TSRMLS_CC);
                    920:        }
1.1.1.2   misho     921:        CHECK_EXCEPTION();
1.1       misho     922:        ZEND_VM_NEXT_OPCODE();
                    923: }
                    924: 
                    925: static int ZEND_FASTCALL  ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    926: {
1.1.1.2   misho     927:        USE_OPLINE
1.1       misho     928: 
1.1.1.2   misho     929:        SAVE_OPLINE();
                    930:        EX_T(opline->result.var).class_entry = do_bind_class(EX(op_array), opline, EG(class_table), 0 TSRMLS_CC);
                    931:        CHECK_EXCEPTION();
1.1       misho     932:        ZEND_VM_NEXT_OPCODE();
                    933: }
                    934: 
                    935: static int ZEND_FASTCALL  ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    936: {
1.1.1.2   misho     937:        USE_OPLINE
1.1       misho     938: 
1.1.1.2   misho     939:        SAVE_OPLINE();
                    940:        EX_T(opline->result.var).class_entry = do_bind_inherited_class(EX(op_array), opline, EG(class_table), EX_T(opline->extended_value).class_entry, 0 TSRMLS_CC);
                    941:        CHECK_EXCEPTION();
1.1       misho     942:        ZEND_VM_NEXT_OPCODE();
                    943: }
                    944: 
                    945: static int ZEND_FASTCALL  ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    946: {
1.1.1.2   misho     947:        USE_OPLINE
1.1       misho     948:        zend_class_entry **pce, **pce_orig;
                    949: 
1.1.1.2   misho     950:        SAVE_OPLINE();
                    951:        if (zend_hash_quick_find(EG(class_table), Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, Z_HASH_P(opline->op2.zv), (void**)&pce) == FAILURE ||
                    952:            (zend_hash_quick_find(EG(class_table), Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), Z_HASH_P(opline->op1.zv), (void**)&pce_orig) == SUCCESS &&
1.1       misho     953:             *pce != *pce_orig)) {
1.1.1.2   misho     954:                do_bind_inherited_class(EX(op_array), opline, EG(class_table), EX_T(opline->extended_value).class_entry, 0 TSRMLS_CC);
1.1       misho     955:        }
1.1.1.2   misho     956:        CHECK_EXCEPTION();
1.1       misho     957:        ZEND_VM_NEXT_OPCODE();
                    958: }
                    959: 
                    960: static int ZEND_FASTCALL  ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    961: {
1.1.1.2   misho     962:        USE_OPLINE
                    963: 
                    964:        SAVE_OPLINE();
                    965:        do_bind_function(EX(op_array), opline, EG(function_table), 0);
                    966:        CHECK_EXCEPTION();
                    967:        ZEND_VM_NEXT_OPCODE();
                    968: }
                    969: 
                    970: static int ZEND_FASTCALL  ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    971: {
                    972:        USE_OPLINE
                    973: 
                    974:        SAVE_OPLINE();
                    975:        if (++EG(ticks_count)>=opline->extended_value) {
                    976:                EG(ticks_count)=0;
                    977:                if (zend_ticks_function) {
                    978:                        zend_ticks_function(opline->extended_value);
                    979:                }
                    980:        }
                    981:        CHECK_EXCEPTION();
1.1       misho     982:        ZEND_VM_NEXT_OPCODE();
                    983: }
                    984: 
                    985: static int ZEND_FASTCALL  ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    986: {
                    987:        ZEND_VM_NEXT_OPCODE();
                    988: }
                    989: 
                    990: static int ZEND_FASTCALL  ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    991: {
                    992:        ZEND_VM_NEXT_OPCODE();
                    993: }
                    994: 
1.1.1.2   misho     995: static int ZEND_FASTCALL  ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                    996: {
                    997:        USE_OPLINE
                    998:        zend_class_entry *ce = EX_T(opline->op1.var).class_entry;
                    999:        zend_class_entry *trait;
                   1000: 
                   1001:        SAVE_OPLINE();
                   1002:        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1003:                trait = CACHED_PTR(opline->op2.literal->cache_slot);
                   1004:        } else {
                   1005:                trait = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
                   1006:                                                 Z_STRLEN_P(opline->op2.zv),
                   1007:                                                 opline->op2.literal + 1,
                   1008:                                                 opline->extended_value TSRMLS_CC);
                   1009:                if (UNEXPECTED(trait == NULL)) {
                   1010:                        CHECK_EXCEPTION();
                   1011:                        ZEND_VM_NEXT_OPCODE();
                   1012:                }
                   1013:                if (!((trait->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT)) {
                   1014:                        zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ce->name, trait->name);
                   1015:                }
                   1016:                CACHE_PTR(opline->op2.literal->cache_slot, trait);
                   1017:        }
                   1018: 
                   1019:        zend_do_implement_trait(ce, trait TSRMLS_CC);
                   1020: 
                   1021:        CHECK_EXCEPTION();
                   1022:        ZEND_VM_NEXT_OPCODE();
                   1023: }
                   1024: 
                   1025: static int ZEND_FASTCALL  ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1026: {
                   1027:        USE_OPLINE
                   1028:        zend_class_entry *ce = EX_T(opline->op1.var).class_entry;
                   1029: 
                   1030:        SAVE_OPLINE();
                   1031:        zend_do_bind_traits(ce TSRMLS_CC);
                   1032:        CHECK_EXCEPTION();
                   1033:        ZEND_VM_NEXT_OPCODE();
                   1034: }
                   1035: 
1.1       misho    1036: static int ZEND_FASTCALL  ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1037: {
                   1038:        zend_uint op_num = EG(opline_before_exception)-EG(active_op_array)->opcodes;
                   1039:        int i;
1.1.1.2   misho    1040:        zend_uint catch_op_num = 0;
1.1       misho    1041:        int catched = 0;
                   1042:        zval restored_error_reporting;
                   1043: 
1.1.1.2   misho    1044:        void **stack_frame = (void**)(((char*)EX_Ts()) +
1.1       misho    1045:                (ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * EX(op_array)->T));
                   1046: 
                   1047:        while (zend_vm_stack_top(TSRMLS_C) != stack_frame) {
                   1048:                zval *stack_zval_p = zend_vm_stack_pop(TSRMLS_C);
                   1049:                zval_ptr_dtor(&stack_zval_p);
                   1050:        }
                   1051: 
                   1052:        for (i=0; i<EG(active_op_array)->last_try_catch; i++) {
                   1053:                if (EG(active_op_array)->try_catch_array[i].try_op > op_num) {
                   1054:                        /* further blocks will not be relevant... */
                   1055:                        break;
1.1.1.2   misho    1056:                } else if (op_num < EG(active_op_array)->try_catch_array[i].catch_op) {
1.1       misho    1057:                        catch_op_num = EX(op_array)->try_catch_array[i].catch_op;
                   1058:                        catched = 1;
                   1059:                }
                   1060:        }
                   1061: 
                   1062:        while (EX(fbc)) {
                   1063:                EX(called_scope) = (zend_class_entry*)zend_ptr_stack_pop(&EG(arg_types_stack));
                   1064:                if (EX(object)) {
                   1065:                        if (IS_CTOR_CALL(EX(called_scope))) {
                   1066:                                if (IS_CTOR_USED(EX(called_scope))) {
                   1067:                                        Z_DELREF_P(EX(object));
                   1068:                                }
                   1069:                                if (Z_REFCOUNT_P(EX(object)) == 1) {
                   1070:                                        zend_object_store_ctor_failed(EX(object) TSRMLS_CC);
                   1071:                                }
                   1072:                        }
                   1073:                        zval_ptr_dtor(&EX(object));
                   1074:                }
                   1075:                EX(called_scope) = DECODE_CTOR(EX(called_scope));
                   1076:                zend_arg_types_stack_2_pop(&EG(arg_types_stack), &EX(object), &EX(fbc));
                   1077:        }
                   1078: 
                   1079:        for (i=0; i<EX(op_array)->last_brk_cont; i++) {
                   1080:                if (EX(op_array)->brk_cont_array[i].start < 0) {
                   1081:                        continue;
                   1082:                } else if (EX(op_array)->brk_cont_array[i].start > op_num) {
                   1083:                        /* further blocks will not be relevant... */
                   1084:                        break;
                   1085:                } else if (op_num < EX(op_array)->brk_cont_array[i].brk) {
                   1086:                        if (!catched ||
                   1087:                            catch_op_num >= EX(op_array)->brk_cont_array[i].brk) {
                   1088:                                zend_op *brk_opline = &EX(op_array)->opcodes[EX(op_array)->brk_cont_array[i].brk];
                   1089: 
                   1090:                                switch (brk_opline->opcode) {
                   1091:                                        case ZEND_SWITCH_FREE:
1.1.1.2   misho    1092:                                                if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
                   1093:                                                        zval_ptr_dtor(&EX_T(brk_opline->op1.var).var.ptr);
1.1       misho    1094:                                                }
                   1095:                                                break;
                   1096:                                        case ZEND_FREE:
1.1.1.2   misho    1097:                                                if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
                   1098:                                                        zendi_zval_dtor(EX_T(brk_opline->op1.var).tmp_var);
1.1       misho    1099:                                                }
                   1100:                                                break;
                   1101:                                }
                   1102:                        }
                   1103:                }
                   1104:        }
                   1105: 
                   1106:        /* restore previous error_reporting value */
                   1107:        if (!EG(error_reporting) && EX(old_error_reporting) != NULL && Z_LVAL_P(EX(old_error_reporting)) != 0) {
                   1108:                Z_TYPE(restored_error_reporting) = IS_LONG;
                   1109:                Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting));
                   1110:                convert_to_string(&restored_error_reporting);
                   1111:                zend_alter_ini_entry_ex("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME, 1 TSRMLS_CC);
                   1112:                zendi_zval_dtor(restored_error_reporting);
                   1113:        }
                   1114:        EX(old_error_reporting) = NULL;
                   1115: 
                   1116:        if (!catched) {
                   1117:                return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   1118:        } else {
                   1119:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[catch_op_num]);
                   1120:                ZEND_VM_CONTINUE();
                   1121:        }
                   1122: }
                   1123: 
                   1124: static int ZEND_FASTCALL  ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1125: {
1.1.1.2   misho    1126:        USE_OPLINE
                   1127: 
                   1128:        SAVE_OPLINE();
                   1129:        zend_verify_abstract_class(EX_T(opline->op1.var).class_entry TSRMLS_CC);
                   1130:        CHECK_EXCEPTION();
1.1       misho    1131:        ZEND_VM_NEXT_OPCODE();
                   1132: }
                   1133: 
                   1134: static int ZEND_FASTCALL  ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1135: {
1.1.1.2   misho    1136:        USE_OPLINE
                   1137:        int ret;
                   1138: 
                   1139:        SAVE_OPLINE();
                   1140:        ret = zend_user_opcode_handlers[opline->opcode](ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL);
                   1141:        LOAD_OPLINE();
1.1       misho    1142: 
                   1143:        switch (ret) {
                   1144:                case ZEND_USER_OPCODE_CONTINUE:
                   1145:                        ZEND_VM_CONTINUE();
                   1146:                case ZEND_USER_OPCODE_RETURN:
                   1147:                        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   1148:                case ZEND_USER_OPCODE_ENTER:
                   1149:                        ZEND_VM_ENTER();
                   1150:                case ZEND_USER_OPCODE_LEAVE:
                   1151:                        ZEND_VM_LEAVE();
                   1152:                case ZEND_USER_OPCODE_DISPATCH:
1.1.1.2   misho    1153:                        ZEND_VM_DISPATCH(opline->opcode, opline);
1.1       misho    1154:                default:
1.1.1.2   misho    1155:                        ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
1.1       misho    1156:        }
                   1157: }
                   1158: 
                   1159: static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1160: {
1.1.1.2   misho    1161:        USE_OPLINE
1.1       misho    1162: 
1.1.1.2   misho    1163:        SAVE_OPLINE();
                   1164:        EG(exception) = NULL;
1.1       misho    1165:        if (IS_CONST == IS_UNUSED) {
1.1.1.2   misho    1166:                EX_T(opline->result.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
                   1167:                CHECK_EXCEPTION();
1.1       misho    1168:                ZEND_VM_NEXT_OPCODE();
                   1169:        } else {
                   1170: 
1.1.1.2   misho    1171:                zval *class_name = opline->op2.zv;
1.1       misho    1172: 
1.1.1.2   misho    1173:                if (IS_CONST == IS_CONST) {
                   1174:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1175:                                EX_T(opline->result.var).class_entry = CACHED_PTR(opline->op2.literal->cache_slot);
                   1176:                        } else {
                   1177:                                EX_T(opline->result.var).class_entry = zend_fetch_class_by_name(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1178:                                CACHE_PTR(opline->op2.literal->cache_slot, EX_T(opline->result.var).class_entry);
                   1179:                        }
                   1180:                } else if (Z_TYPE_P(class_name) == IS_OBJECT) {
                   1181:                        EX_T(opline->result.var).class_entry = Z_OBJCE_P(class_name);
1.1       misho    1182:                } else if (Z_TYPE_P(class_name) == IS_STRING) {
1.1.1.2   misho    1183:                        EX_T(opline->result.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1.1       misho    1184:                } else {
                   1185:                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                   1186:                }
                   1187: 
1.1.1.2   misho    1188:                CHECK_EXCEPTION();
1.1       misho    1189:                ZEND_VM_NEXT_OPCODE();
                   1190:        }
                   1191: }
                   1192: 
                   1193: static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1194: {
1.1.1.2   misho    1195:        USE_OPLINE
1.1       misho    1196:        zval *function_name;
                   1197:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   1198: 
                   1199:        if (IS_CONST == IS_CONST) {
1.1.1.2   misho    1200:                function_name = (zval*)(opline->op2.literal+1);
                   1201:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1202:                        EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   1203:                } else if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(function_name), Z_STRLEN_P(function_name)+1, Z_HASH_P(function_name), (void **) &EX(fbc)) == FAILURE)) {
                   1204:                        SAVE_OPLINE();
                   1205:                        zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(opline->op2.zv));
                   1206:                } else {
                   1207:                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1208:                }
1.1.1.2   misho    1209:                EX(object) = NULL;
                   1210:                /*CHECK_EXCEPTION();*/
                   1211:                ZEND_VM_NEXT_OPCODE();
1.1       misho    1212:        } else {
1.1.1.2   misho    1213:                char *function_name_strval, *lcname;
                   1214:                int function_name_strlen;
                   1215: 
                   1216: 
                   1217:                SAVE_OPLINE();
                   1218:                function_name = opline->op2.zv;
                   1219: 
                   1220:                if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
                   1221:                        function_name_strval = Z_STRVAL_P(function_name);
                   1222:                        function_name_strlen = Z_STRLEN_P(function_name);
                   1223:                        if (function_name_strval[0] == '\\') {
                   1224:                            function_name_strlen -= 1;
                   1225:                                lcname = zend_str_tolower_dup(function_name_strval + 1, function_name_strlen);
                   1226:                        } else {
                   1227:                                lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
                   1228:                        }
                   1229:                        if (UNEXPECTED(zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE)) {
                   1230:                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
                   1231:                        }
                   1232:                        efree(lcname);
1.1       misho    1233: 
1.1.1.2   misho    1234:                        EX(object) = NULL;
                   1235:                        CHECK_EXCEPTION();
                   1236:                        ZEND_VM_NEXT_OPCODE();
                   1237:                } else if (IS_CONST != IS_CONST && IS_CONST != IS_TMP_VAR &&
                   1238:                    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
1.1       misho    1239:                        Z_OBJ_HANDLER_P(function_name, get_closure) &&
                   1240:                        Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &EX(called_scope), &EX(fbc), &EX(object) TSRMLS_CC) == SUCCESS) {
                   1241:                        if (EX(object)) {
                   1242:                                Z_ADDREF_P(EX(object));
                   1243:                        }
                   1244:                        if (IS_CONST == IS_VAR && 0 &&
                   1245:                            EX(fbc)->common.fn_flags & ZEND_ACC_CLOSURE) {
                   1246:                                /* Delay closure destruction until its invocation */
                   1247:                                EX(fbc)->common.prototype = (zend_function*)function_name;
                   1248:                        } else {
                   1249: 
                   1250:                        }
1.1.1.2   misho    1251:                        CHECK_EXCEPTION();
1.1       misho    1252:                        ZEND_VM_NEXT_OPCODE();
1.1.1.2   misho    1253:                } else if (IS_CONST != IS_CONST &&
                   1254:                                EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
                   1255:                                zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
                   1256:                        zend_class_entry *ce;
                   1257:                        zval **method = NULL;
                   1258:                        zval **obj = NULL;
1.1       misho    1259: 
1.1.1.2   misho    1260:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj);
                   1261:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method);
                   1262: 
1.1.1.3   misho    1263:                        if (!obj || !method) {
                   1264:                                zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1");
                   1265:                        }
                   1266: 
1.1.1.2   misho    1267:                        if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) {
                   1268:                                zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object");
                   1269:                        }
                   1270: 
                   1271:                        if (Z_TYPE_PP(method) != IS_STRING) {
                   1272:                                zend_error_noreturn(E_ERROR, "Second array member is not a valid method");
                   1273:                        }
                   1274: 
                   1275:                        if (Z_TYPE_PP(obj) == IS_STRING) {
                   1276:                                ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
1.1.1.4   misho    1277:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   1278:                                        HANDLE_EXCEPTION();
                   1279:                                }
1.1.1.2   misho    1280:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    1281:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_PP(obj));
1.1.1.2   misho    1282:                                }
                   1283:                                EX(called_scope) = ce;
                   1284:                                EX(object) = NULL;
                   1285: 
                   1286:                                if (ce->get_static_method) {
                   1287:                                        EX(fbc) = ce->get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method) TSRMLS_CC);
                   1288:                                } else {
                   1289:                                        EX(fbc) = zend_std_get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1290:                                }
                   1291:                        } else {
                   1292:                                EX(object) = *obj;
                   1293:                                ce = EX(called_scope) = Z_OBJCE_PP(obj);
1.1       misho    1294: 
1.1.1.2   misho    1295:                                EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1296:                                if (UNEXPECTED(EX(fbc) == NULL)) {
                   1297:                                        zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), Z_STRVAL_PP(method));
                   1298:                                }
                   1299: 
                   1300:                                if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   1301:                                        EX(object) = NULL;
                   1302:                                } else {
                   1303:                                        if (!PZVAL_IS_REF(EX(object))) {
                   1304:                                                Z_ADDREF_P(EX(object)); /* For $this pointer */
                   1305:                                        } else {
                   1306:                                                zval *this_ptr;
                   1307:                                                ALLOC_ZVAL(this_ptr);
                   1308:                                                INIT_PZVAL_COPY(this_ptr, EX(object));
                   1309:                                                zval_copy_ctor(this_ptr);
                   1310:                                                EX(object) = this_ptr;
                   1311:                                        }
                   1312:                                }
                   1313:                        }
                   1314: 
                   1315:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   1316:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, Z_STRVAL_PP(method));
                   1317:                        }
                   1318: 
                   1319:                        CHECK_EXCEPTION();
                   1320:                        ZEND_VM_NEXT_OPCODE();
1.1       misho    1321:                } else {
1.1.1.2   misho    1322:                        zend_error_noreturn(E_ERROR, "Function name must be a string");
1.1       misho    1323:                }
                   1324:        }
                   1325: }
                   1326: 
                   1327: 
                   1328: static int ZEND_FASTCALL  ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1329: {
1.1.1.2   misho    1330:        USE_OPLINE
                   1331:        zend_literal *func_name;
1.1       misho    1332: 
                   1333:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   1334: 
1.1.1.2   misho    1335:        func_name = opline->op2.literal + 1;
                   1336:        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1337:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   1338:        } else if (zend_hash_quick_find(EG(function_table), Z_STRVAL(func_name->constant), Z_STRLEN(func_name->constant)+1, func_name->hash_value, (void **) &EX(fbc))==FAILURE) {
                   1339:                func_name++;
                   1340:                if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL(func_name->constant), Z_STRLEN(func_name->constant)+1, func_name->hash_value, (void **) &EX(fbc))==FAILURE)) {
                   1341:                        SAVE_OPLINE();
                   1342:                        zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(opline->op2.zv));
                   1343:                } else {
                   1344:                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1345:                }
1.1.1.2   misho    1346:        } else {
                   1347:                CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1348:        }
                   1349: 
                   1350:        EX(object) = NULL;
                   1351:        ZEND_VM_NEXT_OPCODE();
                   1352: }
                   1353: 
                   1354: static int ZEND_FASTCALL  ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1355: {
1.1.1.2   misho    1356:        USE_OPLINE
1.1       misho    1357:        zval *assignment_value;
1.1.1.2   misho    1358:        zend_uint arg_num = opline->op1.num;
1.1       misho    1359:        zval **param = zend_vm_stack_get_arg(arg_num TSRMLS_CC);
                   1360:        zval **var_ptr;
                   1361: 
1.1.1.2   misho    1362:        SAVE_OPLINE();
1.1       misho    1363:        if (param == NULL) {
                   1364:                ALLOC_ZVAL(assignment_value);
1.1.1.2   misho    1365:                *assignment_value = *opline->op2.zv;
                   1366:                if ((Z_TYPE_P(assignment_value) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT ||
                   1367:                     Z_TYPE_P(assignment_value)==IS_CONSTANT_ARRAY) {
1.1       misho    1368:                        Z_SET_REFCOUNT_P(assignment_value, 1);
                   1369:                        zval_update_constant(&assignment_value, 0 TSRMLS_CC);
                   1370:                } else {
                   1371:                        zval_copy_ctor(assignment_value);
                   1372:                }
                   1373:                INIT_PZVAL(assignment_value);
                   1374:        } else {
                   1375:                assignment_value = *param;
                   1376:                Z_ADDREF_P(assignment_value);
                   1377:        }
                   1378: 
                   1379:        zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value, opline->extended_value TSRMLS_CC);
1.1.1.2   misho    1380:        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->result.var TSRMLS_CC);
1.1.1.3   misho    1381:        zval_ptr_dtor(var_ptr);
1.1       misho    1382:        *var_ptr = assignment_value;
                   1383: 
1.1.1.2   misho    1384:        CHECK_EXCEPTION();
1.1       misho    1385:        ZEND_VM_NEXT_OPCODE();
                   1386: }
                   1387: 
                   1388: static int ZEND_FASTCALL  ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1389: {
1.1.1.2   misho    1390:        USE_OPLINE
1.1       misho    1391:        zend_brk_cont_element *el;
                   1392: 
1.1.1.2   misho    1393:        SAVE_OPLINE();
                   1394:        el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
                   1395:                           EX(op_array), EX_Ts() TSRMLS_CC);
1.1       misho    1396:        ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
                   1397: }
                   1398: 
                   1399: static int ZEND_FASTCALL  ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1400: {
1.1.1.2   misho    1401:        USE_OPLINE
1.1       misho    1402:        zend_brk_cont_element *el;
                   1403: 
1.1.1.2   misho    1404:        SAVE_OPLINE();
                   1405:        el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
                   1406:                           EX(op_array), EX_Ts() TSRMLS_CC);
1.1       misho    1407:        ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
                   1408: }
                   1409: 
                   1410: static int ZEND_FASTCALL  ZEND_GOTO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1411: {
                   1412:        zend_op *brk_opline;
1.1.1.2   misho    1413:        USE_OPLINE
1.1       misho    1414:        zend_brk_cont_element *el;
                   1415: 
1.1.1.2   misho    1416:        SAVE_OPLINE();
                   1417:        el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->extended_value,
                   1418:                           EX(op_array), EX_Ts() TSRMLS_CC);
1.1       misho    1419: 
                   1420:        brk_opline = EX(op_array)->opcodes + el->brk;
                   1421: 
                   1422:        switch (brk_opline->opcode) {
                   1423:                case ZEND_SWITCH_FREE:
1.1.1.2   misho    1424:                        if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
                   1425:                                zval_ptr_dtor(&EX_T(brk_opline->op1.var).var.ptr);
1.1       misho    1426:                        }
                   1427:                        break;
                   1428:                case ZEND_FREE:
1.1.1.2   misho    1429:                        if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
                   1430:                                zendi_zval_dtor(EX_T(brk_opline->op1.var).tmp_var);
1.1       misho    1431:                        }
                   1432:                        break;
                   1433:        }
1.1.1.2   misho    1434:        ZEND_VM_JMP(opline->op1.jmp_addr);
1.1       misho    1435: }
                   1436: 
                   1437: static int ZEND_FASTCALL  ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1438: {
1.1.1.2   misho    1439:        USE_OPLINE
                   1440:        zend_class_entry *ce = EX_T(opline->op1.var).class_entry;
                   1441:        zend_class_entry *iface;
                   1442: 
                   1443:        SAVE_OPLINE();
                   1444:        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1445:                iface = CACHED_PTR(opline->op2.literal->cache_slot);
                   1446:        } else {
                   1447:                iface = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1448:                if (UNEXPECTED(iface == NULL)) {
                   1449:                        CHECK_EXCEPTION();
                   1450:                        ZEND_VM_NEXT_OPCODE();
1.1       misho    1451:                }
1.1.1.3   misho    1452:                CACHE_PTR(opline->op2.literal->cache_slot, iface);
1.1.1.2   misho    1453:        }
                   1454: 
                   1455:        if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) {
                   1456:                zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ce->name, iface->name);
1.1       misho    1457:        }
1.1.1.2   misho    1458:        zend_do_implement_interface(ce, iface TSRMLS_CC);
1.1       misho    1459: 
1.1.1.2   misho    1460:        CHECK_EXCEPTION();
1.1       misho    1461:        ZEND_VM_NEXT_OPCODE();
                   1462: }
                   1463: 
                   1464: static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1465: {
1.1.1.2   misho    1466:        USE_OPLINE
1.1       misho    1467: 
1.1.1.2   misho    1468:        SAVE_OPLINE();
                   1469:        EG(exception) = NULL;
1.1       misho    1470:        if (IS_TMP_VAR == IS_UNUSED) {
1.1.1.2   misho    1471:                EX_T(opline->result.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
                   1472:                CHECK_EXCEPTION();
1.1       misho    1473:                ZEND_VM_NEXT_OPCODE();
                   1474:        } else {
                   1475:                zend_free_op free_op2;
1.1.1.2   misho    1476:                zval *class_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    1477: 
1.1.1.2   misho    1478:                if (IS_TMP_VAR == IS_CONST) {
                   1479:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1480:                                EX_T(opline->result.var).class_entry = CACHED_PTR(opline->op2.literal->cache_slot);
                   1481:                        } else {
                   1482:                                EX_T(opline->result.var).class_entry = zend_fetch_class_by_name(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1483:                                CACHE_PTR(opline->op2.literal->cache_slot, EX_T(opline->result.var).class_entry);
                   1484:                        }
                   1485:                } else if (Z_TYPE_P(class_name) == IS_OBJECT) {
                   1486:                        EX_T(opline->result.var).class_entry = Z_OBJCE_P(class_name);
1.1       misho    1487:                } else if (Z_TYPE_P(class_name) == IS_STRING) {
1.1.1.2   misho    1488:                        EX_T(opline->result.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1.1       misho    1489:                } else {
                   1490:                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                   1491:                }
                   1492: 
                   1493:                zval_dtor(free_op2.var);
1.1.1.2   misho    1494:                CHECK_EXCEPTION();
1.1       misho    1495:                ZEND_VM_NEXT_OPCODE();
                   1496:        }
                   1497: }
                   1498: 
                   1499: static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1500: {
1.1.1.2   misho    1501:        USE_OPLINE
1.1       misho    1502:        zval *function_name;
                   1503:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   1504: 
                   1505:        if (IS_TMP_VAR == IS_CONST) {
1.1.1.2   misho    1506:                function_name = (zval*)(opline->op2.literal+1);
                   1507:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1508:                        EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   1509:                } else if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(function_name), Z_STRLEN_P(function_name)+1, Z_HASH_P(function_name), (void **) &EX(fbc)) == FAILURE)) {
                   1510:                        SAVE_OPLINE();
                   1511:                        zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(opline->op2.zv));
                   1512:                } else {
                   1513:                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1514:                }
1.1.1.2   misho    1515:                EX(object) = NULL;
                   1516:                /*CHECK_EXCEPTION();*/
                   1517:                ZEND_VM_NEXT_OPCODE();
1.1       misho    1518:        } else {
1.1.1.2   misho    1519:                char *function_name_strval, *lcname;
                   1520:                int function_name_strlen;
                   1521:                zend_free_op free_op2;
                   1522: 
                   1523:                SAVE_OPLINE();
                   1524:                function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    1525: 
1.1.1.2   misho    1526:                if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
                   1527:                        function_name_strval = Z_STRVAL_P(function_name);
                   1528:                        function_name_strlen = Z_STRLEN_P(function_name);
                   1529:                        if (function_name_strval[0] == '\\') {
                   1530:                            function_name_strlen -= 1;
                   1531:                                lcname = zend_str_tolower_dup(function_name_strval + 1, function_name_strlen);
                   1532:                        } else {
                   1533:                                lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
                   1534:                        }
                   1535:                        if (UNEXPECTED(zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE)) {
                   1536:                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
                   1537:                        }
                   1538:                        efree(lcname);
                   1539:                        zval_dtor(free_op2.var);
                   1540:                        EX(object) = NULL;
                   1541:                        CHECK_EXCEPTION();
                   1542:                        ZEND_VM_NEXT_OPCODE();
                   1543:                } else if (IS_TMP_VAR != IS_CONST && IS_TMP_VAR != IS_TMP_VAR &&
                   1544:                    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
1.1       misho    1545:                        Z_OBJ_HANDLER_P(function_name, get_closure) &&
                   1546:                        Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &EX(called_scope), &EX(fbc), &EX(object) TSRMLS_CC) == SUCCESS) {
                   1547:                        if (EX(object)) {
                   1548:                                Z_ADDREF_P(EX(object));
                   1549:                        }
                   1550:                        if (IS_TMP_VAR == IS_VAR && 1 &&
                   1551:                            EX(fbc)->common.fn_flags & ZEND_ACC_CLOSURE) {
                   1552:                                /* Delay closure destruction until its invocation */
                   1553:                                EX(fbc)->common.prototype = (zend_function*)function_name;
                   1554:                        } else {
                   1555:                                zval_dtor(free_op2.var);
                   1556:                        }
1.1.1.2   misho    1557:                        CHECK_EXCEPTION();
1.1       misho    1558:                        ZEND_VM_NEXT_OPCODE();
1.1.1.2   misho    1559:                } else if (IS_TMP_VAR != IS_CONST &&
                   1560:                                EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
                   1561:                                zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
                   1562:                        zend_class_entry *ce;
                   1563:                        zval **method = NULL;
                   1564:                        zval **obj = NULL;
1.1       misho    1565: 
1.1.1.2   misho    1566:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj);
                   1567:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method);
1.1       misho    1568: 
1.1.1.3   misho    1569:                        if (!obj || !method) {
                   1570:                                zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1");
                   1571:                        }
                   1572: 
1.1.1.2   misho    1573:                        if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) {
                   1574:                                zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object");
                   1575:                        }
1.1       misho    1576: 
1.1.1.2   misho    1577:                        if (Z_TYPE_PP(method) != IS_STRING) {
                   1578:                                zend_error_noreturn(E_ERROR, "Second array member is not a valid method");
                   1579:                        }
1.1       misho    1580: 
1.1.1.2   misho    1581:                        if (Z_TYPE_PP(obj) == IS_STRING) {
                   1582:                                ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
1.1.1.4   misho    1583:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   1584:                                        HANDLE_EXCEPTION();
                   1585:                                }
1.1.1.2   misho    1586:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    1587:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_PP(obj));
1.1.1.2   misho    1588:                                }
                   1589:                                EX(called_scope) = ce;
                   1590:                                EX(object) = NULL;
1.1       misho    1591: 
1.1.1.2   misho    1592:                                if (ce->get_static_method) {
                   1593:                                        EX(fbc) = ce->get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method) TSRMLS_CC);
                   1594:                                } else {
                   1595:                                        EX(fbc) = zend_std_get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1596:                                }
                   1597:                        } else {
                   1598:                                EX(object) = *obj;
                   1599:                                ce = EX(called_scope) = Z_OBJCE_PP(obj);
1.1       misho    1600: 
1.1.1.2   misho    1601:                                EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1602:                                if (UNEXPECTED(EX(fbc) == NULL)) {
                   1603:                                        zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), Z_STRVAL_PP(method));
                   1604:                                }
1.1       misho    1605: 
1.1.1.2   misho    1606:                                if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   1607:                                        EX(object) = NULL;
                   1608:                                } else {
                   1609:                                        if (!PZVAL_IS_REF(EX(object))) {
                   1610:                                                Z_ADDREF_P(EX(object)); /* For $this pointer */
                   1611:                                        } else {
                   1612:                                                zval *this_ptr;
                   1613:                                                ALLOC_ZVAL(this_ptr);
                   1614:                                                INIT_PZVAL_COPY(this_ptr, EX(object));
                   1615:                                                zval_copy_ctor(this_ptr);
                   1616:                                                EX(object) = this_ptr;
                   1617:                                        }
                   1618:                                }
                   1619:                        }
1.1       misho    1620: 
1.1.1.2   misho    1621:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   1622:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, Z_STRVAL_PP(method));
                   1623:                        }
                   1624:                        zval_dtor(free_op2.var);
                   1625:                        CHECK_EXCEPTION();
                   1626:                        ZEND_VM_NEXT_OPCODE();
                   1627:                } else {
                   1628:                        zend_error_noreturn(E_ERROR, "Function name must be a string");
                   1629:                }
                   1630:        }
1.1       misho    1631: }
                   1632: 
1.1.1.2   misho    1633: 
1.1       misho    1634: static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1635: {
1.1.1.2   misho    1636:        USE_OPLINE
1.1       misho    1637: 
1.1.1.2   misho    1638:        SAVE_OPLINE();
                   1639:        EG(exception) = NULL;
1.1       misho    1640:        if (IS_VAR == IS_UNUSED) {
1.1.1.2   misho    1641:                EX_T(opline->result.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
                   1642:                CHECK_EXCEPTION();
1.1       misho    1643:                ZEND_VM_NEXT_OPCODE();
                   1644:        } else {
                   1645:                zend_free_op free_op2;
1.1.1.2   misho    1646:                zval *class_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    1647: 
1.1.1.2   misho    1648:                if (IS_VAR == IS_CONST) {
                   1649:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1650:                                EX_T(opline->result.var).class_entry = CACHED_PTR(opline->op2.literal->cache_slot);
                   1651:                        } else {
                   1652:                                EX_T(opline->result.var).class_entry = zend_fetch_class_by_name(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1653:                                CACHE_PTR(opline->op2.literal->cache_slot, EX_T(opline->result.var).class_entry);
                   1654:                        }
                   1655:                } else if (Z_TYPE_P(class_name) == IS_OBJECT) {
                   1656:                        EX_T(opline->result.var).class_entry = Z_OBJCE_P(class_name);
1.1       misho    1657:                } else if (Z_TYPE_P(class_name) == IS_STRING) {
1.1.1.2   misho    1658:                        EX_T(opline->result.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1.1       misho    1659:                } else {
                   1660:                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                   1661:                }
                   1662: 
                   1663:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    1664:                CHECK_EXCEPTION();
1.1       misho    1665:                ZEND_VM_NEXT_OPCODE();
                   1666:        }
                   1667: }
                   1668: 
                   1669: static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1670: {
1.1.1.2   misho    1671:        USE_OPLINE
1.1       misho    1672:        zval *function_name;
                   1673:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   1674: 
                   1675:        if (IS_VAR == IS_CONST) {
1.1.1.2   misho    1676:                function_name = (zval*)(opline->op2.literal+1);
                   1677:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1678:                        EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   1679:                } else if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(function_name), Z_STRLEN_P(function_name)+1, Z_HASH_P(function_name), (void **) &EX(fbc)) == FAILURE)) {
                   1680:                        SAVE_OPLINE();
                   1681:                        zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(opline->op2.zv));
                   1682:                } else {
                   1683:                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1684:                }
1.1.1.2   misho    1685:                EX(object) = NULL;
                   1686:                /*CHECK_EXCEPTION();*/
                   1687:                ZEND_VM_NEXT_OPCODE();
1.1       misho    1688:        } else {
1.1.1.2   misho    1689:                char *function_name_strval, *lcname;
                   1690:                int function_name_strlen;
                   1691:                zend_free_op free_op2;
1.1       misho    1692: 
1.1.1.2   misho    1693:                SAVE_OPLINE();
                   1694:                function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   1695: 
                   1696:                if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
                   1697:                        function_name_strval = Z_STRVAL_P(function_name);
                   1698:                        function_name_strlen = Z_STRLEN_P(function_name);
                   1699:                        if (function_name_strval[0] == '\\') {
                   1700:                            function_name_strlen -= 1;
                   1701:                                lcname = zend_str_tolower_dup(function_name_strval + 1, function_name_strlen);
                   1702:                        } else {
                   1703:                                lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
                   1704:                        }
                   1705:                        if (UNEXPECTED(zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE)) {
                   1706:                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
                   1707:                        }
                   1708:                        efree(lcname);
                   1709:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   1710:                        EX(object) = NULL;
                   1711:                        CHECK_EXCEPTION();
                   1712:                        ZEND_VM_NEXT_OPCODE();
                   1713:                } else if (IS_VAR != IS_CONST && IS_VAR != IS_TMP_VAR &&
                   1714:                    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
1.1       misho    1715:                        Z_OBJ_HANDLER_P(function_name, get_closure) &&
                   1716:                        Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &EX(called_scope), &EX(fbc), &EX(object) TSRMLS_CC) == SUCCESS) {
                   1717:                        if (EX(object)) {
                   1718:                                Z_ADDREF_P(EX(object));
                   1719:                        }
                   1720:                        if (IS_VAR == IS_VAR && (free_op2.var != NULL) &&
                   1721:                            EX(fbc)->common.fn_flags & ZEND_ACC_CLOSURE) {
                   1722:                                /* Delay closure destruction until its invocation */
                   1723:                                EX(fbc)->common.prototype = (zend_function*)function_name;
                   1724:                        } else {
                   1725:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   1726:                        }
1.1.1.2   misho    1727:                        CHECK_EXCEPTION();
1.1       misho    1728:                        ZEND_VM_NEXT_OPCODE();
1.1.1.2   misho    1729:                } else if (IS_VAR != IS_CONST &&
                   1730:                                EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
                   1731:                                zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
                   1732:                        zend_class_entry *ce;
                   1733:                        zval **method = NULL;
                   1734:                        zval **obj = NULL;
1.1       misho    1735: 
1.1.1.2   misho    1736:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj);
                   1737:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method);
1.1       misho    1738: 
1.1.1.3   misho    1739:                        if (!obj || !method) {
                   1740:                                zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1");
                   1741:                        }
                   1742: 
1.1.1.2   misho    1743:                        if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) {
                   1744:                                zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object");
                   1745:                        }
1.1       misho    1746: 
1.1.1.2   misho    1747:                        if (Z_TYPE_PP(method) != IS_STRING) {
                   1748:                                zend_error_noreturn(E_ERROR, "Second array member is not a valid method");
                   1749:                        }
1.1       misho    1750: 
1.1.1.2   misho    1751:                        if (Z_TYPE_PP(obj) == IS_STRING) {
                   1752:                                ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
1.1.1.4   misho    1753:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   1754:                                        HANDLE_EXCEPTION();
                   1755:                                }
1.1.1.2   misho    1756:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    1757:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_PP(obj));
1.1.1.2   misho    1758:                                }
                   1759:                                EX(called_scope) = ce;
                   1760:                                EX(object) = NULL;
1.1       misho    1761: 
1.1.1.2   misho    1762:                                if (ce->get_static_method) {
                   1763:                                        EX(fbc) = ce->get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method) TSRMLS_CC);
                   1764:                                } else {
                   1765:                                        EX(fbc) = zend_std_get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1766:                                }
                   1767:                        } else {
                   1768:                                EX(object) = *obj;
                   1769:                                ce = EX(called_scope) = Z_OBJCE_PP(obj);
1.1       misho    1770: 
1.1.1.2   misho    1771:                                EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1772:                                if (UNEXPECTED(EX(fbc) == NULL)) {
                   1773:                                        zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), Z_STRVAL_PP(method));
                   1774:                                }
1.1       misho    1775: 
1.1.1.2   misho    1776:                                if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   1777:                                        EX(object) = NULL;
                   1778:                                } else {
                   1779:                                        if (!PZVAL_IS_REF(EX(object))) {
                   1780:                                                Z_ADDREF_P(EX(object)); /* For $this pointer */
                   1781:                                        } else {
                   1782:                                                zval *this_ptr;
                   1783:                                                ALLOC_ZVAL(this_ptr);
                   1784:                                                INIT_PZVAL_COPY(this_ptr, EX(object));
                   1785:                                                zval_copy_ctor(this_ptr);
                   1786:                                                EX(object) = this_ptr;
                   1787:                                        }
                   1788:                                }
                   1789:                        }
1.1       misho    1790: 
1.1.1.2   misho    1791:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   1792:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, Z_STRVAL_PP(method));
                   1793:                        }
                   1794:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   1795:                        CHECK_EXCEPTION();
                   1796:                        ZEND_VM_NEXT_OPCODE();
                   1797:                } else {
                   1798:                        zend_error_noreturn(E_ERROR, "Function name must be a string");
                   1799:                }
                   1800:        }
1.1       misho    1801: }
                   1802: 
1.1.1.2   misho    1803: 
1.1       misho    1804: static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1805: {
1.1.1.2   misho    1806:        USE_OPLINE
1.1       misho    1807: 
1.1.1.2   misho    1808:        SAVE_OPLINE();
                   1809:        EG(exception) = NULL;
1.1       misho    1810:        if (IS_UNUSED == IS_UNUSED) {
1.1.1.2   misho    1811:                EX_T(opline->result.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
                   1812:                CHECK_EXCEPTION();
1.1       misho    1813:                ZEND_VM_NEXT_OPCODE();
                   1814:        } else {
                   1815: 
                   1816:                zval *class_name = NULL;
                   1817: 
1.1.1.2   misho    1818:                if (IS_UNUSED == IS_CONST) {
                   1819:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1820:                                EX_T(opline->result.var).class_entry = CACHED_PTR(opline->op2.literal->cache_slot);
                   1821:                        } else {
                   1822:                                EX_T(opline->result.var).class_entry = zend_fetch_class_by_name(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1823:                                CACHE_PTR(opline->op2.literal->cache_slot, EX_T(opline->result.var).class_entry);
                   1824:                        }
                   1825:                } else if (Z_TYPE_P(class_name) == IS_OBJECT) {
                   1826:                        EX_T(opline->result.var).class_entry = Z_OBJCE_P(class_name);
1.1       misho    1827:                } else if (Z_TYPE_P(class_name) == IS_STRING) {
1.1.1.2   misho    1828:                        EX_T(opline->result.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1.1       misho    1829:                } else {
                   1830:                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                   1831:                }
                   1832: 
1.1.1.2   misho    1833:                CHECK_EXCEPTION();
1.1       misho    1834:                ZEND_VM_NEXT_OPCODE();
                   1835:        }
                   1836: }
                   1837: 
                   1838: static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1839: {
1.1.1.2   misho    1840:        USE_OPLINE
1.1       misho    1841: 
1.1.1.2   misho    1842:        SAVE_OPLINE();
                   1843:        EG(exception) = NULL;
1.1       misho    1844:        if (IS_CV == IS_UNUSED) {
1.1.1.2   misho    1845:                EX_T(opline->result.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
                   1846:                CHECK_EXCEPTION();
1.1       misho    1847:                ZEND_VM_NEXT_OPCODE();
                   1848:        } else {
                   1849: 
1.1.1.2   misho    1850:                zval *class_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    1851: 
1.1.1.2   misho    1852:                if (IS_CV == IS_CONST) {
                   1853:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1854:                                EX_T(opline->result.var).class_entry = CACHED_PTR(opline->op2.literal->cache_slot);
                   1855:                        } else {
                   1856:                                EX_T(opline->result.var).class_entry = zend_fetch_class_by_name(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->op2.literal + 1, opline->extended_value TSRMLS_CC);
                   1857:                                CACHE_PTR(opline->op2.literal->cache_slot, EX_T(opline->result.var).class_entry);
                   1858:                        }
                   1859:                } else if (Z_TYPE_P(class_name) == IS_OBJECT) {
                   1860:                        EX_T(opline->result.var).class_entry = Z_OBJCE_P(class_name);
1.1       misho    1861:                } else if (Z_TYPE_P(class_name) == IS_STRING) {
1.1.1.2   misho    1862:                        EX_T(opline->result.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1.1       misho    1863:                } else {
                   1864:                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                   1865:                }
                   1866: 
1.1.1.2   misho    1867:                CHECK_EXCEPTION();
1.1       misho    1868:                ZEND_VM_NEXT_OPCODE();
                   1869:        }
                   1870: }
                   1871: 
                   1872: static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   1873: {
1.1.1.2   misho    1874:        USE_OPLINE
1.1       misho    1875:        zval *function_name;
                   1876:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   1877: 
                   1878:        if (IS_CV == IS_CONST) {
1.1.1.2   misho    1879:                function_name = (zval*)(opline->op2.literal+1);
                   1880:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   1881:                        EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   1882:                } else if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(function_name), Z_STRLEN_P(function_name)+1, Z_HASH_P(function_name), (void **) &EX(fbc)) == FAILURE)) {
                   1883:                        SAVE_OPLINE();
                   1884:                        zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(opline->op2.zv));
                   1885:                } else {
                   1886:                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
1.1       misho    1887:                }
1.1.1.2   misho    1888:                EX(object) = NULL;
                   1889:                /*CHECK_EXCEPTION();*/
                   1890:                ZEND_VM_NEXT_OPCODE();
1.1       misho    1891:        } else {
1.1.1.2   misho    1892:                char *function_name_strval, *lcname;
                   1893:                int function_name_strlen;
                   1894: 
                   1895: 
                   1896:                SAVE_OPLINE();
                   1897:                function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   1898: 
                   1899:                if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
                   1900:                        function_name_strval = Z_STRVAL_P(function_name);
                   1901:                        function_name_strlen = Z_STRLEN_P(function_name);
                   1902:                        if (function_name_strval[0] == '\\') {
                   1903:                            function_name_strlen -= 1;
                   1904:                                lcname = zend_str_tolower_dup(function_name_strval + 1, function_name_strlen);
                   1905:                        } else {
                   1906:                                lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
                   1907:                        }
                   1908:                        if (UNEXPECTED(zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &EX(fbc)) == FAILURE)) {
                   1909:                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
                   1910:                        }
                   1911:                        efree(lcname);
1.1       misho    1912: 
1.1.1.2   misho    1913:                        EX(object) = NULL;
                   1914:                        CHECK_EXCEPTION();
                   1915:                        ZEND_VM_NEXT_OPCODE();
                   1916:                } else if (IS_CV != IS_CONST && IS_CV != IS_TMP_VAR &&
                   1917:                    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
1.1       misho    1918:                        Z_OBJ_HANDLER_P(function_name, get_closure) &&
                   1919:                        Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &EX(called_scope), &EX(fbc), &EX(object) TSRMLS_CC) == SUCCESS) {
                   1920:                        if (EX(object)) {
                   1921:                                Z_ADDREF_P(EX(object));
                   1922:                        }
                   1923:                        if (IS_CV == IS_VAR && 0 &&
                   1924:                            EX(fbc)->common.fn_flags & ZEND_ACC_CLOSURE) {
                   1925:                                /* Delay closure destruction until its invocation */
                   1926:                                EX(fbc)->common.prototype = (zend_function*)function_name;
                   1927:                        } else {
                   1928: 
                   1929:                        }
1.1.1.2   misho    1930:                        CHECK_EXCEPTION();
1.1       misho    1931:                        ZEND_VM_NEXT_OPCODE();
1.1.1.2   misho    1932:                } else if (IS_CV != IS_CONST &&
                   1933:                                EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
                   1934:                                zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
                   1935:                        zend_class_entry *ce;
                   1936:                        zval **method = NULL;
                   1937:                        zval **obj = NULL;
1.1       misho    1938: 
1.1.1.2   misho    1939:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj);
                   1940:                        zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method);
1.1       misho    1941: 
1.1.1.3   misho    1942:                        if (!obj || !method) {
                   1943:                                zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1");
                   1944:                        }
                   1945: 
1.1.1.2   misho    1946:                        if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) {
                   1947:                                zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object");
                   1948:                        }
1.1       misho    1949: 
1.1.1.2   misho    1950:                        if (Z_TYPE_PP(method) != IS_STRING) {
                   1951:                                zend_error_noreturn(E_ERROR, "Second array member is not a valid method");
                   1952:                        }
1.1       misho    1953: 
1.1.1.2   misho    1954:                        if (Z_TYPE_PP(obj) == IS_STRING) {
                   1955:                                ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
1.1.1.4   misho    1956:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   1957:                                        HANDLE_EXCEPTION();
                   1958:                                }
1.1.1.2   misho    1959:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    1960:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_PP(obj));
1.1.1.2   misho    1961:                                }
                   1962:                                EX(called_scope) = ce;
                   1963:                                EX(object) = NULL;
1.1       misho    1964: 
1.1.1.2   misho    1965:                                if (ce->get_static_method) {
                   1966:                                        EX(fbc) = ce->get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method) TSRMLS_CC);
                   1967:                                } else {
                   1968:                                        EX(fbc) = zend_std_get_static_method(ce, Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1969:                                }
                   1970:                        } else {
                   1971:                                EX(object) = *obj;
                   1972:                                ce = EX(called_scope) = Z_OBJCE_PP(obj);
1.1       misho    1973: 
1.1.1.2   misho    1974:                                EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), Z_STRVAL_PP(method), Z_STRLEN_PP(method), NULL TSRMLS_CC);
                   1975:                                if (UNEXPECTED(EX(fbc) == NULL)) {
                   1976:                                        zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), Z_STRVAL_PP(method));
                   1977:                                }
1.1       misho    1978: 
1.1.1.2   misho    1979:                                if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   1980:                                        EX(object) = NULL;
                   1981:                                } else {
                   1982:                                        if (!PZVAL_IS_REF(EX(object))) {
                   1983:                                                Z_ADDREF_P(EX(object)); /* For $this pointer */
                   1984:                                        } else {
                   1985:                                                zval *this_ptr;
                   1986:                                                ALLOC_ZVAL(this_ptr);
                   1987:                                                INIT_PZVAL_COPY(this_ptr, EX(object));
                   1988:                                                zval_copy_ctor(this_ptr);
                   1989:                                                EX(object) = this_ptr;
                   1990:                                        }
                   1991:                                }
1.1       misho    1992:                        }
                   1993: 
1.1.1.2   misho    1994:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   1995:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, Z_STRVAL_PP(method));
                   1996:                        }
                   1997: 
                   1998:                        CHECK_EXCEPTION();
                   1999:                        ZEND_VM_NEXT_OPCODE();
                   2000:                } else {
                   2001:                        zend_error_noreturn(E_ERROR, "Function name must be a string");
1.1       misho    2002:                }
                   2003:        }
                   2004: }
                   2005: 
                   2006: 
                   2007: static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2008: {
1.1.1.2   misho    2009:        USE_OPLINE
1.1       misho    2010: 
                   2011: 
1.1.1.2   misho    2012:        SAVE_OPLINE();
                   2013:        bitwise_not_function(&EX_T(opline->result.var).tmp_var,
                   2014:                opline->op1.zv TSRMLS_CC);
1.1       misho    2015: 
1.1.1.2   misho    2016:        CHECK_EXCEPTION();
1.1       misho    2017:        ZEND_VM_NEXT_OPCODE();
                   2018: }
                   2019: 
                   2020: static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2021: {
1.1.1.2   misho    2022:        USE_OPLINE
1.1       misho    2023: 
                   2024: 
1.1.1.2   misho    2025:        SAVE_OPLINE();
                   2026:        boolean_not_function(&EX_T(opline->result.var).tmp_var,
                   2027:                opline->op1.zv TSRMLS_CC);
1.1       misho    2028: 
1.1.1.2   misho    2029:        CHECK_EXCEPTION();
1.1       misho    2030:        ZEND_VM_NEXT_OPCODE();
                   2031: }
                   2032: 
                   2033: static int ZEND_FASTCALL  ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2034: {
1.1.1.2   misho    2035:        USE_OPLINE
1.1       misho    2036: 
1.1.1.2   misho    2037:        zval *z;
                   2038: 
                   2039:        SAVE_OPLINE();
                   2040:        z = opline->op1.zv;
1.1       misho    2041: 
1.1.1.3   misho    2042:        if (IS_CONST == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
                   2043:                INIT_PZVAL(z);
1.1       misho    2044:        }
1.1.1.3   misho    2045:        zend_print_variable(z);
1.1       misho    2046: 
1.1.1.2   misho    2047:        CHECK_EXCEPTION();
1.1       misho    2048:        ZEND_VM_NEXT_OPCODE();
                   2049: }
                   2050: 
                   2051: static int ZEND_FASTCALL  ZEND_PRINT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2052: {
1.1.1.2   misho    2053:        USE_OPLINE
1.1       misho    2054: 
1.1.1.2   misho    2055:        ZVAL_LONG(&EX_T(opline->result.var).tmp_var, 1);
1.1       misho    2056:        return ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   2057: }
                   2058: 
                   2059: static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2060: {
1.1.1.2   misho    2061:        USE_OPLINE
1.1       misho    2062: 
1.1.1.2   misho    2063:        zval *val;
1.1       misho    2064:        int ret;
                   2065: 
1.1.1.2   misho    2066:        SAVE_OPLINE();
                   2067:        val = opline->op1.zv;
                   2068: 
                   2069:        if (IS_CONST == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    2070:                ret = Z_LVAL_P(val);
                   2071:        } else {
                   2072:                ret = i_zend_is_true(val);
                   2073: 
                   2074:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    2075:                        HANDLE_EXCEPTION();
1.1       misho    2076:                }
                   2077:        }
                   2078:        if (!ret) {
                   2079: #if DEBUG_ZEND>=2
1.1.1.2   misho    2080:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2081: #endif
1.1.1.2   misho    2082:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    2083:                ZEND_VM_CONTINUE();
                   2084:        }
                   2085: 
                   2086:        ZEND_VM_NEXT_OPCODE();
                   2087: }
                   2088: 
                   2089: static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2090: {
1.1.1.2   misho    2091:        USE_OPLINE
1.1       misho    2092: 
1.1.1.2   misho    2093:        zval *val;
1.1       misho    2094:        int ret;
                   2095: 
1.1.1.2   misho    2096:        SAVE_OPLINE();
                   2097:        val = opline->op1.zv;
                   2098: 
                   2099:        if (IS_CONST == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    2100:                ret = Z_LVAL_P(val);
                   2101:        } else {
                   2102:                ret = i_zend_is_true(val);
                   2103: 
                   2104:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    2105:                        HANDLE_EXCEPTION();
1.1       misho    2106:                }
                   2107:        }
                   2108:        if (ret) {
                   2109: #if DEBUG_ZEND>=2
1.1.1.2   misho    2110:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2111: #endif
1.1.1.2   misho    2112:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    2113:                ZEND_VM_CONTINUE();
                   2114:        }
                   2115: 
                   2116:        ZEND_VM_NEXT_OPCODE();
                   2117: }
                   2118: 
                   2119: static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2120: {
1.1.1.2   misho    2121:        USE_OPLINE
1.1       misho    2122: 
1.1.1.2   misho    2123:        zval *val;
1.1       misho    2124:        int retval;
                   2125: 
1.1.1.2   misho    2126:        SAVE_OPLINE();
                   2127:        val = opline->op1.zv;
                   2128: 
                   2129:        if (IS_CONST == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    2130:                retval = Z_LVAL_P(val);
                   2131:        } else {
                   2132:                retval = i_zend_is_true(val);
                   2133: 
                   2134:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    2135:                        HANDLE_EXCEPTION();
1.1       misho    2136:                }
                   2137:        }
                   2138:        if (EXPECTED(retval != 0)) {
                   2139: #if DEBUG_ZEND>=2
                   2140:                printf("Conditional jmp on true to %d\n", opline->extended_value);
                   2141: #endif
                   2142:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   2143:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   2144:        } else {
                   2145: #if DEBUG_ZEND>=2
1.1.1.2   misho    2146:                printf("Conditional jmp on false to %d\n", opline->op2.opline_num);
1.1       misho    2147: #endif
1.1.1.2   misho    2148:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
1.1       misho    2149:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   2150:        }
                   2151: }
                   2152: 
                   2153: static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2154: {
1.1.1.2   misho    2155:        USE_OPLINE
1.1       misho    2156: 
1.1.1.2   misho    2157:        zval *val;
1.1       misho    2158:        int retval;
                   2159: 
1.1.1.2   misho    2160:        SAVE_OPLINE();
                   2161:        val = opline->op1.zv;
                   2162: 
                   2163:        if (IS_CONST == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    2164:                retval = Z_LVAL_P(val);
                   2165:        } else {
                   2166:                retval = i_zend_is_true(val);
                   2167: 
                   2168:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    2169:                        HANDLE_EXCEPTION();
1.1       misho    2170:                }
                   2171:        }
1.1.1.2   misho    2172:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   2173:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    2174:        if (!retval) {
                   2175: #if DEBUG_ZEND>=2
1.1.1.2   misho    2176:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2177: #endif
1.1.1.2   misho    2178:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    2179:                ZEND_VM_CONTINUE();
                   2180:        }
                   2181:        ZEND_VM_NEXT_OPCODE();
                   2182: }
                   2183: 
                   2184: static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2185: {
1.1.1.2   misho    2186:        USE_OPLINE
1.1       misho    2187: 
1.1.1.2   misho    2188:        zval *val;
1.1       misho    2189:        int retval;
                   2190: 
1.1.1.2   misho    2191:        SAVE_OPLINE();
                   2192:        val = opline->op1.zv;
                   2193: 
                   2194:        if (IS_CONST == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    2195:                retval = Z_LVAL_P(val);
                   2196:        } else {
                   2197:                retval = i_zend_is_true(val);
                   2198: 
                   2199:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    2200:                        HANDLE_EXCEPTION();
1.1       misho    2201:                }
                   2202:        }
1.1.1.2   misho    2203:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   2204:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    2205:        if (retval) {
                   2206: #if DEBUG_ZEND>=2
1.1.1.2   misho    2207:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2208: #endif
1.1.1.2   misho    2209:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    2210:                ZEND_VM_CONTINUE();
                   2211:        }
                   2212:        ZEND_VM_NEXT_OPCODE();
                   2213: }
                   2214: 
                   2215: static int ZEND_FASTCALL  ZEND_DO_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2216: {
1.1.1.2   misho    2217:        USE_OPLINE
1.1       misho    2218: 
1.1.1.2   misho    2219:        zval *fname = opline->op1.zv;
1.1       misho    2220: 
                   2221:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   2222: 
1.1.1.2   misho    2223:        if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   2224:                EX(function_state).function = CACHED_PTR(opline->op1.literal->cache_slot);
                   2225:        } else if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(fname), Z_STRLEN_P(fname)+1, Z_HASH_P(fname), (void **) &EX(function_state).function)==FAILURE)) {
                   2226:            SAVE_OPLINE();
1.1       misho    2227:                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", fname->value.str.val);
1.1.1.2   misho    2228:        } else {
                   2229:                CACHE_PTR(opline->op1.literal->cache_slot, EX(function_state).function);
1.1       misho    2230:        }
                   2231:        EX(object) = NULL;
                   2232: 
                   2233:        return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   2234: }
                   2235: 
                   2236: static int ZEND_FASTCALL  ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2237: {
1.1.1.2   misho    2238:        USE_OPLINE
1.1       misho    2239:        zval *retval_ptr;
                   2240: 
                   2241: 
1.1.1.2   misho    2242:        SAVE_OPLINE();
                   2243:        retval_ptr = opline->op1.zv;
                   2244: 
                   2245:        if (!EG(return_value_ptr_ptr)) {
                   2246:                if (IS_CONST == IS_TMP_VAR) {
1.1       misho    2247: 
                   2248:                }
1.1.1.2   misho    2249:        } else if (!0) { /* Not a temp var */
                   2250:                if (IS_CONST == IS_CONST ||
                   2251:                    (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) {
                   2252:                        zval *ret;
1.1       misho    2253: 
1.1.1.2   misho    2254:                        ALLOC_ZVAL(ret);
                   2255:                        INIT_PZVAL_COPY(ret, retval_ptr);
                   2256:                        zval_copy_ctor(ret);
                   2257:                        *EG(return_value_ptr_ptr) = ret;
                   2258:                } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) &&
                   2259:                           retval_ptr == &EG(uninitialized_zval)) {
                   2260:                        zval *ret;
1.1       misho    2261: 
1.1.1.2   misho    2262:                        ALLOC_INIT_ZVAL(ret);
                   2263:                        *EG(return_value_ptr_ptr) = ret;
                   2264:                } else {
                   2265:                        *EG(return_value_ptr_ptr) = retval_ptr;
                   2266:                        Z_ADDREF_P(retval_ptr);
1.1       misho    2267:                }
1.1.1.2   misho    2268:        } else {
                   2269:                zval *ret;
1.1       misho    2270: 
1.1.1.2   misho    2271:                ALLOC_ZVAL(ret);
                   2272:                INIT_PZVAL_COPY(ret, retval_ptr);
                   2273:                *EG(return_value_ptr_ptr) = ret;
                   2274:        }
1.1       misho    2275: 
1.1.1.2   misho    2276:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   2277: }
1.1       misho    2278: 
1.1.1.2   misho    2279: static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2280: {
                   2281:        USE_OPLINE
                   2282:        zval *retval_ptr;
                   2283:        zval **retval_ptr_ptr;
1.1       misho    2284: 
                   2285: 
1.1.1.2   misho    2286:        SAVE_OPLINE();
1.1       misho    2287: 
1.1.1.2   misho    2288:        do {
                   2289:                if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
                   2290:                        /* Not supposed to happen, but we'll allow it */
                   2291:                        zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   2292: 
                   2293:                        retval_ptr = opline->op1.zv;
                   2294:                        if (!EG(return_value_ptr_ptr)) {
                   2295:                                if (IS_CONST == IS_TMP_VAR) {
                   2296: 
                   2297:                                }
                   2298:                        } else if (!0) { /* Not a temp var */
1.1       misho    2299:                                zval *ret;
                   2300: 
                   2301:                                ALLOC_ZVAL(ret);
                   2302:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   2303:                                zval_copy_ctor(ret);
                   2304:                                *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    2305:                        } else {
1.1       misho    2306:                                zval *ret;
                   2307: 
1.1.1.2   misho    2308:                                ALLOC_ZVAL(ret);
                   2309:                                INIT_PZVAL_COPY(ret, retval_ptr);
1.1       misho    2310:                                *EG(return_value_ptr_ptr) = ret;
                   2311:                        }
1.1.1.2   misho    2312:                        break;
                   2313:                }
1.1       misho    2314: 
1.1.1.2   misho    2315:                retval_ptr_ptr = NULL;
                   2316: 
                   2317:                if (IS_CONST == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
                   2318:                        zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
1.1       misho    2319:                }
1.1.1.2   misho    2320: 
                   2321:                if (IS_CONST == IS_VAR && !Z_ISREF_PP(retval_ptr_ptr)) {
                   2322:                        if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
                   2323:                            EX_T(opline->op1.var).var.fcall_returned_reference) {
                   2324:                        } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
                   2325:                                zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   2326:                                if (EG(return_value_ptr_ptr)) {
1.1.1.4   misho    2327:                                        zval *ret;
                   2328: 
                   2329:                                        ALLOC_ZVAL(ret);
                   2330:                                        INIT_PZVAL_COPY(ret, *retval_ptr_ptr);
                   2331:                                        zval_copy_ctor(ret);
                   2332:                                        *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    2333:                                }
                   2334:                                break;
                   2335:                        }
                   2336:                }
                   2337: 
                   2338:                if (EG(return_value_ptr_ptr)) {
                   2339:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
                   2340:                        Z_ADDREF_PP(retval_ptr_ptr);
                   2341: 
                   2342:                        *EG(return_value_ptr_ptr) = *retval_ptr_ptr;
                   2343:                }
                   2344:        } while (0);
1.1       misho    2345: 
                   2346:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   2347: }
                   2348: 
                   2349: static int ZEND_FASTCALL  ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2350: {
1.1.1.2   misho    2351:        USE_OPLINE
1.1       misho    2352:        zval *value;
                   2353:        zval *exception;
                   2354: 
                   2355: 
1.1.1.2   misho    2356:        SAVE_OPLINE();
                   2357:        value = opline->op1.zv;
1.1       misho    2358: 
1.1.1.2   misho    2359:        if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
1.1       misho    2360:                zend_error_noreturn(E_ERROR, "Can only throw objects");
                   2361:        }
                   2362:        zend_exception_save(TSRMLS_C);
                   2363:        /* Not sure if a complete copy is what we want here */
                   2364:        ALLOC_ZVAL(exception);
                   2365:        INIT_PZVAL_COPY(exception, value);
                   2366:        if (!0) {
                   2367:                zval_copy_ctor(exception);
                   2368:        }
                   2369: 
                   2370:        zend_throw_exception_object(exception TSRMLS_CC);
                   2371:        zend_exception_restore(TSRMLS_C);
                   2372: 
1.1.1.2   misho    2373:        HANDLE_EXCEPTION();
1.1       misho    2374: }
                   2375: 
                   2376: static int ZEND_FASTCALL  ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2377: {
1.1.1.2   misho    2378:        USE_OPLINE
                   2379: 
                   2380:        SAVE_OPLINE();
1.1       misho    2381:        if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
1.1.1.2   misho    2382:                && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
                   2383:                        zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.opline_num);
1.1       misho    2384:        }
                   2385:        {
                   2386:                zval *valptr;
                   2387:                zval *value;
                   2388: 
                   2389: 
1.1.1.2   misho    2390:                value = opline->op1.zv;
1.1       misho    2391: 
                   2392:                ALLOC_ZVAL(valptr);
                   2393:                INIT_PZVAL_COPY(valptr, value);
                   2394:                if (!0) {
                   2395:                        zval_copy_ctor(valptr);
                   2396:                }
                   2397:                zend_vm_stack_push(valptr TSRMLS_CC);
                   2398: 
                   2399:        }
1.1.1.2   misho    2400:        CHECK_EXCEPTION();
1.1       misho    2401:        ZEND_VM_NEXT_OPCODE();
                   2402: }
                   2403: 
                   2404: static int ZEND_FASTCALL  ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2405: {
1.1.1.2   misho    2406:        USE_OPLINE
1.1       misho    2407: 
1.1.1.2   misho    2408:        zval *retval = &EX_T(opline->result.var).tmp_var;
1.1       misho    2409: 
1.1.1.2   misho    2410:        SAVE_OPLINE();
1.1       misho    2411:        /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
1.1.1.2   misho    2412:        ZVAL_BOOL(retval, i_zend_is_true(opline->op1.zv));
1.1       misho    2413: 
1.1.1.2   misho    2414:        CHECK_EXCEPTION();
1.1       misho    2415:        ZEND_VM_NEXT_OPCODE();
                   2416: }
                   2417: 
                   2418: static int ZEND_FASTCALL  ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2419: {
1.1.1.2   misho    2420:        USE_OPLINE
1.1       misho    2421: 
1.1.1.2   misho    2422:        zval *obj;
1.1       misho    2423:        zend_class_entry *ce;
                   2424:        zend_function *clone;
                   2425:        zend_object_clone_obj_t clone_call;
                   2426: 
1.1.1.2   misho    2427:        SAVE_OPLINE();
                   2428:        obj = opline->op1.zv;
                   2429: 
1.1       misho    2430:        if (IS_CONST == IS_CONST ||
1.1.1.2   misho    2431:            UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT)) {
1.1       misho    2432:                zend_error_noreturn(E_ERROR, "__clone method called on non-object");
                   2433:        }
                   2434: 
                   2435:        ce = Z_OBJCE_P(obj);
                   2436:        clone = ce ? ce->clone : NULL;
                   2437:        clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
1.1.1.2   misho    2438:        if (UNEXPECTED(clone_call == NULL)) {
1.1       misho    2439:                if (ce) {
                   2440:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
                   2441:                } else {
                   2442:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
                   2443:                }
                   2444:        }
                   2445: 
                   2446:        if (ce && clone) {
                   2447:                if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
                   2448:                        /* Ensure that if we're calling a private function, we're allowed to do so.
                   2449:                         */
1.1.1.2   misho    2450:                        if (UNEXPECTED(ce != EG(scope))) {
1.1       misho    2451:                                zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   2452:                        }
                   2453:                } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
                   2454:                        /* Ensure that if we're calling a protected function, we're allowed to do so.
                   2455:                         */
1.1.1.3   misho    2456:                        if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
1.1       misho    2457:                                zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   2458:                        }
                   2459:                }
                   2460:        }
                   2461: 
1.1.1.2   misho    2462:        if (EXPECTED(EG(exception) == NULL)) {
                   2463:                zval *retval;
                   2464: 
                   2465:                ALLOC_ZVAL(retval);
                   2466:                Z_OBJVAL_P(retval) = clone_call(obj TSRMLS_CC);
                   2467:                Z_TYPE_P(retval) = IS_OBJECT;
                   2468:                Z_SET_REFCOUNT_P(retval, 1);
                   2469:                Z_SET_ISREF_P(retval);
                   2470:                if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
                   2471:                        zval_ptr_dtor(&retval);
                   2472:                } else {
                   2473:                        AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    2474:                }
                   2475:        }
                   2476: 
1.1.1.2   misho    2477:        CHECK_EXCEPTION();
1.1       misho    2478:        ZEND_VM_NEXT_OPCODE();
                   2479: }
                   2480: 
                   2481: static int ZEND_FASTCALL  ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2482: {
1.1.1.2   misho    2483:        USE_OPLINE
                   2484: 
                   2485:        zval *expr;
                   2486:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    2487: 
1.1.1.2   misho    2488:        SAVE_OPLINE();
                   2489:        expr = opline->op1.zv;
1.1       misho    2490: 
                   2491:        if (opline->extended_value != IS_STRING) {
1.1.1.2   misho    2492:                ZVAL_COPY_VALUE(result, expr);
1.1       misho    2493:                if (!0) {
                   2494:                        zendi_zval_copy_ctor(*result);
                   2495:                }
                   2496:        }
                   2497:        switch (opline->extended_value) {
                   2498:                case IS_NULL:
                   2499:                        convert_to_null(result);
                   2500:                        break;
                   2501:                case IS_BOOL:
                   2502:                        convert_to_boolean(result);
                   2503:                        break;
                   2504:                case IS_LONG:
                   2505:                        convert_to_long(result);
                   2506:                        break;
                   2507:                case IS_DOUBLE:
                   2508:                        convert_to_double(result);
                   2509:                        break;
                   2510:                case IS_STRING: {
                   2511:                        zval var_copy;
                   2512:                        int use_copy;
                   2513: 
                   2514:                        zend_make_printable_zval(expr, &var_copy, &use_copy);
                   2515:                        if (use_copy) {
1.1.1.2   misho    2516:                                ZVAL_COPY_VALUE(result, &var_copy);
1.1       misho    2517:                                if (0) {
                   2518: 
                   2519:                                }
                   2520:                        } else {
1.1.1.2   misho    2521:                                ZVAL_COPY_VALUE(result, expr);
1.1       misho    2522:                                if (!0) {
                   2523:                                        zendi_zval_copy_ctor(*result);
                   2524:                                }
                   2525:                        }
                   2526:                        break;
                   2527:                }
                   2528:                case IS_ARRAY:
                   2529:                        convert_to_array(result);
                   2530:                        break;
                   2531:                case IS_OBJECT:
                   2532:                        convert_to_object(result);
                   2533:                        break;
                   2534:        }
                   2535: 
1.1.1.2   misho    2536:        CHECK_EXCEPTION();
1.1       misho    2537:        ZEND_VM_NEXT_OPCODE();
                   2538: }
                   2539: 
                   2540: static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2541: {
1.1.1.2   misho    2542:        USE_OPLINE
1.1       misho    2543:        zend_op_array *new_op_array=NULL;
                   2544: 
1.1.1.2   misho    2545:        zval *inc_filename;
                   2546:     zval *tmp_inc_filename = NULL;
1.1       misho    2547:        zend_bool failure_retval=0;
                   2548: 
1.1.1.2   misho    2549:        SAVE_OPLINE();
                   2550:        inc_filename = opline->op1.zv;
                   2551: 
1.1       misho    2552:        if (inc_filename->type!=IS_STRING) {
1.1.1.2   misho    2553:                MAKE_STD_ZVAL(tmp_inc_filename);
                   2554:                ZVAL_COPY_VALUE(tmp_inc_filename, inc_filename);
                   2555:                zval_copy_ctor(tmp_inc_filename);
                   2556:                convert_to_string(tmp_inc_filename);
                   2557:                inc_filename = tmp_inc_filename;
1.1       misho    2558:        }
                   2559: 
1.1.1.2   misho    2560:        if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
                   2561:                if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
1.1       misho    2562:                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   2563:                } else {
                   2564:                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   2565:                }
                   2566:        } else {
1.1.1.2   misho    2567:                switch (opline->extended_value) {
1.1       misho    2568:                        case ZEND_INCLUDE_ONCE:
                   2569:                        case ZEND_REQUIRE_ONCE: {
                   2570:                                        zend_file_handle file_handle;
                   2571:                                        char *resolved_path;
                   2572: 
                   2573:                                        resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
                   2574:                                        if (resolved_path) {
                   2575:                                                failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
                   2576:                                        } else {
                   2577:                                                resolved_path = Z_STRVAL_P(inc_filename);
                   2578:                                        }
                   2579: 
                   2580:                                        if (failure_retval) {
                   2581:                                                /* do nothing, file already included */
                   2582:                                        } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
                   2583: 
                   2584:                                                if (!file_handle.opened_path) {
                   2585:                                                        file_handle.opened_path = estrdup(resolved_path);
                   2586:                                                }
                   2587: 
                   2588:                                                if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
1.1.1.2   misho    2589:                                                        new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
1.1       misho    2590:                                                        zend_destroy_file_handle(&file_handle TSRMLS_CC);
                   2591:                                                } else {
                   2592:                                                        zend_file_handle_dtor(&file_handle TSRMLS_CC);
                   2593:                                                        failure_retval=1;
                   2594:                                                }
                   2595:                                        } else {
1.1.1.2   misho    2596:                                                if (opline->extended_value == ZEND_INCLUDE_ONCE) {
1.1       misho    2597:                                                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   2598:                                                } else {
                   2599:                                                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   2600:                                                }
                   2601:                                        }
                   2602:                                        if (resolved_path != Z_STRVAL_P(inc_filename)) {
                   2603:                                                efree(resolved_path);
                   2604:                                        }
                   2605:                                }
                   2606:                                break;
                   2607:                        case ZEND_INCLUDE:
                   2608:                        case ZEND_REQUIRE:
1.1.1.2   misho    2609:                                new_op_array = compile_filename(opline->extended_value, inc_filename TSRMLS_CC);
1.1       misho    2610:                                break;
                   2611:                        case ZEND_EVAL: {
                   2612:                                        char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
                   2613: 
                   2614:                                        new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
                   2615:                                        efree(eval_desc);
                   2616:                                }
                   2617:                                break;
                   2618:                        EMPTY_SWITCH_DEFAULT_CASE()
                   2619:                }
                   2620:        }
1.1.1.2   misho    2621:        if (tmp_inc_filename) {
                   2622:                zval_ptr_dtor(&tmp_inc_filename);
1.1       misho    2623:        }
                   2624: 
1.1.1.2   misho    2625:        if (UNEXPECTED(EG(exception) != NULL)) {
                   2626:                HANDLE_EXCEPTION();
                   2627:        } else if (EXPECTED(new_op_array != NULL)) {
1.1       misho    2628:                EX(original_return_value) = EG(return_value_ptr_ptr);
                   2629:                EG(active_op_array) = new_op_array;
1.1.1.2   misho    2630:                if (RETURN_VALUE_USED(opline)) {
                   2631:                        EX_T(opline->result.var).var.ptr = NULL;
                   2632:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   2633:                        EG(return_value_ptr_ptr) = EX_T(opline->result.var).var.ptr_ptr;
                   2634:                } else {
                   2635:                        EG(return_value_ptr_ptr) = NULL;
                   2636:                }
1.1       misho    2637: 
                   2638:                EX(current_object) = EX(object);
                   2639: 
                   2640:                EX(function_state).function = (zend_function *) new_op_array;
                   2641:                EX(object) = NULL;
                   2642: 
                   2643:                if (!EG(active_symbol_table)) {
                   2644:                        zend_rebuild_symbol_table(TSRMLS_C);
                   2645:                }
                   2646: 
1.1.1.2   misho    2647:                if (EXPECTED(zend_execute == execute)) {
1.1       misho    2648:                        ZEND_VM_ENTER();
                   2649:                } else {
                   2650:                        zend_execute(new_op_array TSRMLS_CC);
                   2651:                }
                   2652: 
                   2653:                EX(function_state).function = (zend_function *) EX(op_array);
                   2654:                EX(object) = EX(current_object);
                   2655: 
                   2656:                EG(opline_ptr) = &EX(opline);
                   2657:                EG(active_op_array) = EX(op_array);
                   2658:                EG(return_value_ptr_ptr) = EX(original_return_value);
                   2659:                destroy_op_array(new_op_array TSRMLS_CC);
                   2660:                efree(new_op_array);
1.1.1.2   misho    2661:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    2662:                        zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho    2663:                        HANDLE_EXCEPTION();
                   2664:                } else if (RETURN_VALUE_USED(opline)) {
                   2665:                        if (!EX_T(opline->result.var).var.ptr) { /* there was no return statement */
                   2666:                                zval *retval;
                   2667: 
                   2668:                                ALLOC_ZVAL(retval);
                   2669:                                ZVAL_BOOL(retval, 1);
                   2670:                                INIT_PZVAL(retval);
                   2671:                                EX_T(opline->result.var).var.ptr = retval;
                   2672:                        }
1.1       misho    2673:                }
                   2674: 
1.1.1.2   misho    2675:        } else if (RETURN_VALUE_USED(opline)) {
                   2676:                zval *retval;
1.1       misho    2677: 
1.1.1.2   misho    2678:                ALLOC_ZVAL(retval);
                   2679:                ZVAL_BOOL(retval, failure_retval);
                   2680:                INIT_PZVAL(retval);
                   2681:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    2682:        }
                   2683:        ZEND_VM_NEXT_OPCODE();
                   2684: }
                   2685: 
                   2686: static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2687: {
1.1.1.2   misho    2688:        USE_OPLINE
1.1       misho    2689: 
                   2690:        zval *array_ptr, **array_ptr_ptr;
                   2691:        HashTable *fe_ht;
                   2692:        zend_object_iterator *iter = NULL;
                   2693:        zend_class_entry *ce = NULL;
                   2694:        zend_bool is_empty = 0;
                   2695: 
1.1.1.2   misho    2696:        SAVE_OPLINE();
                   2697: 
                   2698:        if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) &&
                   2699:            (opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
1.1       misho    2700:                array_ptr_ptr = NULL;
                   2701:                if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
1.1.1.2   misho    2702:                        MAKE_STD_ZVAL(array_ptr);
                   2703:                        ZVAL_NULL(array_ptr);
1.1       misho    2704:                } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
                   2705:                        if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
                   2706:                                zend_error(E_WARNING, "foreach() cannot iterate over objects without PHP class");
1.1.1.2   misho    2707:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    2708:                        }
                   2709: 
                   2710:                        ce = Z_OBJCE_PP(array_ptr_ptr);
                   2711:                        if (!ce || ce->get_iterator == NULL) {
                   2712:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   2713:                                Z_ADDREF_PP(array_ptr_ptr);
                   2714:                        }
                   2715:                        array_ptr = *array_ptr_ptr;
                   2716:                } else {
                   2717:                        if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
                   2718:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   2719:                                if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
                   2720:                                        Z_SET_ISREF_PP(array_ptr_ptr);
                   2721:                                }
                   2722:                        }
                   2723:                        array_ptr = *array_ptr_ptr;
                   2724:                        Z_ADDREF_P(array_ptr);
                   2725:                }
                   2726:        } else {
1.1.1.2   misho    2727:                array_ptr = opline->op1.zv;
1.1       misho    2728:                if (0) { /* IS_TMP_VAR */
                   2729:                        zval *tmp;
                   2730: 
                   2731:                        ALLOC_ZVAL(tmp);
                   2732:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   2733:                        array_ptr = tmp;
                   2734:                        if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   2735:                                ce = Z_OBJCE_P(array_ptr);
                   2736:                                if (ce && ce->get_iterator) {
                   2737:                                        Z_DELREF_P(array_ptr);
                   2738:                                }
                   2739:                        }
                   2740:                } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   2741:                        ce = Z_OBJCE_P(array_ptr);
                   2742:                        if (!ce || !ce->get_iterator) {
                   2743:                                Z_ADDREF_P(array_ptr);
                   2744:                        }
                   2745:                } else if (IS_CONST == IS_CONST ||
                   2746:                           ((IS_CONST == IS_CV || IS_CONST == IS_VAR) &&
                   2747:                            !Z_ISREF_P(array_ptr) &&
                   2748:                            Z_REFCOUNT_P(array_ptr) > 1)) {
                   2749:                        zval *tmp;
                   2750: 
                   2751:                        ALLOC_ZVAL(tmp);
                   2752:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   2753:                        zval_copy_ctor(tmp);
                   2754:                        array_ptr = tmp;
                   2755:                } else {
                   2756:                        Z_ADDREF_P(array_ptr);
                   2757:                }
                   2758:        }
                   2759: 
                   2760:        if (ce && ce->get_iterator) {
                   2761:                iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
                   2762: 
1.1.1.2   misho    2763:                if (iter && EXPECTED(EG(exception) == NULL)) {
1.1       misho    2764:                        array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
                   2765:                } else {
                   2766: 
                   2767:                        if (!EG(exception)) {
                   2768:                                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
                   2769:                        }
                   2770:                        zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho    2771:                        HANDLE_EXCEPTION();
1.1       misho    2772:                }
                   2773:        }
                   2774: 
1.1.1.2   misho    2775:        EX_T(opline->result.var).fe.ptr = array_ptr;
1.1       misho    2776: 
                   2777:        if (iter) {
                   2778:                iter->index = 0;
                   2779:                if (iter->funcs->rewind) {
                   2780:                        iter->funcs->rewind(iter TSRMLS_CC);
1.1.1.2   misho    2781:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    2782:                                zval_ptr_dtor(&array_ptr);
                   2783: 
1.1.1.2   misho    2784:                                HANDLE_EXCEPTION();
1.1       misho    2785:                        }
                   2786:                }
                   2787:                is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
1.1.1.2   misho    2788:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    2789:                        zval_ptr_dtor(&array_ptr);
                   2790: 
1.1.1.2   misho    2791:                        HANDLE_EXCEPTION();
1.1       misho    2792:                }
                   2793:                iter->index = -1; /* will be set to 0 before using next handler */
                   2794:        } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
                   2795:                zend_hash_internal_pointer_reset(fe_ht);
                   2796:                if (ce) {
                   2797:                        zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
                   2798:                        while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
                   2799:                                char *str_key;
                   2800:                                uint str_key_len;
                   2801:                                ulong int_key;
                   2802:                                zend_uchar key_type;
                   2803: 
                   2804:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
                   2805:                                if (key_type != HASH_KEY_NON_EXISTANT &&
                   2806:                                        (key_type == HASH_KEY_IS_LONG ||
                   2807:                                     zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
                   2808:                                        break;
                   2809:                                }
                   2810:                                zend_hash_move_forward(fe_ht);
                   2811:                        }
                   2812:                }
                   2813:                is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
1.1.1.2   misho    2814:                zend_hash_get_pointer(fe_ht, &EX_T(opline->result.var).fe.fe_pos);
1.1       misho    2815:        } else {
                   2816:                zend_error(E_WARNING, "Invalid argument supplied for foreach()");
                   2817:                is_empty = 1;
                   2818:        }
                   2819: 
                   2820:        if (is_empty) {
1.1.1.2   misho    2821:                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    2822:        } else {
1.1.1.2   misho    2823:                CHECK_EXCEPTION();
1.1       misho    2824:                ZEND_VM_NEXT_OPCODE();
                   2825:        }
                   2826: }
                   2827: 
1.1.1.2   misho    2828: static int ZEND_FASTCALL  ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    2829: {
1.1.1.2   misho    2830: #if 0 || (IS_CONST != IS_UNUSED)
                   2831:        USE_OPLINE
1.1       misho    2832: 
1.1.1.2   misho    2833:        SAVE_OPLINE();
                   2834:        if (IS_CONST != IS_UNUSED) {
1.1       misho    2835: 
1.1.1.2   misho    2836:                zval *ptr = opline->op1.zv;
1.1       misho    2837: 
1.1.1.2   misho    2838:                if (Z_TYPE_P(ptr) == IS_LONG) {
                   2839:                        EG(exit_status) = Z_LVAL_P(ptr);
1.1       misho    2840:                } else {
1.1.1.2   misho    2841:                        zend_print_variable(ptr);
1.1       misho    2842:                }
                   2843: 
                   2844:        }
1.1.1.2   misho    2845: #endif
                   2846:        zend_bailout();
                   2847:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
1.1       misho    2848: }
                   2849: 
1.1.1.2   misho    2850: static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    2851: {
1.1.1.2   misho    2852:        USE_OPLINE
1.1       misho    2853: 
1.1.1.2   misho    2854:        zval *value;
1.1       misho    2855: 
1.1.1.2   misho    2856:        SAVE_OPLINE();
                   2857:        value = opline->op1.zv;
                   2858: 
                   2859:        if (i_zend_is_true(value)) {
                   2860:                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   2861:                if (!0) {
                   2862:                        zendi_zval_copy_ctor(EX_T(opline->result.var).tmp_var);
1.1       misho    2863:                }
                   2864: 
1.1.1.2   misho    2865: #if DEBUG_ZEND>=2
                   2866:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2867: #endif
1.1.1.2   misho    2868:                ZEND_VM_JMP(opline->op2.jmp_addr);
                   2869:        }
                   2870: 
                   2871:        CHECK_EXCEPTION();
1.1       misho    2872:        ZEND_VM_NEXT_OPCODE();
                   2873: }
                   2874: 
1.1.1.2   misho    2875: static int ZEND_FASTCALL  ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    2876: {
1.1.1.2   misho    2877:        USE_OPLINE
1.1       misho    2878: 
1.1.1.2   misho    2879:        zval *value, *ret;
                   2880: 
                   2881:        SAVE_OPLINE();
                   2882:        value = opline->op1.zv;
1.1       misho    2883: 
                   2884:        if (i_zend_is_true(value)) {
1.1.1.2   misho    2885:                if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   2886:                        Z_ADDREF_P(value);
                   2887:                        EX_T(opline->result.var).var.ptr = value;
                   2888:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   2889:                } else {
                   2890:                        ALLOC_ZVAL(ret);
                   2891:                        INIT_PZVAL_COPY(ret, value);
                   2892:                        EX_T(opline->result.var).var.ptr = ret;
                   2893:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   2894:                        if (!0) {
                   2895:                                zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   2896:                        }
                   2897:                }
1.1       misho    2898: 
                   2899: #if DEBUG_ZEND>=2
1.1.1.2   misho    2900:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    2901: #endif
1.1.1.2   misho    2902:                ZEND_VM_JMP(opline->op2.jmp_addr);
1.1       misho    2903:        }
                   2904: 
1.1.1.2   misho    2905:        CHECK_EXCEPTION();
1.1       misho    2906:        ZEND_VM_NEXT_OPCODE();
                   2907: }
                   2908: 
                   2909: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2910: {
1.1.1.2   misho    2911:        USE_OPLINE
                   2912: 
                   2913:        zval *value;
1.1       misho    2914: 
1.1.1.2   misho    2915:        SAVE_OPLINE();
                   2916:        value = opline->op1.zv;
1.1       misho    2917: 
1.1.1.2   misho    2918:        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
1.1       misho    2919:        if (!0) {
1.1.1.2   misho    2920:                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    2921:        }
                   2922: 
1.1.1.2   misho    2923:        CHECK_EXCEPTION();
1.1       misho    2924:        ZEND_VM_NEXT_OPCODE();
                   2925: }
                   2926: 
1.1.1.2   misho    2927: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    2928: {
1.1.1.2   misho    2929:        USE_OPLINE
1.1       misho    2930: 
1.1.1.2   misho    2931:        zval *value, *ret;
                   2932: 
                   2933:        SAVE_OPLINE();
                   2934:        value = opline->op1.zv;
                   2935: 
                   2936:        if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   2937:                Z_ADDREF_P(value);
                   2938:                EX_T(opline->result.var).var.ptr = value;
                   2939:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   2940:        } else {
                   2941:                ALLOC_ZVAL(ret);
                   2942:                INIT_PZVAL_COPY(ret, value);
                   2943:                EX_T(opline->result.var).var.ptr = ret;
                   2944:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   2945:                if (!0) {
                   2946:                        zval_copy_ctor(EX_T(opline->result.var).var.ptr);
1.1       misho    2947:                }
                   2948:        }
1.1.1.2   misho    2949: 
                   2950:        CHECK_EXCEPTION();
1.1       misho    2951:        ZEND_VM_NEXT_OPCODE();
                   2952: }
                   2953: 
                   2954: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2955: {
1.1.1.2   misho    2956:        USE_OPLINE
1.1       misho    2957: 
                   2958: 
1.1.1.2   misho    2959:        SAVE_OPLINE();
                   2960:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   2961:                opline->op1.zv,
                   2962:                opline->op2.zv TSRMLS_CC);
1.1       misho    2963: 
                   2964: 
1.1.1.2   misho    2965:        CHECK_EXCEPTION();
1.1       misho    2966:        ZEND_VM_NEXT_OPCODE();
                   2967: }
                   2968: 
                   2969: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2970: {
1.1.1.2   misho    2971:        USE_OPLINE
1.1       misho    2972: 
                   2973: 
1.1.1.2   misho    2974:        SAVE_OPLINE();
                   2975:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   2976:                opline->op1.zv,
                   2977:                opline->op2.zv TSRMLS_CC);
1.1       misho    2978: 
                   2979: 
1.1.1.2   misho    2980:        CHECK_EXCEPTION();
1.1       misho    2981:        ZEND_VM_NEXT_OPCODE();
                   2982: }
                   2983: 
                   2984: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   2985: {
1.1.1.2   misho    2986:        USE_OPLINE
1.1       misho    2987: 
                   2988: 
1.1.1.2   misho    2989:        SAVE_OPLINE();
                   2990:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   2991:                opline->op1.zv,
                   2992:                opline->op2.zv TSRMLS_CC);
1.1       misho    2993: 
                   2994: 
1.1.1.2   misho    2995:        CHECK_EXCEPTION();
1.1       misho    2996:        ZEND_VM_NEXT_OPCODE();
                   2997: }
                   2998: 
                   2999: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3000: {
1.1.1.2   misho    3001:        USE_OPLINE
1.1       misho    3002: 
                   3003: 
1.1.1.2   misho    3004:        SAVE_OPLINE();
                   3005:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   3006:                opline->op1.zv,
                   3007:                opline->op2.zv TSRMLS_CC);
1.1       misho    3008: 
                   3009: 
1.1.1.2   misho    3010:        CHECK_EXCEPTION();
1.1       misho    3011:        ZEND_VM_NEXT_OPCODE();
                   3012: }
                   3013: 
                   3014: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3015: {
1.1.1.2   misho    3016:        USE_OPLINE
1.1       misho    3017: 
                   3018: 
1.1.1.2   misho    3019:        SAVE_OPLINE();
                   3020:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   3021:                opline->op1.zv,
                   3022:                opline->op2.zv TSRMLS_CC);
1.1       misho    3023: 
                   3024: 
1.1.1.2   misho    3025:        CHECK_EXCEPTION();
1.1       misho    3026:        ZEND_VM_NEXT_OPCODE();
                   3027: }
                   3028: 
                   3029: static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3030: {
1.1.1.2   misho    3031:        USE_OPLINE
1.1       misho    3032: 
                   3033: 
1.1.1.2   misho    3034:        SAVE_OPLINE();
                   3035:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   3036:                opline->op1.zv,
                   3037:                opline->op2.zv TSRMLS_CC);
1.1       misho    3038: 
                   3039: 
1.1.1.2   misho    3040:        CHECK_EXCEPTION();
1.1       misho    3041:        ZEND_VM_NEXT_OPCODE();
                   3042: }
                   3043: 
                   3044: static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3045: {
1.1.1.2   misho    3046:        USE_OPLINE
1.1       misho    3047: 
                   3048: 
1.1.1.2   misho    3049:        SAVE_OPLINE();
                   3050:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   3051:                opline->op1.zv,
                   3052:                opline->op2.zv TSRMLS_CC);
1.1       misho    3053: 
                   3054: 
1.1.1.2   misho    3055:        CHECK_EXCEPTION();
1.1       misho    3056:        ZEND_VM_NEXT_OPCODE();
                   3057: }
                   3058: 
                   3059: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3060: {
1.1.1.2   misho    3061:        USE_OPLINE
1.1       misho    3062: 
                   3063: 
1.1.1.2   misho    3064:        SAVE_OPLINE();
                   3065:        concat_function(&EX_T(opline->result.var).tmp_var,
                   3066:                opline->op1.zv,
                   3067:                opline->op2.zv TSRMLS_CC);
1.1       misho    3068: 
                   3069: 
1.1.1.2   misho    3070:        CHECK_EXCEPTION();
1.1       misho    3071:        ZEND_VM_NEXT_OPCODE();
                   3072: }
                   3073: 
                   3074: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3075: {
1.1.1.2   misho    3076:        USE_OPLINE
1.1       misho    3077: 
                   3078: 
1.1.1.2   misho    3079:        SAVE_OPLINE();
                   3080:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   3081:                opline->op1.zv,
                   3082:                opline->op2.zv TSRMLS_CC);
1.1       misho    3083: 
                   3084: 
1.1.1.2   misho    3085:        CHECK_EXCEPTION();
1.1       misho    3086:        ZEND_VM_NEXT_OPCODE();
                   3087: }
                   3088: 
                   3089: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3090: {
1.1.1.2   misho    3091:        USE_OPLINE
1.1       misho    3092: 
1.1.1.2   misho    3093:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    3094: 
1.1.1.2   misho    3095:        SAVE_OPLINE();
1.1       misho    3096:        is_identical_function(result,
1.1.1.2   misho    3097:                opline->op1.zv,
                   3098:                opline->op2.zv TSRMLS_CC);
1.1       misho    3099:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   3100: 
                   3101: 
1.1.1.2   misho    3102:        CHECK_EXCEPTION();
1.1       misho    3103:        ZEND_VM_NEXT_OPCODE();
                   3104: }
                   3105: 
                   3106: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3107: {
1.1.1.2   misho    3108:        USE_OPLINE
1.1       misho    3109: 
1.1.1.2   misho    3110:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    3111: 
1.1.1.2   misho    3112:        SAVE_OPLINE();
                   3113:        ZVAL_BOOL(result, fast_equal_function(result,
                   3114:                opline->op1.zv,
                   3115:                opline->op2.zv TSRMLS_CC));
1.1       misho    3116: 
                   3117: 
1.1.1.2   misho    3118:        CHECK_EXCEPTION();
1.1       misho    3119:        ZEND_VM_NEXT_OPCODE();
                   3120: }
                   3121: 
                   3122: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3123: {
1.1.1.2   misho    3124:        USE_OPLINE
1.1       misho    3125: 
1.1.1.2   misho    3126:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    3127: 
1.1.1.2   misho    3128:        SAVE_OPLINE();
                   3129:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   3130:                opline->op1.zv,
                   3131:                opline->op2.zv TSRMLS_CC));
1.1       misho    3132: 
                   3133: 
1.1.1.2   misho    3134:        CHECK_EXCEPTION();
1.1       misho    3135:        ZEND_VM_NEXT_OPCODE();
                   3136: }
                   3137: 
                   3138: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3139: {
1.1.1.2   misho    3140:        USE_OPLINE
1.1       misho    3141: 
1.1.1.2   misho    3142:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    3143: 
1.1.1.2   misho    3144:        SAVE_OPLINE();
                   3145:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   3146:                opline->op1.zv,
                   3147:                opline->op2.zv TSRMLS_CC));
1.1       misho    3148: 
                   3149: 
1.1.1.2   misho    3150:        CHECK_EXCEPTION();
1.1       misho    3151:        ZEND_VM_NEXT_OPCODE();
                   3152: }
                   3153: 
                   3154: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3155: {
1.1.1.2   misho    3156:        USE_OPLINE
1.1       misho    3157: 
1.1.1.2   misho    3158:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    3159: 
1.1.1.2   misho    3160:        SAVE_OPLINE();
                   3161:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   3162:                opline->op1.zv,
                   3163:                opline->op2.zv TSRMLS_CC));
1.1       misho    3164: 
                   3165: 
1.1.1.2   misho    3166:        CHECK_EXCEPTION();
1.1       misho    3167:        ZEND_VM_NEXT_OPCODE();
                   3168: }
                   3169: 
                   3170: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3171: {
1.1.1.2   misho    3172:        USE_OPLINE
1.1       misho    3173: 
                   3174: 
1.1.1.2   misho    3175:        SAVE_OPLINE();
                   3176:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   3177:                opline->op1.zv,
                   3178:                opline->op2.zv TSRMLS_CC);
1.1       misho    3179: 
                   3180: 
1.1.1.2   misho    3181:        CHECK_EXCEPTION();
1.1       misho    3182:        ZEND_VM_NEXT_OPCODE();
                   3183: }
                   3184: 
                   3185: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3186: {
1.1.1.2   misho    3187:        USE_OPLINE
1.1       misho    3188: 
                   3189: 
1.1.1.2   misho    3190:        SAVE_OPLINE();
                   3191:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   3192:                opline->op1.zv,
                   3193:                opline->op2.zv TSRMLS_CC);
1.1       misho    3194: 
                   3195: 
1.1.1.2   misho    3196:        CHECK_EXCEPTION();
1.1       misho    3197:        ZEND_VM_NEXT_OPCODE();
                   3198: }
                   3199: 
                   3200: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3201: {
1.1.1.2   misho    3202:        USE_OPLINE
1.1       misho    3203: 
                   3204: 
1.1.1.2   misho    3205:        SAVE_OPLINE();
                   3206:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   3207:                opline->op1.zv,
                   3208:                opline->op2.zv TSRMLS_CC);
1.1       misho    3209: 
                   3210: 
1.1.1.2   misho    3211:        CHECK_EXCEPTION();
1.1       misho    3212:        ZEND_VM_NEXT_OPCODE();
                   3213: }
                   3214: 
                   3215: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3216: {
1.1.1.2   misho    3217:        USE_OPLINE
1.1       misho    3218: 
                   3219: 
1.1.1.2   misho    3220:        SAVE_OPLINE();
                   3221:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   3222:                opline->op1.zv,
                   3223:                opline->op2.zv TSRMLS_CC);
1.1       misho    3224: 
                   3225: 
1.1.1.2   misho    3226:        CHECK_EXCEPTION();
1.1       misho    3227:        ZEND_VM_NEXT_OPCODE();
                   3228: }
                   3229: 
1.1.1.2   misho    3230: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    3231: {
1.1.1.2   misho    3232:        USE_OPLINE
                   3233:        zend_free_op free_op1;
                   3234:        zval *varname;
                   3235:        zval **retval;
                   3236:        zval tmp_varname;
                   3237:        HashTable *target_symbol_table;
                   3238:        ulong hash_value;
                   3239: 
                   3240:        SAVE_OPLINE();
                   3241:        varname = opline->op1.zv;
                   3242: 
                   3243:        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   3244:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   3245:                zval_copy_ctor(&tmp_varname);
                   3246:                Z_SET_REFCOUNT(tmp_varname, 1);
                   3247:                Z_UNSET_ISREF(tmp_varname);
                   3248:                convert_to_string(&tmp_varname);
                   3249:                varname = &tmp_varname;
                   3250:        }
                   3251: 
                   3252:        if (IS_CONST != IS_UNUSED) {
                   3253:                zend_class_entry *ce;
                   3254: 
                   3255:                if (IS_CONST == IS_CONST) {
                   3256:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3257:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   3258:                        } else {
                   3259:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   3260:                                if (UNEXPECTED(ce == NULL)) {
                   3261:                                        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   3262:                                                zval_dtor(&tmp_varname);
                   3263:                                        }
                   3264: 
                   3265:                                        CHECK_EXCEPTION();
                   3266:                                        ZEND_VM_NEXT_OPCODE();
                   3267:                                }
                   3268:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   3269:                        }
                   3270:                } else {
                   3271:                        ce = EX_T(opline->op2.var).class_entry;
                   3272:                }
                   3273:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   3274: 
                   3275:        } else {
                   3276:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   3277: /*
                   3278:                if (!target_symbol_table) {
                   3279:                        CHECK_EXCEPTION();
                   3280:                        ZEND_VM_NEXT_OPCODE();
                   3281:                }
                   3282: */
                   3283:                if (IS_CONST == IS_CONST) {
                   3284:                        hash_value = Z_HASH_P(varname);
                   3285:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   3286:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   3287:                } else {
                   3288:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   3289:                }
                   3290: 
                   3291:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   3292:                        switch (type) {
                   3293:                                case BP_VAR_R:
                   3294:                                case BP_VAR_UNSET:
                   3295:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   3296:                                        /* break missing intentionally */
                   3297:                                case BP_VAR_IS:
                   3298:                                        retval = &EG(uninitialized_zval_ptr);
                   3299:                                        break;
                   3300:                                case BP_VAR_RW:
                   3301:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   3302:                                        /* break missing intentionally */
                   3303:                                case BP_VAR_W:
                   3304:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   3305:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   3306:                                        break;
                   3307:                                EMPTY_SWITCH_DEFAULT_CASE()
                   3308:                        }
                   3309:                }
                   3310:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   3311:                        case ZEND_FETCH_GLOBAL:
                   3312:                                if (IS_CONST != IS_TMP_VAR) {
                   3313: 
                   3314:                                }
                   3315:                                break;
                   3316:                        case ZEND_FETCH_LOCAL:
                   3317: 
                   3318:                                break;
                   3319:                        case ZEND_FETCH_STATIC:
                   3320:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   3321:                                break;
                   3322:                        case ZEND_FETCH_GLOBAL_LOCK:
                   3323:                                if (IS_CONST == IS_VAR && !free_op1.var) {
                   3324:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   3325:                                }
                   3326:                                break;
                   3327:                }
                   3328:        }
1.1       misho    3329: 
                   3330: 
1.1.1.2   misho    3331:        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   3332:                zval_dtor(&tmp_varname);
                   3333:        }
                   3334:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   3335:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   3336:        }
                   3337:        PZVAL_LOCK(*retval);
                   3338:        switch (type) {
                   3339:                case BP_VAR_R:
                   3340:                case BP_VAR_IS:
                   3341:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   3342:                        break;
                   3343:                case BP_VAR_UNSET: {
                   3344:                        zend_free_op free_res;
                   3345: 
                   3346:                        PZVAL_UNLOCK(*retval, &free_res);
                   3347:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   3348:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   3349:                        }
                   3350:                        PZVAL_LOCK(*retval);
                   3351:                        FREE_OP_VAR_PTR(free_res);
1.1       misho    3352:                }
1.1.1.2   misho    3353:                /* break missing intentionally */
                   3354:                default:
                   3355:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   3356:                        break;
                   3357:        }
                   3358:        CHECK_EXCEPTION();
                   3359:        ZEND_VM_NEXT_OPCODE();
                   3360: }
                   3361: 
                   3362: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3363: {
                   3364:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3365: }
                   3366: 
                   3367: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3368: {
                   3369:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3370: }
                   3371: 
                   3372: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3373: {
                   3374:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3375: }
                   3376: 
                   3377: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3378: {
                   3379:        USE_OPLINE
                   3380: 
                   3381:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3382: }
                   3383: 
                   3384: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3385: {
                   3386:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3387: }
                   3388: 
                   3389: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3390: {
                   3391:        return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3392: }
                   3393: 
                   3394: static int ZEND_FASTCALL  ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3395: {
                   3396:        USE_OPLINE
                   3397: 
                   3398:        zval *container;
                   3399: 
                   3400:        SAVE_OPLINE();
                   3401:        container = opline->op1.zv;
                   3402: 
                   3403:        if (UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
                   3404:                PZVAL_LOCK(&EG(uninitialized_zval));
                   3405:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    3406:        } else {
                   3407: 
1.1.1.2   misho    3408:                zval *value = *zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
1.1       misho    3409: 
1.1.1.2   misho    3410:                PZVAL_LOCK(value);
                   3411:                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    3412: 
                   3413:        }
1.1.1.2   misho    3414:        CHECK_EXCEPTION();
1.1       misho    3415:        ZEND_VM_NEXT_OPCODE();
                   3416: }
                   3417: 
                   3418: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3419: {
1.1.1.2   misho    3420:        USE_OPLINE
1.1       misho    3421:        zval *function_name;
                   3422:        zend_class_entry *ce;
                   3423: 
1.1.1.2   misho    3424:        SAVE_OPLINE();
1.1       misho    3425:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   3426: 
                   3427:        if (IS_CONST == IS_CONST) {
                   3428:                /* no function found. try a static method in class */
1.1.1.2   misho    3429:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   3430:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   3431:                } else {
                   3432:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    3433:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   3434:                                HANDLE_EXCEPTION();
                   3435:                        }
1.1.1.2   misho    3436:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    3437:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    3438:                        }
                   3439:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    3440:                }
                   3441:                EX(called_scope) = ce;
                   3442:        } else {
1.1.1.2   misho    3443:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    3444: 
1.1.1.2   misho    3445:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    3446:                        EX(called_scope) = EG(called_scope);
                   3447:                } else {
                   3448:                        EX(called_scope) = ce;
                   3449:                }
                   3450:        }
1.1.1.2   misho    3451: 
                   3452:        if (IS_CONST == IS_CONST &&
                   3453:            IS_CONST == IS_CONST &&
                   3454:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3455:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   3456:        } else if (IS_CONST != IS_CONST &&
                   3457:                   IS_CONST == IS_CONST &&
                   3458:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   3459:                /* do nothing */
                   3460:        } else if (IS_CONST != IS_UNUSED) {
1.1       misho    3461:                char *function_name_strval = NULL;
                   3462:                int function_name_strlen = 0;
                   3463: 
                   3464: 
                   3465:                if (IS_CONST == IS_CONST) {
1.1.1.2   misho    3466:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   3467:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    3468:                } else {
1.1.1.2   misho    3469:                        function_name = opline->op2.zv;
1.1       misho    3470: 
1.1.1.2   misho    3471:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    3472:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   3473:                        } else {
                   3474:                                function_name_strval = Z_STRVAL_P(function_name);
                   3475:                                function_name_strlen = Z_STRLEN_P(function_name);
                   3476:                        }
                   3477:                }
                   3478: 
                   3479:                if (function_name_strval) {
                   3480:                        if (ce->get_static_method) {
                   3481:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   3482:                        } else {
1.1.1.2   misho    3483:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    3484:                        }
1.1.1.2   misho    3485:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    3486:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   3487:                        }
1.1.1.2   misho    3488:                        if (IS_CONST == IS_CONST &&
                   3489:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   3490:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   3491:                                if (IS_CONST == IS_CONST) {
                   3492:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   3493:                                } else {
                   3494:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   3495:                                }
                   3496:                        }
1.1       misho    3497:                }
                   3498:                if (IS_CONST != IS_CONST) {
                   3499: 
                   3500:                }
                   3501:        } else {
1.1.1.2   misho    3502:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    3503:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   3504:                }
                   3505:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    3506:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    3507:                }
                   3508:                EX(fbc) = ce->constructor;
                   3509:        }
                   3510: 
                   3511:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   3512:                EX(object) = NULL;
                   3513:        } else {
                   3514:                if (EG(This) &&
                   3515:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   3516:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   3517:                    /* We are calling method of the other (incompatible) class,
                   3518:                       but passing $this. This is done for compatibility with php-4. */
                   3519:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    3520:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    3521:                        } else {
                   3522:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    3523:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    3524:                        }
                   3525:                }
                   3526:                if ((EX(object) = EG(This))) {
                   3527:                        Z_ADDREF_P(EX(object));
                   3528:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   3529:                }
                   3530:        }
                   3531: 
1.1.1.2   misho    3532:        CHECK_EXCEPTION();
1.1       misho    3533:        ZEND_VM_NEXT_OPCODE();
                   3534: }
                   3535: 
                   3536: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3537: {
1.1.1.2   misho    3538:        USE_OPLINE
1.1       misho    3539: 
                   3540: 
1.1.1.2   misho    3541:        SAVE_OPLINE();
1.1       misho    3542:        if (IS_CONST==IS_VAR) {
1.1.1.2   misho    3543:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    3544:        }
1.1.1.2   misho    3545:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   3546:                                 opline->op1.zv,
                   3547:                                 opline->op2.zv TSRMLS_CC);
1.1       misho    3548: 
1.1.1.2   misho    3549:        CHECK_EXCEPTION();
1.1       misho    3550:        ZEND_VM_NEXT_OPCODE();
                   3551: }
                   3552: 
                   3553: static int ZEND_FASTCALL  ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3554: {
1.1.1.2   misho    3555:        USE_OPLINE
1.1       misho    3556: 
1.1.1.2   misho    3557:        SAVE_OPLINE();
1.1       misho    3558:        if (IS_CONST == IS_UNUSED) {
1.1.1.2   misho    3559:                zend_constant *c;
                   3560:                zval *retval;
                   3561: 
                   3562:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3563:                        c = CACHED_PTR(opline->op2.literal->cache_slot);
                   3564:                } else if ((c = zend_quick_get_constant(opline->op2.literal + 1, opline->extended_value TSRMLS_CC)) == NULL) {
1.1       misho    3565:                        if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
1.1.1.2   misho    3566:                                char *actual = (char *)zend_memrchr(Z_STRVAL_P(opline->op2.zv), '\\', Z_STRLEN_P(opline->op2.zv));
1.1       misho    3567:                                if(!actual) {
1.1.1.2   misho    3568:                                        actual = Z_STRVAL_P(opline->op2.zv);
1.1       misho    3569:                                } else {
                   3570:                                        actual++;
                   3571:                                }
                   3572:                                /* non-qualified constant - allow text substitution */
                   3573:                                zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual);
1.1.1.2   misho    3574:                                ZVAL_STRINGL(&EX_T(opline->result.var).tmp_var, actual, Z_STRLEN_P(opline->op2.zv)-(actual - Z_STRVAL_P(opline->op2.zv)), 1);
                   3575:                                CHECK_EXCEPTION();
                   3576:                                ZEND_VM_NEXT_OPCODE();
1.1       misho    3577:                        } else {
1.1.1.2   misho    3578:                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    3579:                        }
1.1.1.2   misho    3580:                } else {
                   3581:                        CACHE_PTR(opline->op2.literal->cache_slot, c);
1.1       misho    3582:                }
1.1.1.2   misho    3583:                retval = &EX_T(opline->result.var).tmp_var;
                   3584:                ZVAL_COPY_VALUE(retval, &c->value);
                   3585:                zval_copy_ctor(retval);
                   3586:                CHECK_EXCEPTION();
1.1       misho    3587:                ZEND_VM_NEXT_OPCODE();
                   3588:        } else {
                   3589:                /* class constant */
                   3590:                zend_class_entry *ce;
                   3591:                zval **value;
                   3592: 
                   3593:                if (IS_CONST == IS_CONST) {
1.1.1.2   misho    3594:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3595:                                value = CACHED_PTR(opline->op2.literal->cache_slot);
                   3596:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   3597:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   3598:                                CHECK_EXCEPTION();
                   3599:                                ZEND_VM_NEXT_OPCODE();
                   3600:                        } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   3601:                                ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   3602:                        } else {
                   3603:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    3604:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   3605:                                        HANDLE_EXCEPTION();
                   3606:                                }
1.1.1.2   misho    3607:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    3608:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    3609:                                }
                   3610:                                CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    3611:                        }
                   3612:                } else {
1.1.1.2   misho    3613:                        ce = EX_T(opline->op1.var).class_entry;
                   3614:                        if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
                   3615:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   3616:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   3617:                                CHECK_EXCEPTION();
                   3618:                                ZEND_VM_NEXT_OPCODE();
                   3619:                        }
1.1       misho    3620:                }
                   3621: 
1.1.1.2   misho    3622:                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
1.1       misho    3623:                        if (Z_TYPE_PP(value) == IS_CONSTANT_ARRAY ||
                   3624:                            (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT) {
                   3625:                                zend_class_entry *old_scope = EG(scope);
                   3626: 
                   3627:                                EG(scope) = ce;
                   3628:                                zval_update_constant(value, (void *) 1 TSRMLS_CC);
                   3629:                                EG(scope) = old_scope;
                   3630:                        }
1.1.1.2   misho    3631:                        if (IS_CONST == IS_CONST) {
                   3632:                                CACHE_PTR(opline->op2.literal->cache_slot, value);
                   3633:                        } else {
                   3634:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, value);
                   3635:                        }
                   3636:                        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   3637:                        zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    3638:                } else {
1.1.1.2   misho    3639:                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    3640:                }
                   3641: 
1.1.1.2   misho    3642:                CHECK_EXCEPTION();
1.1       misho    3643:                ZEND_VM_NEXT_OPCODE();
                   3644:        }
                   3645: }
                   3646: 
                   3647: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3648: {
1.1.1.2   misho    3649:        USE_OPLINE
1.1       misho    3650: 
                   3651:        zval *expr_ptr;
                   3652: 
1.1.1.2   misho    3653:        SAVE_OPLINE();
                   3654:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
                   3655:                zval **expr_ptr_ptr = NULL;
1.1       misho    3656: 
1.1.1.2   misho    3657:                if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   3658:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   3659:                }
                   3660:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    3661:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    3662:                Z_ADDREF_P(expr_ptr);
1.1       misho    3663:        } else {
1.1.1.2   misho    3664:                expr_ptr=opline->op1.zv;
                   3665:                if (0) { /* temporary variable */
                   3666:                        zval *new_expr;
1.1       misho    3667: 
1.1.1.2   misho    3668:                        ALLOC_ZVAL(new_expr);
                   3669:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   3670:                        expr_ptr = new_expr;
                   3671:                } else if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    3672:                        zval *new_expr;
                   3673: 
                   3674:                        ALLOC_ZVAL(new_expr);
                   3675:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   3676:                        expr_ptr = new_expr;
                   3677:                        zendi_zval_copy_ctor(*expr_ptr);
                   3678:                } else {
                   3679:                        Z_ADDREF_P(expr_ptr);
                   3680:                }
                   3681:        }
1.1.1.2   misho    3682: 
                   3683:        if (IS_CONST != IS_UNUSED) {
                   3684: 
                   3685:                zval *offset = opline->op2.zv;
                   3686:                ulong hval;
                   3687: 
1.1       misho    3688:                switch (Z_TYPE_P(offset)) {
                   3689:                        case IS_DOUBLE:
1.1.1.2   misho    3690:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   3691:                                goto num_index;
1.1       misho    3692:                        case IS_LONG:
                   3693:                        case IS_BOOL:
1.1.1.2   misho    3694:                                hval = Z_LVAL_P(offset);
                   3695: num_index:
                   3696:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    3697:                                break;
                   3698:                        case IS_STRING:
1.1.1.2   misho    3699:                                if (IS_CONST == IS_CONST) {
                   3700:                                        hval = Z_HASH_P(offset);
                   3701:                                } else {
                   3702:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   3703:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   3704:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   3705:                                        } else {
                   3706:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   3707:                                        }
                   3708:                                }
                   3709:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    3710:                                break;
                   3711:                        case IS_NULL:
1.1.1.2   misho    3712:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    3713:                                break;
                   3714:                        default:
                   3715:                                zend_error(E_WARNING, "Illegal offset type");
                   3716:                                zval_ptr_dtor(&expr_ptr);
                   3717:                                /* do nothing */
                   3718:                                break;
                   3719:                }
                   3720: 
                   3721:        } else {
1.1.1.2   misho    3722:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    3723:        }
1.1.1.2   misho    3724:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
1.1       misho    3725: 
                   3726:        } else {
                   3727: 
                   3728:        }
1.1.1.2   misho    3729:        CHECK_EXCEPTION();
1.1       misho    3730:        ZEND_VM_NEXT_OPCODE();
                   3731: }
                   3732: 
                   3733: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3734: {
1.1.1.2   misho    3735:        USE_OPLINE
1.1       misho    3736: 
1.1.1.2   misho    3737:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    3738:        if (IS_CONST == IS_UNUSED) {
                   3739:                ZEND_VM_NEXT_OPCODE();
                   3740: #if 0 || IS_CONST != IS_UNUSED
                   3741:        } else {
                   3742:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   3743: #endif
                   3744:        }
                   3745: }
                   3746: 
1.1.1.2   misho    3747: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3748: {
                   3749:        USE_OPLINE
                   3750:        zval tmp, *varname;
                   3751:        HashTable *target_symbol_table;
                   3752: 
                   3753: 
                   3754:        SAVE_OPLINE();
                   3755:        if (IS_CONST == IS_CV &&
                   3756:            IS_CONST == IS_UNUSED &&
                   3757:            (opline->extended_value & ZEND_QUICK_SET)) {
                   3758:                if (EG(active_symbol_table)) {
                   3759:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   3760: 
                   3761:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   3762:                        EX_CV(opline->op1.var) = NULL;
                   3763:                } else if (EX_CV(opline->op1.var)) {
                   3764:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   3765:                        EX_CV(opline->op1.var) = NULL;
                   3766:                }
                   3767:                CHECK_EXCEPTION();
                   3768:                ZEND_VM_NEXT_OPCODE();
                   3769:        }
                   3770: 
                   3771:        varname = opline->op1.zv;
                   3772: 
                   3773:        if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   3774:                ZVAL_COPY_VALUE(&tmp, varname);
                   3775:                zval_copy_ctor(&tmp);
                   3776:                convert_to_string(&tmp);
                   3777:                varname = &tmp;
                   3778:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   3779:                Z_ADDREF_P(varname);
                   3780:        }
                   3781: 
                   3782:        if (IS_CONST != IS_UNUSED) {
                   3783:                zend_class_entry *ce;
                   3784: 
                   3785:                if (IS_CONST == IS_CONST) {
                   3786:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3787:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   3788:                        } else {
                   3789:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    3790:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    3791:                                        if (IS_CONST != IS_CONST && varname == &tmp) {
                   3792:                                                zval_dtor(&tmp);
                   3793:                                        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   3794:                                                zval_ptr_dtor(&varname);
                   3795:                                        }
                   3796: 
1.1.1.4   misho    3797:                                        HANDLE_EXCEPTION();
                   3798:                                }
                   3799:                                if (UNEXPECTED(ce == NULL)) {
                   3800:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    3801:                                }
                   3802:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   3803:                        }
                   3804:                } else {
                   3805:                        ce = EX_T(opline->op2.var).class_entry;
                   3806:                }
                   3807:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   3808:        } else {
                   3809:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   3810: 
                   3811:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   3812:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   3813:        }
                   3814: 
                   3815:        if (IS_CONST != IS_CONST && varname == &tmp) {
                   3816:                zval_dtor(&tmp);
                   3817:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   3818:                zval_ptr_dtor(&varname);
                   3819:        }
                   3820: 
                   3821:        CHECK_EXCEPTION();
                   3822:        ZEND_VM_NEXT_OPCODE();
                   3823: }
                   3824: 
                   3825: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3826: {
                   3827:        USE_OPLINE
                   3828:        zval **value;
                   3829:        zend_bool isset = 1;
                   3830: 
                   3831:        SAVE_OPLINE();
                   3832:        if (IS_CONST == IS_CV &&
                   3833:            IS_CONST == IS_UNUSED &&
                   3834:            (opline->extended_value & ZEND_QUICK_SET)) {
                   3835:                if (EX_CV(opline->op1.var)) {
                   3836:                        value = EX_CV(opline->op1.var);
                   3837:                } else if (EG(active_symbol_table)) {
                   3838:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   3839: 
                   3840:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   3841:                                isset = 0;
                   3842:                        }
                   3843:                } else {
                   3844:                        isset = 0;
                   3845:                }
                   3846:        } else {
                   3847:                HashTable *target_symbol_table;
                   3848: 
                   3849:                zval tmp, *varname = opline->op1.zv;
                   3850: 
                   3851:                if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   3852:                        ZVAL_COPY_VALUE(&tmp, varname);
                   3853:                        zval_copy_ctor(&tmp);
                   3854:                        convert_to_string(&tmp);
                   3855:                        varname = &tmp;
                   3856:                }
                   3857: 
                   3858:                if (IS_CONST != IS_UNUSED) {
                   3859:                        zend_class_entry *ce;
                   3860: 
                   3861:                        if (IS_CONST == IS_CONST) {
                   3862:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   3863:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   3864:                                } else {
                   3865:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   3866:                                        if (UNEXPECTED(ce == NULL)) {
                   3867:                                                CHECK_EXCEPTION();
                   3868:                                                ZEND_VM_NEXT_OPCODE();
                   3869:                                        }
                   3870:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   3871:                                }
                   3872:                        } else {
                   3873:                                ce = EX_T(opline->op2.var).class_entry;
                   3874:                        }
                   3875:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   3876:                        if (!value) {
                   3877:                                isset = 0;
                   3878:                        }
                   3879:                } else {
                   3880:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   3881:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   3882:                                isset = 0;
                   3883:                        }
                   3884:                }
                   3885: 
                   3886:                if (IS_CONST != IS_CONST && varname == &tmp) {
                   3887:                        zval_dtor(&tmp);
                   3888:                }
                   3889: 
                   3890:        }
                   3891: 
                   3892:        if (opline->extended_value & ZEND_ISSET) {
                   3893:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   3894:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   3895:                } else {
                   3896:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   3897:                }
                   3898:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   3899:                if (!isset || !i_zend_is_true(*value)) {
                   3900:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   3901:                } else {
                   3902:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   3903:                }
                   3904:        }
                   3905: 
                   3906:        CHECK_EXCEPTION();
                   3907:        ZEND_VM_NEXT_OPCODE();
                   3908: }
                   3909: 
1.1       misho    3910: static int ZEND_FASTCALL  ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3911: {
1.1.1.2   misho    3912:        USE_OPLINE
1.1       misho    3913: 
1.1.1.2   misho    3914:        zval *name;
                   3915:        zval *val;
1.1       misho    3916:        zend_constant c;
                   3917: 
1.1.1.2   misho    3918:        SAVE_OPLINE();
                   3919:        name  = opline->op1.zv;
                   3920:        val   = opline->op2.zv;
                   3921: 
1.1       misho    3922:        if ((Z_TYPE_P(val) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT || Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
1.1.1.2   misho    3923:                zval tmp;
1.1       misho    3924:                zval *tmp_ptr = &tmp;
                   3925: 
1.1.1.2   misho    3926:                ZVAL_COPY_VALUE(&tmp, val);
1.1       misho    3927:                if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
                   3928:                        zval_copy_ctor(&tmp);
                   3929:                }
                   3930:                INIT_PZVAL(&tmp);
                   3931:                zval_update_constant(&tmp_ptr, NULL TSRMLS_CC);
                   3932:                c.value = *tmp_ptr;
                   3933:        } else {
1.1.1.2   misho    3934:                INIT_PZVAL_COPY(&c.value, val);
1.1       misho    3935:                zval_copy_ctor(&c.value);
                   3936:        }
                   3937:        c.flags = CONST_CS; /* non persistent, case sensetive */
1.1.1.2   misho    3938:        c.name = IS_INTERNED(Z_STRVAL_P(name)) ? Z_STRVAL_P(name) : zend_strndup(Z_STRVAL_P(name), Z_STRLEN_P(name));
1.1       misho    3939:        c.name_len = Z_STRLEN_P(name)+1;
                   3940:        c.module_number = PHP_USER_CONSTANT;
                   3941: 
                   3942:        if (zend_register_constant(&c TSRMLS_CC) == FAILURE) {
                   3943:        }
                   3944: 
                   3945: 
1.1.1.2   misho    3946:        CHECK_EXCEPTION();
1.1       misho    3947:        ZEND_VM_NEXT_OPCODE();
                   3948: }
                   3949: 
                   3950: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3951: {
1.1.1.2   misho    3952:        USE_OPLINE
1.1       misho    3953:        zend_free_op free_op2;
                   3954: 
1.1.1.2   misho    3955:        SAVE_OPLINE();
                   3956:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   3957:                opline->op1.zv,
                   3958:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    3959: 
                   3960:        zval_dtor(free_op2.var);
1.1.1.2   misho    3961:        CHECK_EXCEPTION();
1.1       misho    3962:        ZEND_VM_NEXT_OPCODE();
                   3963: }
                   3964: 
                   3965: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3966: {
1.1.1.2   misho    3967:        USE_OPLINE
1.1       misho    3968:        zend_free_op free_op2;
                   3969: 
1.1.1.2   misho    3970:        SAVE_OPLINE();
                   3971:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   3972:                opline->op1.zv,
                   3973:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    3974: 
                   3975:        zval_dtor(free_op2.var);
1.1.1.2   misho    3976:        CHECK_EXCEPTION();
1.1       misho    3977:        ZEND_VM_NEXT_OPCODE();
                   3978: }
                   3979: 
                   3980: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3981: {
1.1.1.2   misho    3982:        USE_OPLINE
1.1       misho    3983:        zend_free_op free_op2;
                   3984: 
1.1.1.2   misho    3985:        SAVE_OPLINE();
                   3986:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   3987:                opline->op1.zv,
                   3988:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    3989: 
                   3990:        zval_dtor(free_op2.var);
1.1.1.2   misho    3991:        CHECK_EXCEPTION();
1.1       misho    3992:        ZEND_VM_NEXT_OPCODE();
                   3993: }
                   3994: 
                   3995: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   3996: {
1.1.1.2   misho    3997:        USE_OPLINE
1.1       misho    3998:        zend_free_op free_op2;
                   3999: 
1.1.1.2   misho    4000:        SAVE_OPLINE();
                   4001:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   4002:                opline->op1.zv,
                   4003:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4004: 
                   4005:        zval_dtor(free_op2.var);
1.1.1.2   misho    4006:        CHECK_EXCEPTION();
1.1       misho    4007:        ZEND_VM_NEXT_OPCODE();
                   4008: }
                   4009: 
                   4010: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4011: {
1.1.1.2   misho    4012:        USE_OPLINE
1.1       misho    4013:        zend_free_op free_op2;
                   4014: 
1.1.1.2   misho    4015:        SAVE_OPLINE();
                   4016:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   4017:                opline->op1.zv,
                   4018:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4019: 
                   4020:        zval_dtor(free_op2.var);
1.1.1.2   misho    4021:        CHECK_EXCEPTION();
1.1       misho    4022:        ZEND_VM_NEXT_OPCODE();
                   4023: }
                   4024: 
                   4025: static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4026: {
1.1.1.2   misho    4027:        USE_OPLINE
1.1       misho    4028:        zend_free_op free_op2;
                   4029: 
1.1.1.2   misho    4030:        SAVE_OPLINE();
                   4031:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   4032:                opline->op1.zv,
                   4033:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4034: 
                   4035:        zval_dtor(free_op2.var);
1.1.1.2   misho    4036:        CHECK_EXCEPTION();
1.1       misho    4037:        ZEND_VM_NEXT_OPCODE();
                   4038: }
                   4039: 
                   4040: static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4041: {
1.1.1.2   misho    4042:        USE_OPLINE
1.1       misho    4043:        zend_free_op free_op2;
                   4044: 
1.1.1.2   misho    4045:        SAVE_OPLINE();
                   4046:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   4047:                opline->op1.zv,
                   4048:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4049: 
                   4050:        zval_dtor(free_op2.var);
1.1.1.2   misho    4051:        CHECK_EXCEPTION();
1.1       misho    4052:        ZEND_VM_NEXT_OPCODE();
                   4053: }
                   4054: 
                   4055: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4056: {
1.1.1.2   misho    4057:        USE_OPLINE
1.1       misho    4058:        zend_free_op free_op2;
                   4059: 
1.1.1.2   misho    4060:        SAVE_OPLINE();
                   4061:        concat_function(&EX_T(opline->result.var).tmp_var,
                   4062:                opline->op1.zv,
                   4063:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4064: 
                   4065:        zval_dtor(free_op2.var);
1.1.1.2   misho    4066:        CHECK_EXCEPTION();
1.1       misho    4067:        ZEND_VM_NEXT_OPCODE();
                   4068: }
                   4069: 
                   4070: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4071: {
1.1.1.2   misho    4072:        USE_OPLINE
1.1       misho    4073:        zend_free_op free_op2;
                   4074: 
1.1.1.2   misho    4075:        SAVE_OPLINE();
                   4076:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   4077:                opline->op1.zv,
                   4078:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4079: 
                   4080:        zval_dtor(free_op2.var);
1.1.1.2   misho    4081:        CHECK_EXCEPTION();
1.1       misho    4082:        ZEND_VM_NEXT_OPCODE();
                   4083: }
                   4084: 
                   4085: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4086: {
1.1.1.2   misho    4087:        USE_OPLINE
1.1       misho    4088:        zend_free_op free_op2;
1.1.1.2   misho    4089:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4090: 
1.1.1.2   misho    4091:        SAVE_OPLINE();
1.1       misho    4092:        is_identical_function(result,
1.1.1.2   misho    4093:                opline->op1.zv,
                   4094:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4095:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   4096: 
                   4097:        zval_dtor(free_op2.var);
1.1.1.2   misho    4098:        CHECK_EXCEPTION();
1.1       misho    4099:        ZEND_VM_NEXT_OPCODE();
                   4100: }
                   4101: 
                   4102: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4103: {
1.1.1.2   misho    4104:        USE_OPLINE
1.1       misho    4105:        zend_free_op free_op2;
1.1.1.2   misho    4106:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4107: 
1.1.1.2   misho    4108:        SAVE_OPLINE();
                   4109:        ZVAL_BOOL(result, fast_equal_function(result,
                   4110:                opline->op1.zv,
                   4111:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4112: 
                   4113:        zval_dtor(free_op2.var);
1.1.1.2   misho    4114:        CHECK_EXCEPTION();
1.1       misho    4115:        ZEND_VM_NEXT_OPCODE();
                   4116: }
                   4117: 
                   4118: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4119: {
1.1.1.2   misho    4120:        USE_OPLINE
1.1       misho    4121:        zend_free_op free_op2;
1.1.1.2   misho    4122:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4123: 
1.1.1.2   misho    4124:        SAVE_OPLINE();
                   4125:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   4126:                opline->op1.zv,
                   4127:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4128: 
                   4129:        zval_dtor(free_op2.var);
1.1.1.2   misho    4130:        CHECK_EXCEPTION();
1.1       misho    4131:        ZEND_VM_NEXT_OPCODE();
                   4132: }
                   4133: 
                   4134: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4135: {
1.1.1.2   misho    4136:        USE_OPLINE
1.1       misho    4137:        zend_free_op free_op2;
1.1.1.2   misho    4138:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4139: 
1.1.1.2   misho    4140:        SAVE_OPLINE();
                   4141:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   4142:                opline->op1.zv,
                   4143:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4144: 
                   4145:        zval_dtor(free_op2.var);
1.1.1.2   misho    4146:        CHECK_EXCEPTION();
1.1       misho    4147:        ZEND_VM_NEXT_OPCODE();
                   4148: }
                   4149: 
                   4150: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4151: {
1.1.1.2   misho    4152:        USE_OPLINE
1.1       misho    4153:        zend_free_op free_op2;
1.1.1.2   misho    4154:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4155: 
1.1.1.2   misho    4156:        SAVE_OPLINE();
                   4157:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   4158:                opline->op1.zv,
                   4159:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4160: 
                   4161:        zval_dtor(free_op2.var);
1.1.1.2   misho    4162:        CHECK_EXCEPTION();
1.1       misho    4163:        ZEND_VM_NEXT_OPCODE();
                   4164: }
                   4165: 
                   4166: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4167: {
1.1.1.2   misho    4168:        USE_OPLINE
1.1       misho    4169:        zend_free_op free_op2;
                   4170: 
1.1.1.2   misho    4171:        SAVE_OPLINE();
                   4172:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   4173:                opline->op1.zv,
                   4174:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4175: 
                   4176:        zval_dtor(free_op2.var);
1.1.1.2   misho    4177:        CHECK_EXCEPTION();
1.1       misho    4178:        ZEND_VM_NEXT_OPCODE();
                   4179: }
                   4180: 
                   4181: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4182: {
1.1.1.2   misho    4183:        USE_OPLINE
1.1       misho    4184:        zend_free_op free_op2;
                   4185: 
1.1.1.2   misho    4186:        SAVE_OPLINE();
                   4187:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   4188:                opline->op1.zv,
                   4189:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4190: 
                   4191:        zval_dtor(free_op2.var);
1.1.1.2   misho    4192:        CHECK_EXCEPTION();
1.1       misho    4193:        ZEND_VM_NEXT_OPCODE();
                   4194: }
                   4195: 
                   4196: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4197: {
1.1.1.2   misho    4198:        USE_OPLINE
1.1       misho    4199:        zend_free_op free_op2;
                   4200: 
1.1.1.2   misho    4201:        SAVE_OPLINE();
                   4202:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   4203:                opline->op1.zv,
                   4204:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4205: 
                   4206:        zval_dtor(free_op2.var);
1.1.1.2   misho    4207:        CHECK_EXCEPTION();
1.1       misho    4208:        ZEND_VM_NEXT_OPCODE();
                   4209: }
                   4210: 
                   4211: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4212: {
1.1.1.2   misho    4213:        USE_OPLINE
1.1       misho    4214:        zend_free_op free_op2;
                   4215: 
1.1.1.2   misho    4216:        SAVE_OPLINE();
                   4217:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   4218:                opline->op1.zv,
                   4219:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4220: 
                   4221:        zval_dtor(free_op2.var);
1.1.1.2   misho    4222:        CHECK_EXCEPTION();
1.1       misho    4223:        ZEND_VM_NEXT_OPCODE();
                   4224: }
                   4225: 
                   4226: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4227: {
1.1.1.2   misho    4228:        USE_OPLINE
1.1       misho    4229:        zval *function_name;
                   4230:        zend_class_entry *ce;
                   4231: 
1.1.1.2   misho    4232:        SAVE_OPLINE();
1.1       misho    4233:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   4234: 
                   4235:        if (IS_CONST == IS_CONST) {
                   4236:                /* no function found. try a static method in class */
1.1.1.2   misho    4237:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   4238:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   4239:                } else {
                   4240:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    4241:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   4242:                                HANDLE_EXCEPTION();
                   4243:                        }
1.1.1.2   misho    4244:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    4245:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    4246:                        }
                   4247:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    4248:                }
                   4249:                EX(called_scope) = ce;
                   4250:        } else {
1.1.1.2   misho    4251:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    4252: 
1.1.1.2   misho    4253:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    4254:                        EX(called_scope) = EG(called_scope);
                   4255:                } else {
                   4256:                        EX(called_scope) = ce;
                   4257:                }
                   4258:        }
1.1.1.2   misho    4259: 
                   4260:        if (IS_CONST == IS_CONST &&
                   4261:            IS_TMP_VAR == IS_CONST &&
                   4262:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   4263:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   4264:        } else if (IS_CONST != IS_CONST &&
                   4265:                   IS_TMP_VAR == IS_CONST &&
                   4266:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   4267:                /* do nothing */
                   4268:        } else if (IS_TMP_VAR != IS_UNUSED) {
1.1       misho    4269:                char *function_name_strval = NULL;
                   4270:                int function_name_strlen = 0;
                   4271:                zend_free_op free_op2;
                   4272: 
                   4273:                if (IS_TMP_VAR == IS_CONST) {
1.1.1.2   misho    4274:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   4275:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    4276:                } else {
1.1.1.2   misho    4277:                        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    4278: 
1.1.1.2   misho    4279:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    4280:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   4281:                        } else {
                   4282:                                function_name_strval = Z_STRVAL_P(function_name);
                   4283:                                function_name_strlen = Z_STRLEN_P(function_name);
                   4284:                        }
                   4285:                }
                   4286: 
                   4287:                if (function_name_strval) {
                   4288:                        if (ce->get_static_method) {
                   4289:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   4290:                        } else {
1.1.1.2   misho    4291:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    4292:                        }
1.1.1.2   misho    4293:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    4294:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   4295:                        }
1.1.1.2   misho    4296:                        if (IS_TMP_VAR == IS_CONST &&
                   4297:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   4298:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   4299:                                if (IS_CONST == IS_CONST) {
                   4300:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   4301:                                } else {
                   4302:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   4303:                                }
                   4304:                        }
1.1       misho    4305:                }
                   4306:                if (IS_TMP_VAR != IS_CONST) {
                   4307:                        zval_dtor(free_op2.var);
                   4308:                }
                   4309:        } else {
1.1.1.2   misho    4310:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    4311:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   4312:                }
                   4313:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    4314:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    4315:                }
                   4316:                EX(fbc) = ce->constructor;
                   4317:        }
                   4318: 
                   4319:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   4320:                EX(object) = NULL;
                   4321:        } else {
                   4322:                if (EG(This) &&
                   4323:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   4324:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   4325:                    /* We are calling method of the other (incompatible) class,
                   4326:                       but passing $this. This is done for compatibility with php-4. */
                   4327:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    4328:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    4329:                        } else {
                   4330:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    4331:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    4332:                        }
                   4333:                }
                   4334:                if ((EX(object) = EG(This))) {
                   4335:                        Z_ADDREF_P(EX(object));
                   4336:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   4337:                }
                   4338:        }
                   4339: 
1.1.1.2   misho    4340:        CHECK_EXCEPTION();
1.1       misho    4341:        ZEND_VM_NEXT_OPCODE();
                   4342: }
                   4343: 
                   4344: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4345: {
1.1.1.2   misho    4346:        USE_OPLINE
1.1       misho    4347:        zend_free_op free_op2;
                   4348: 
1.1.1.2   misho    4349:        SAVE_OPLINE();
1.1       misho    4350:        if (IS_CONST==IS_VAR) {
1.1.1.2   misho    4351:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    4352:        }
1.1.1.2   misho    4353:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   4354:                                 opline->op1.zv,
                   4355:                                 _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4356: 
                   4357:        zval_dtor(free_op2.var);
1.1.1.2   misho    4358:        CHECK_EXCEPTION();
1.1       misho    4359:        ZEND_VM_NEXT_OPCODE();
                   4360: }
                   4361: 
                   4362: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4363: {
1.1.1.2   misho    4364:        USE_OPLINE
                   4365: 
1.1       misho    4366:        zval *expr_ptr;
                   4367: 
1.1.1.2   misho    4368:        SAVE_OPLINE();
                   4369:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
                   4370:                zval **expr_ptr_ptr = NULL;
1.1       misho    4371: 
1.1.1.2   misho    4372:                if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   4373:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   4374:                }
                   4375:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    4376:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    4377:                Z_ADDREF_P(expr_ptr);
1.1       misho    4378:        } else {
1.1.1.2   misho    4379:                expr_ptr=opline->op1.zv;
                   4380:                if (0) { /* temporary variable */
                   4381:                        zval *new_expr;
1.1       misho    4382: 
1.1.1.2   misho    4383:                        ALLOC_ZVAL(new_expr);
                   4384:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   4385:                        expr_ptr = new_expr;
                   4386:                } else if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    4387:                        zval *new_expr;
                   4388: 
                   4389:                        ALLOC_ZVAL(new_expr);
                   4390:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   4391:                        expr_ptr = new_expr;
                   4392:                        zendi_zval_copy_ctor(*expr_ptr);
                   4393:                } else {
                   4394:                        Z_ADDREF_P(expr_ptr);
                   4395:                }
                   4396:        }
1.1.1.2   misho    4397: 
                   4398:        if (IS_TMP_VAR != IS_UNUSED) {
                   4399:                zend_free_op free_op2;
                   4400:                zval *offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   4401:                ulong hval;
                   4402: 
1.1       misho    4403:                switch (Z_TYPE_P(offset)) {
                   4404:                        case IS_DOUBLE:
1.1.1.2   misho    4405:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   4406:                                goto num_index;
1.1       misho    4407:                        case IS_LONG:
                   4408:                        case IS_BOOL:
1.1.1.2   misho    4409:                                hval = Z_LVAL_P(offset);
                   4410: num_index:
                   4411:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    4412:                                break;
                   4413:                        case IS_STRING:
1.1.1.2   misho    4414:                                if (IS_TMP_VAR == IS_CONST) {
                   4415:                                        hval = Z_HASH_P(offset);
                   4416:                                } else {
                   4417:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   4418:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   4419:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   4420:                                        } else {
                   4421:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   4422:                                        }
                   4423:                                }
                   4424:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    4425:                                break;
                   4426:                        case IS_NULL:
1.1.1.2   misho    4427:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    4428:                                break;
                   4429:                        default:
                   4430:                                zend_error(E_WARNING, "Illegal offset type");
                   4431:                                zval_ptr_dtor(&expr_ptr);
                   4432:                                /* do nothing */
                   4433:                                break;
                   4434:                }
                   4435:                zval_dtor(free_op2.var);
                   4436:        } else {
1.1.1.2   misho    4437:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    4438:        }
1.1.1.2   misho    4439:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
1.1       misho    4440: 
                   4441:        } else {
                   4442: 
                   4443:        }
1.1.1.2   misho    4444:        CHECK_EXCEPTION();
1.1       misho    4445:        ZEND_VM_NEXT_OPCODE();
                   4446: }
                   4447: 
                   4448: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4449: {
1.1.1.2   misho    4450:        USE_OPLINE
1.1       misho    4451: 
1.1.1.2   misho    4452:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    4453:        if (IS_CONST == IS_UNUSED) {
                   4454:                ZEND_VM_NEXT_OPCODE();
                   4455: #if 0 || IS_CONST != IS_UNUSED
                   4456:        } else {
                   4457:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   4458: #endif
                   4459:        }
                   4460: }
                   4461: 
                   4462: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4463: {
1.1.1.2   misho    4464:        USE_OPLINE
1.1       misho    4465:        zend_free_op free_op2;
                   4466: 
1.1.1.2   misho    4467:        SAVE_OPLINE();
                   4468:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   4469:                opline->op1.zv,
                   4470:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4471: 
                   4472:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4473:        CHECK_EXCEPTION();
1.1       misho    4474:        ZEND_VM_NEXT_OPCODE();
                   4475: }
                   4476: 
                   4477: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4478: {
1.1.1.2   misho    4479:        USE_OPLINE
1.1       misho    4480:        zend_free_op free_op2;
                   4481: 
1.1.1.2   misho    4482:        SAVE_OPLINE();
                   4483:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   4484:                opline->op1.zv,
                   4485:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4486: 
                   4487:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4488:        CHECK_EXCEPTION();
1.1       misho    4489:        ZEND_VM_NEXT_OPCODE();
                   4490: }
                   4491: 
                   4492: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4493: {
1.1.1.2   misho    4494:        USE_OPLINE
1.1       misho    4495:        zend_free_op free_op2;
                   4496: 
1.1.1.2   misho    4497:        SAVE_OPLINE();
                   4498:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   4499:                opline->op1.zv,
                   4500:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4501: 
                   4502:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4503:        CHECK_EXCEPTION();
1.1       misho    4504:        ZEND_VM_NEXT_OPCODE();
                   4505: }
                   4506: 
                   4507: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4508: {
1.1.1.2   misho    4509:        USE_OPLINE
1.1       misho    4510:        zend_free_op free_op2;
                   4511: 
1.1.1.2   misho    4512:        SAVE_OPLINE();
                   4513:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   4514:                opline->op1.zv,
                   4515:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4516: 
                   4517:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4518:        CHECK_EXCEPTION();
1.1       misho    4519:        ZEND_VM_NEXT_OPCODE();
                   4520: }
                   4521: 
                   4522: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4523: {
1.1.1.2   misho    4524:        USE_OPLINE
1.1       misho    4525:        zend_free_op free_op2;
                   4526: 
1.1.1.2   misho    4527:        SAVE_OPLINE();
                   4528:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   4529:                opline->op1.zv,
                   4530:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4531: 
                   4532:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4533:        CHECK_EXCEPTION();
1.1       misho    4534:        ZEND_VM_NEXT_OPCODE();
                   4535: }
                   4536: 
                   4537: static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4538: {
1.1.1.2   misho    4539:        USE_OPLINE
1.1       misho    4540:        zend_free_op free_op2;
                   4541: 
1.1.1.2   misho    4542:        SAVE_OPLINE();
                   4543:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   4544:                opline->op1.zv,
                   4545:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4546: 
                   4547:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4548:        CHECK_EXCEPTION();
1.1       misho    4549:        ZEND_VM_NEXT_OPCODE();
                   4550: }
                   4551: 
                   4552: static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4553: {
1.1.1.2   misho    4554:        USE_OPLINE
1.1       misho    4555:        zend_free_op free_op2;
                   4556: 
1.1.1.2   misho    4557:        SAVE_OPLINE();
                   4558:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   4559:                opline->op1.zv,
                   4560:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4561: 
                   4562:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4563:        CHECK_EXCEPTION();
1.1       misho    4564:        ZEND_VM_NEXT_OPCODE();
                   4565: }
                   4566: 
                   4567: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4568: {
1.1.1.2   misho    4569:        USE_OPLINE
1.1       misho    4570:        zend_free_op free_op2;
                   4571: 
1.1.1.2   misho    4572:        SAVE_OPLINE();
                   4573:        concat_function(&EX_T(opline->result.var).tmp_var,
                   4574:                opline->op1.zv,
                   4575:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4576: 
                   4577:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4578:        CHECK_EXCEPTION();
1.1       misho    4579:        ZEND_VM_NEXT_OPCODE();
                   4580: }
                   4581: 
                   4582: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4583: {
1.1.1.2   misho    4584:        USE_OPLINE
1.1       misho    4585:        zend_free_op free_op2;
                   4586: 
1.1.1.2   misho    4587:        SAVE_OPLINE();
                   4588:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   4589:                opline->op1.zv,
                   4590:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4591: 
                   4592:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4593:        CHECK_EXCEPTION();
1.1       misho    4594:        ZEND_VM_NEXT_OPCODE();
                   4595: }
                   4596: 
                   4597: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4598: {
1.1.1.2   misho    4599:        USE_OPLINE
1.1       misho    4600:        zend_free_op free_op2;
1.1.1.2   misho    4601:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4602: 
1.1.1.2   misho    4603:        SAVE_OPLINE();
1.1       misho    4604:        is_identical_function(result,
1.1.1.2   misho    4605:                opline->op1.zv,
                   4606:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4607:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   4608: 
                   4609:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4610:        CHECK_EXCEPTION();
1.1       misho    4611:        ZEND_VM_NEXT_OPCODE();
                   4612: }
                   4613: 
                   4614: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4615: {
1.1.1.2   misho    4616:        USE_OPLINE
1.1       misho    4617:        zend_free_op free_op2;
1.1.1.2   misho    4618:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4619: 
1.1.1.2   misho    4620:        SAVE_OPLINE();
                   4621:        ZVAL_BOOL(result, fast_equal_function(result,
                   4622:                opline->op1.zv,
                   4623:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4624: 
                   4625:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4626:        CHECK_EXCEPTION();
1.1       misho    4627:        ZEND_VM_NEXT_OPCODE();
                   4628: }
                   4629: 
                   4630: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4631: {
1.1.1.2   misho    4632:        USE_OPLINE
1.1       misho    4633:        zend_free_op free_op2;
1.1.1.2   misho    4634:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4635: 
1.1.1.2   misho    4636:        SAVE_OPLINE();
                   4637:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   4638:                opline->op1.zv,
                   4639:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4640: 
                   4641:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4642:        CHECK_EXCEPTION();
1.1       misho    4643:        ZEND_VM_NEXT_OPCODE();
                   4644: }
                   4645: 
                   4646: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4647: {
1.1.1.2   misho    4648:        USE_OPLINE
1.1       misho    4649:        zend_free_op free_op2;
1.1.1.2   misho    4650:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4651: 
1.1.1.2   misho    4652:        SAVE_OPLINE();
                   4653:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   4654:                opline->op1.zv,
                   4655:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4656: 
                   4657:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4658:        CHECK_EXCEPTION();
1.1       misho    4659:        ZEND_VM_NEXT_OPCODE();
                   4660: }
                   4661: 
                   4662: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4663: {
1.1.1.2   misho    4664:        USE_OPLINE
1.1       misho    4665:        zend_free_op free_op2;
1.1.1.2   misho    4666:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    4667: 
1.1.1.2   misho    4668:        SAVE_OPLINE();
                   4669:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   4670:                opline->op1.zv,
                   4671:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    4672: 
                   4673:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4674:        CHECK_EXCEPTION();
1.1       misho    4675:        ZEND_VM_NEXT_OPCODE();
                   4676: }
                   4677: 
                   4678: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4679: {
1.1.1.2   misho    4680:        USE_OPLINE
1.1       misho    4681:        zend_free_op free_op2;
                   4682: 
1.1.1.2   misho    4683:        SAVE_OPLINE();
                   4684:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   4685:                opline->op1.zv,
                   4686:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4687: 
                   4688:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4689:        CHECK_EXCEPTION();
1.1       misho    4690:        ZEND_VM_NEXT_OPCODE();
                   4691: }
                   4692: 
                   4693: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4694: {
1.1.1.2   misho    4695:        USE_OPLINE
1.1       misho    4696:        zend_free_op free_op2;
                   4697: 
1.1.1.2   misho    4698:        SAVE_OPLINE();
                   4699:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   4700:                opline->op1.zv,
                   4701:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4702: 
                   4703:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4704:        CHECK_EXCEPTION();
1.1       misho    4705:        ZEND_VM_NEXT_OPCODE();
                   4706: }
                   4707: 
                   4708: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4709: {
1.1.1.2   misho    4710:        USE_OPLINE
1.1       misho    4711:        zend_free_op free_op2;
                   4712: 
1.1.1.2   misho    4713:        SAVE_OPLINE();
                   4714:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   4715:                opline->op1.zv,
                   4716:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4717: 
                   4718:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4719:        CHECK_EXCEPTION();
1.1       misho    4720:        ZEND_VM_NEXT_OPCODE();
                   4721: }
                   4722: 
                   4723: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4724: {
1.1.1.2   misho    4725:        USE_OPLINE
1.1       misho    4726:        zend_free_op free_op2;
                   4727: 
1.1.1.2   misho    4728:        SAVE_OPLINE();
                   4729:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   4730:                opline->op1.zv,
                   4731:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    4732: 
                   4733:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    4734:        CHECK_EXCEPTION();
1.1       misho    4735:        ZEND_VM_NEXT_OPCODE();
                   4736: }
                   4737: 
1.1.1.2   misho    4738: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    4739: {
1.1.1.2   misho    4740:        USE_OPLINE
                   4741:        zend_free_op free_op1;
                   4742:        zval *varname;
                   4743:        zval **retval;
                   4744:        zval tmp_varname;
                   4745:        HashTable *target_symbol_table;
                   4746:        ulong hash_value;
1.1       misho    4747: 
1.1.1.2   misho    4748:        SAVE_OPLINE();
                   4749:        varname = opline->op1.zv;
1.1       misho    4750: 
1.1.1.2   misho    4751:        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   4752:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   4753:                zval_copy_ctor(&tmp_varname);
                   4754:                Z_SET_REFCOUNT(tmp_varname, 1);
                   4755:                Z_UNSET_ISREF(tmp_varname);
                   4756:                convert_to_string(&tmp_varname);
                   4757:                varname = &tmp_varname;
1.1       misho    4758:        }
                   4759: 
1.1.1.2   misho    4760:        if (IS_VAR != IS_UNUSED) {
                   4761:                zend_class_entry *ce;
1.1       misho    4762: 
1.1.1.2   misho    4763:                if (IS_VAR == IS_CONST) {
                   4764:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   4765:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
1.1       misho    4766:                        } else {
1.1.1.2   misho    4767:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   4768:                                if (UNEXPECTED(ce == NULL)) {
                   4769:                                        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   4770:                                                zval_dtor(&tmp_varname);
                   4771:                                        }
1.1       misho    4772: 
1.1.1.2   misho    4773:                                        CHECK_EXCEPTION();
                   4774:                                        ZEND_VM_NEXT_OPCODE();
                   4775:                                }
                   4776:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
1.1       misho    4777:                        }
1.1.1.2   misho    4778:                } else {
                   4779:                        ce = EX_T(opline->op2.var).class_entry;
1.1       misho    4780:                }
1.1.1.2   misho    4781:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
1.1       misho    4782: 
                   4783:        } else {
1.1.1.2   misho    4784:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   4785: /*
                   4786:                if (!target_symbol_table) {
                   4787:                        CHECK_EXCEPTION();
                   4788:                        ZEND_VM_NEXT_OPCODE();
1.1       misho    4789:                }
1.1.1.2   misho    4790: */
                   4791:                if (IS_CONST == IS_CONST) {
                   4792:                        hash_value = Z_HASH_P(varname);
                   4793:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   4794:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   4795:                } else {
                   4796:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
1.1       misho    4797:                }
                   4798: 
1.1.1.2   misho    4799:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   4800:                        switch (type) {
                   4801:                                case BP_VAR_R:
                   4802:                                case BP_VAR_UNSET:
                   4803:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   4804:                                        /* break missing intentionally */
                   4805:                                case BP_VAR_IS:
                   4806:                                        retval = &EG(uninitialized_zval_ptr);
                   4807:                                        break;
                   4808:                                case BP_VAR_RW:
                   4809:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   4810:                                        /* break missing intentionally */
                   4811:                                case BP_VAR_W:
                   4812:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   4813:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   4814:                                        break;
                   4815:                                EMPTY_SWITCH_DEFAULT_CASE()
1.1       misho    4816:                        }
                   4817:                }
1.1.1.2   misho    4818:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   4819:                        case ZEND_FETCH_GLOBAL:
                   4820:                                if (IS_CONST != IS_TMP_VAR) {
1.1       misho    4821: 
1.1.1.2   misho    4822:                                }
                   4823:                                break;
                   4824:                        case ZEND_FETCH_LOCAL:
1.1       misho    4825: 
1.1.1.2   misho    4826:                                break;
                   4827:                        case ZEND_FETCH_STATIC:
                   4828:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   4829:                                break;
                   4830:                        case ZEND_FETCH_GLOBAL_LOCK:
                   4831:                                if (IS_CONST == IS_VAR && !free_op1.var) {
                   4832:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   4833:                                }
                   4834:                                break;
1.1       misho    4835:                }
                   4836:        }
                   4837: 
                   4838: 
1.1.1.2   misho    4839:        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   4840:                zval_dtor(&tmp_varname);
                   4841:        }
                   4842:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   4843:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   4844:        }
                   4845:        PZVAL_LOCK(*retval);
                   4846:        switch (type) {
                   4847:                case BP_VAR_R:
                   4848:                case BP_VAR_IS:
                   4849:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   4850:                        break;
                   4851:                case BP_VAR_UNSET: {
                   4852:                        zend_free_op free_res;
                   4853: 
                   4854:                        PZVAL_UNLOCK(*retval, &free_res);
                   4855:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   4856:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   4857:                        }
                   4858:                        PZVAL_LOCK(*retval);
                   4859:                        FREE_OP_VAR_PTR(free_res);
                   4860:                }
                   4861:                /* break missing intentionally */
                   4862:                default:
                   4863:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   4864:                        break;
1.1       misho    4865:        }
1.1.1.2   misho    4866:        CHECK_EXCEPTION();
1.1       misho    4867:        ZEND_VM_NEXT_OPCODE();
                   4868: }
                   4869: 
1.1.1.2   misho    4870: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    4871: {
1.1.1.2   misho    4872:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   4873: }
1.1       misho    4874: 
1.1.1.2   misho    4875: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4876: {
                   4877:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   4878: }
1.1       misho    4879: 
1.1.1.2   misho    4880: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4881: {
                   4882:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   4883: }
1.1       misho    4884: 
1.1.1.2   misho    4885: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4886: {
                   4887:        USE_OPLINE
1.1       misho    4888: 
1.1.1.2   misho    4889:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    4890: }
                   4891: 
1.1.1.2   misho    4892: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    4893: {
1.1.1.2   misho    4894:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   4895: }
1.1       misho    4896: 
1.1.1.2   misho    4897: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   4898: {
                   4899:        return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    4900: }
                   4901: 
1.1.1.2   misho    4902: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    4903: {
1.1.1.2   misho    4904:        USE_OPLINE
1.1       misho    4905:        zval *function_name;
                   4906:        zend_class_entry *ce;
                   4907: 
1.1.1.2   misho    4908:        SAVE_OPLINE();
1.1       misho    4909:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   4910: 
                   4911:        if (IS_CONST == IS_CONST) {
                   4912:                /* no function found. try a static method in class */
1.1.1.2   misho    4913:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   4914:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   4915:                } else {
                   4916:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    4917:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   4918:                                HANDLE_EXCEPTION();
                   4919:                        }
1.1.1.2   misho    4920:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    4921:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    4922:                        }
                   4923:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    4924:                }
                   4925:                EX(called_scope) = ce;
                   4926:        } else {
1.1.1.2   misho    4927:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    4928: 
1.1.1.2   misho    4929:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    4930:                        EX(called_scope) = EG(called_scope);
                   4931:                } else {
                   4932:                        EX(called_scope) = ce;
                   4933:                }
                   4934:        }
1.1.1.2   misho    4935: 
                   4936:        if (IS_CONST == IS_CONST &&
                   4937:            IS_VAR == IS_CONST &&
                   4938:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   4939:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   4940:        } else if (IS_CONST != IS_CONST &&
                   4941:                   IS_VAR == IS_CONST &&
                   4942:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   4943:                /* do nothing */
                   4944:        } else if (IS_VAR != IS_UNUSED) {
1.1       misho    4945:                char *function_name_strval = NULL;
                   4946:                int function_name_strlen = 0;
1.1.1.2   misho    4947:                zend_free_op free_op2;
1.1       misho    4948: 
1.1.1.2   misho    4949:                if (IS_VAR == IS_CONST) {
                   4950:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   4951:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    4952:                } else {
1.1.1.2   misho    4953:                        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    4954: 
1.1.1.2   misho    4955:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    4956:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   4957:                        } else {
                   4958:                                function_name_strval = Z_STRVAL_P(function_name);
                   4959:                                function_name_strlen = Z_STRLEN_P(function_name);
                   4960:                        }
                   4961:                }
                   4962: 
                   4963:                if (function_name_strval) {
                   4964:                        if (ce->get_static_method) {
                   4965:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   4966:                        } else {
1.1.1.2   misho    4967:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    4968:                        }
1.1.1.2   misho    4969:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    4970:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   4971:                        }
1.1.1.2   misho    4972:                        if (IS_VAR == IS_CONST &&
                   4973:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   4974:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   4975:                                if (IS_CONST == IS_CONST) {
                   4976:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   4977:                                } else {
                   4978:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   4979:                                }
                   4980:                        }
1.1       misho    4981:                }
1.1.1.2   misho    4982:                if (IS_VAR != IS_CONST) {
                   4983:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    4984:                }
                   4985:        } else {
1.1.1.2   misho    4986:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    4987:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   4988:                }
                   4989:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    4990:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    4991:                }
                   4992:                EX(fbc) = ce->constructor;
                   4993:        }
                   4994: 
                   4995:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   4996:                EX(object) = NULL;
                   4997:        } else {
                   4998:                if (EG(This) &&
                   4999:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   5000:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   5001:                    /* We are calling method of the other (incompatible) class,
                   5002:                       but passing $this. This is done for compatibility with php-4. */
                   5003:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    5004:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    5005:                        } else {
                   5006:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    5007:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    5008:                        }
                   5009:                }
                   5010:                if ((EX(object) = EG(This))) {
                   5011:                        Z_ADDREF_P(EX(object));
                   5012:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   5013:                }
                   5014:        }
                   5015: 
1.1.1.2   misho    5016:        CHECK_EXCEPTION();
1.1       misho    5017:        ZEND_VM_NEXT_OPCODE();
                   5018: }
                   5019: 
1.1.1.2   misho    5020: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   5021: {
                   5022:        USE_OPLINE
                   5023:        zend_free_op free_op2;
                   5024: 
                   5025:        SAVE_OPLINE();
                   5026:        if (IS_CONST==IS_VAR) {
                   5027:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
                   5028:        }
                   5029:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   5030:                                 opline->op1.zv,
                   5031:                                 _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   5032: 
                   5033:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   5034:        CHECK_EXCEPTION();
                   5035:        ZEND_VM_NEXT_OPCODE();
                   5036: }
                   5037: 
                   5038: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5039: {
1.1.1.2   misho    5040:        USE_OPLINE
1.1       misho    5041: 
                   5042:        zval *expr_ptr;
                   5043: 
1.1.1.2   misho    5044:        SAVE_OPLINE();
                   5045:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
                   5046:                zval **expr_ptr_ptr = NULL;
1.1       misho    5047: 
1.1.1.2   misho    5048:                if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   5049:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   5050:                }
                   5051:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    5052:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    5053:                Z_ADDREF_P(expr_ptr);
1.1       misho    5054:        } else {
1.1.1.2   misho    5055:                expr_ptr=opline->op1.zv;
                   5056:                if (0) { /* temporary variable */
                   5057:                        zval *new_expr;
1.1       misho    5058: 
1.1.1.2   misho    5059:                        ALLOC_ZVAL(new_expr);
                   5060:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   5061:                        expr_ptr = new_expr;
                   5062:                } else if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    5063:                        zval *new_expr;
                   5064: 
                   5065:                        ALLOC_ZVAL(new_expr);
                   5066:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   5067:                        expr_ptr = new_expr;
                   5068:                        zendi_zval_copy_ctor(*expr_ptr);
                   5069:                } else {
                   5070:                        Z_ADDREF_P(expr_ptr);
                   5071:                }
                   5072:        }
1.1.1.2   misho    5073: 
                   5074:        if (IS_VAR != IS_UNUSED) {
                   5075:                zend_free_op free_op2;
                   5076:                zval *offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   5077:                ulong hval;
                   5078: 
1.1       misho    5079:                switch (Z_TYPE_P(offset)) {
                   5080:                        case IS_DOUBLE:
1.1.1.2   misho    5081:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   5082:                                goto num_index;
1.1       misho    5083:                        case IS_LONG:
                   5084:                        case IS_BOOL:
1.1.1.2   misho    5085:                                hval = Z_LVAL_P(offset);
                   5086: num_index:
                   5087:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5088:                                break;
                   5089:                        case IS_STRING:
1.1.1.2   misho    5090:                                if (IS_VAR == IS_CONST) {
                   5091:                                        hval = Z_HASH_P(offset);
                   5092:                                } else {
                   5093:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   5094:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   5095:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   5096:                                        } else {
                   5097:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   5098:                                        }
                   5099:                                }
                   5100:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5101:                                break;
                   5102:                        case IS_NULL:
1.1.1.2   misho    5103:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5104:                                break;
                   5105:                        default:
                   5106:                                zend_error(E_WARNING, "Illegal offset type");
                   5107:                                zval_ptr_dtor(&expr_ptr);
                   5108:                                /* do nothing */
                   5109:                                break;
                   5110:                }
1.1.1.2   misho    5111:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    5112:        } else {
1.1.1.2   misho    5113:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5114:        }
1.1.1.2   misho    5115:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
1.1       misho    5116: 
                   5117:        } else {
                   5118: 
                   5119:        }
1.1.1.2   misho    5120:        CHECK_EXCEPTION();
1.1       misho    5121:        ZEND_VM_NEXT_OPCODE();
                   5122: }
                   5123: 
1.1.1.2   misho    5124: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5125: {
1.1.1.2   misho    5126:        USE_OPLINE
1.1       misho    5127: 
1.1.1.2   misho    5128:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    5129:        if (IS_CONST == IS_UNUSED) {
                   5130:                ZEND_VM_NEXT_OPCODE();
                   5131: #if 0 || IS_CONST != IS_UNUSED
                   5132:        } else {
1.1.1.2   misho    5133:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5134: #endif
                   5135:        }
                   5136: }
                   5137: 
1.1.1.2   misho    5138: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5139: {
1.1.1.2   misho    5140:        USE_OPLINE
                   5141:        zval tmp, *varname;
                   5142:        HashTable *target_symbol_table;
1.1       misho    5143: 
                   5144: 
1.1.1.2   misho    5145:        SAVE_OPLINE();
                   5146:        if (IS_CONST == IS_CV &&
                   5147:            IS_VAR == IS_UNUSED &&
                   5148:            (opline->extended_value & ZEND_QUICK_SET)) {
                   5149:                if (EG(active_symbol_table)) {
                   5150:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
1.1       misho    5151: 
1.1.1.2   misho    5152:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   5153:                        EX_CV(opline->op1.var) = NULL;
                   5154:                } else if (EX_CV(opline->op1.var)) {
                   5155:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   5156:                        EX_CV(opline->op1.var) = NULL;
                   5157:                }
                   5158:                CHECK_EXCEPTION();
                   5159:                ZEND_VM_NEXT_OPCODE();
                   5160:        }
1.1       misho    5161: 
1.1.1.2   misho    5162:        varname = opline->op1.zv;
1.1       misho    5163: 
1.1.1.2   misho    5164:        if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   5165:                ZVAL_COPY_VALUE(&tmp, varname);
                   5166:                zval_copy_ctor(&tmp);
                   5167:                convert_to_string(&tmp);
                   5168:                varname = &tmp;
                   5169:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5170:                Z_ADDREF_P(varname);
                   5171:        }
1.1       misho    5172: 
1.1.1.2   misho    5173:        if (IS_VAR != IS_UNUSED) {
                   5174:                zend_class_entry *ce;
1.1       misho    5175: 
1.1.1.2   misho    5176:                if (IS_VAR == IS_CONST) {
                   5177:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5178:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   5179:                        } else {
                   5180:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    5181:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    5182:                                        if (IS_CONST != IS_CONST && varname == &tmp) {
                   5183:                                                zval_dtor(&tmp);
                   5184:                                        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5185:                                                zval_ptr_dtor(&varname);
                   5186:                                        }
1.1       misho    5187: 
1.1.1.4   misho    5188:                                        HANDLE_EXCEPTION();
                   5189:                                }
                   5190:                                if (UNEXPECTED(ce == NULL)) {
                   5191:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    5192:                                }
                   5193:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   5194:                        }
                   5195:                } else {
                   5196:                        ce = EX_T(opline->op2.var).class_entry;
                   5197:                }
                   5198:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   5199:        } else {
                   5200:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
1.1       misho    5201: 
1.1.1.2   misho    5202:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   5203:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   5204:        }
1.1       misho    5205: 
1.1.1.2   misho    5206:        if (IS_CONST != IS_CONST && varname == &tmp) {
                   5207:                zval_dtor(&tmp);
                   5208:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5209:                zval_ptr_dtor(&varname);
                   5210:        }
1.1       misho    5211: 
1.1.1.2   misho    5212:        CHECK_EXCEPTION();
1.1       misho    5213:        ZEND_VM_NEXT_OPCODE();
                   5214: }
                   5215: 
1.1.1.2   misho    5216: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5217: {
1.1.1.2   misho    5218:        USE_OPLINE
                   5219:        zval **value;
                   5220:        zend_bool isset = 1;
1.1       misho    5221: 
1.1.1.2   misho    5222:        SAVE_OPLINE();
                   5223:        if (IS_CONST == IS_CV &&
                   5224:            IS_VAR == IS_UNUSED &&
                   5225:            (opline->extended_value & ZEND_QUICK_SET)) {
                   5226:                if (EX_CV(opline->op1.var)) {
                   5227:                        value = EX_CV(opline->op1.var);
                   5228:                } else if (EG(active_symbol_table)) {
                   5229:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
1.1       misho    5230: 
1.1.1.2   misho    5231:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   5232:                                isset = 0;
                   5233:                        }
                   5234:                } else {
                   5235:                        isset = 0;
                   5236:                }
                   5237:        } else {
                   5238:                HashTable *target_symbol_table;
1.1       misho    5239: 
1.1.1.2   misho    5240:                zval tmp, *varname = opline->op1.zv;
1.1       misho    5241: 
1.1.1.2   misho    5242:                if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   5243:                        ZVAL_COPY_VALUE(&tmp, varname);
                   5244:                        zval_copy_ctor(&tmp);
                   5245:                        convert_to_string(&tmp);
                   5246:                        varname = &tmp;
                   5247:                }
1.1       misho    5248: 
1.1.1.2   misho    5249:                if (IS_VAR != IS_UNUSED) {
                   5250:                        zend_class_entry *ce;
1.1       misho    5251: 
1.1.1.2   misho    5252:                        if (IS_VAR == IS_CONST) {
                   5253:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5254:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   5255:                                } else {
                   5256:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   5257:                                        if (UNEXPECTED(ce == NULL)) {
                   5258:                                                CHECK_EXCEPTION();
                   5259:                                                ZEND_VM_NEXT_OPCODE();
                   5260:                                        }
                   5261:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   5262:                                }
                   5263:                        } else {
                   5264:                                ce = EX_T(opline->op2.var).class_entry;
                   5265:                        }
                   5266:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   5267:                        if (!value) {
                   5268:                                isset = 0;
                   5269:                        }
                   5270:                } else {
                   5271:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   5272:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   5273:                                isset = 0;
                   5274:                        }
                   5275:                }
1.1       misho    5276: 
1.1.1.2   misho    5277:                if (IS_CONST != IS_CONST && varname == &tmp) {
                   5278:                        zval_dtor(&tmp);
                   5279:                }
1.1       misho    5280: 
1.1.1.2   misho    5281:        }
1.1       misho    5282: 
1.1.1.2   misho    5283:        if (opline->extended_value & ZEND_ISSET) {
                   5284:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   5285:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   5286:                } else {
                   5287:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   5288:                }
                   5289:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   5290:                if (!isset || !i_zend_is_true(*value)) {
                   5291:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   5292:                } else {
                   5293:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   5294:                }
                   5295:        }
1.1       misho    5296: 
1.1.1.2   misho    5297:        CHECK_EXCEPTION();
1.1       misho    5298:        ZEND_VM_NEXT_OPCODE();
                   5299: }
                   5300: 
1.1.1.2   misho    5301: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5302: {
1.1.1.2   misho    5303:        USE_OPLINE
                   5304:        zend_free_op free_op1;
                   5305:        zval *varname;
                   5306:        zval **retval;
                   5307:        zval tmp_varname;
                   5308:        HashTable *target_symbol_table;
                   5309:        ulong hash_value;
1.1       misho    5310: 
1.1.1.2   misho    5311:        SAVE_OPLINE();
                   5312:        varname = opline->op1.zv;
1.1       misho    5313: 
1.1.1.2   misho    5314:        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   5315:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   5316:                zval_copy_ctor(&tmp_varname);
                   5317:                Z_SET_REFCOUNT(tmp_varname, 1);
                   5318:                Z_UNSET_ISREF(tmp_varname);
                   5319:                convert_to_string(&tmp_varname);
                   5320:                varname = &tmp_varname;
                   5321:        }
1.1       misho    5322: 
1.1.1.2   misho    5323:        if (IS_UNUSED != IS_UNUSED) {
                   5324:                zend_class_entry *ce;
1.1       misho    5325: 
1.1.1.2   misho    5326:                if (IS_UNUSED == IS_CONST) {
                   5327:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5328:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   5329:                        } else {
                   5330:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   5331:                                if (UNEXPECTED(ce == NULL)) {
                   5332:                                        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   5333:                                                zval_dtor(&tmp_varname);
                   5334:                                        }
1.1       misho    5335: 
1.1.1.2   misho    5336:                                        CHECK_EXCEPTION();
                   5337:                                        ZEND_VM_NEXT_OPCODE();
                   5338:                                }
                   5339:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   5340:                        }
                   5341:                } else {
                   5342:                        ce = EX_T(opline->op2.var).class_entry;
                   5343:                }
                   5344:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
1.1       misho    5345: 
1.1.1.2   misho    5346:        } else {
                   5347:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   5348: /*
                   5349:                if (!target_symbol_table) {
                   5350:                        CHECK_EXCEPTION();
                   5351:                        ZEND_VM_NEXT_OPCODE();
                   5352:                }
                   5353: */
                   5354:                if (IS_CONST == IS_CONST) {
                   5355:                        hash_value = Z_HASH_P(varname);
                   5356:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   5357:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   5358:                } else {
                   5359:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   5360:                }
1.1       misho    5361: 
1.1.1.2   misho    5362:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   5363:                        switch (type) {
                   5364:                                case BP_VAR_R:
                   5365:                                case BP_VAR_UNSET:
                   5366:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   5367:                                        /* break missing intentionally */
                   5368:                                case BP_VAR_IS:
                   5369:                                        retval = &EG(uninitialized_zval_ptr);
                   5370:                                        break;
                   5371:                                case BP_VAR_RW:
                   5372:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   5373:                                        /* break missing intentionally */
                   5374:                                case BP_VAR_W:
                   5375:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   5376:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   5377:                                        break;
                   5378:                                EMPTY_SWITCH_DEFAULT_CASE()
                   5379:                        }
                   5380:                }
                   5381:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   5382:                        case ZEND_FETCH_GLOBAL:
                   5383:                                if (IS_CONST != IS_TMP_VAR) {
1.1       misho    5384: 
1.1.1.2   misho    5385:                                }
                   5386:                                break;
                   5387:                        case ZEND_FETCH_LOCAL:
1.1       misho    5388: 
1.1.1.2   misho    5389:                                break;
                   5390:                        case ZEND_FETCH_STATIC:
                   5391:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   5392:                                break;
                   5393:                        case ZEND_FETCH_GLOBAL_LOCK:
                   5394:                                if (IS_CONST == IS_VAR && !free_op1.var) {
                   5395:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   5396:                                }
                   5397:                                break;
                   5398:                }
                   5399:        }
1.1       misho    5400: 
                   5401: 
1.1.1.2   misho    5402:        if (IS_CONST != IS_CONST && varname == &tmp_varname) {
                   5403:                zval_dtor(&tmp_varname);
                   5404:        }
                   5405:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   5406:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   5407:        }
                   5408:        PZVAL_LOCK(*retval);
                   5409:        switch (type) {
                   5410:                case BP_VAR_R:
                   5411:                case BP_VAR_IS:
                   5412:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   5413:                        break;
                   5414:                case BP_VAR_UNSET: {
                   5415:                        zend_free_op free_res;
                   5416: 
                   5417:                        PZVAL_UNLOCK(*retval, &free_res);
                   5418:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   5419:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   5420:                        }
                   5421:                        PZVAL_LOCK(*retval);
                   5422:                        FREE_OP_VAR_PTR(free_res);
                   5423:                }
                   5424:                /* break missing intentionally */
                   5425:                default:
                   5426:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   5427:                        break;
                   5428:        }
                   5429:        CHECK_EXCEPTION();
1.1       misho    5430:        ZEND_VM_NEXT_OPCODE();
                   5431: }
                   5432: 
1.1.1.2   misho    5433: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5434: {
1.1.1.2   misho    5435:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5436: }
                   5437: 
1.1.1.2   misho    5438: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5439: {
1.1.1.2   misho    5440:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5441: }
                   5442: 
1.1.1.2   misho    5443: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5444: {
1.1.1.2   misho    5445:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5446: }
                   5447: 
1.1.1.2   misho    5448: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5449: {
1.1.1.2   misho    5450:        USE_OPLINE
1.1       misho    5451: 
1.1.1.2   misho    5452:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5453: }
                   5454: 
1.1.1.2   misho    5455: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5456: {
1.1.1.2   misho    5457:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5458: }
                   5459: 
1.1.1.2   misho    5460: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5461: {
1.1.1.2   misho    5462:        return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5463: }
                   5464: 
1.1.1.2   misho    5465: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5466: {
1.1.1.2   misho    5467:        USE_OPLINE
1.1       misho    5468:        zval *function_name;
                   5469:        zend_class_entry *ce;
                   5470: 
1.1.1.2   misho    5471:        SAVE_OPLINE();
1.1       misho    5472:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   5473: 
                   5474:        if (IS_CONST == IS_CONST) {
                   5475:                /* no function found. try a static method in class */
1.1.1.2   misho    5476:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   5477:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   5478:                } else {
                   5479:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    5480:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   5481:                                HANDLE_EXCEPTION();
                   5482:                        }
1.1.1.2   misho    5483:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    5484:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    5485:                        }
                   5486:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    5487:                }
                   5488:                EX(called_scope) = ce;
                   5489:        } else {
1.1.1.2   misho    5490:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    5491: 
1.1.1.2   misho    5492:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    5493:                        EX(called_scope) = EG(called_scope);
                   5494:                } else {
                   5495:                        EX(called_scope) = ce;
                   5496:                }
                   5497:        }
1.1.1.2   misho    5498: 
                   5499:        if (IS_CONST == IS_CONST &&
                   5500:            IS_UNUSED == IS_CONST &&
                   5501:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5502:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   5503:        } else if (IS_CONST != IS_CONST &&
                   5504:                   IS_UNUSED == IS_CONST &&
                   5505:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   5506:                /* do nothing */
                   5507:        } else if (IS_UNUSED != IS_UNUSED) {
1.1       misho    5508:                char *function_name_strval = NULL;
                   5509:                int function_name_strlen = 0;
                   5510: 
                   5511: 
1.1.1.2   misho    5512:                if (IS_UNUSED == IS_CONST) {
                   5513:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   5514:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    5515:                } else {
1.1.1.2   misho    5516:                        function_name = NULL;
1.1       misho    5517: 
1.1.1.2   misho    5518:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    5519:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   5520:                        } else {
                   5521:                                function_name_strval = Z_STRVAL_P(function_name);
                   5522:                                function_name_strlen = Z_STRLEN_P(function_name);
                   5523:                        }
                   5524:                }
                   5525: 
                   5526:                if (function_name_strval) {
                   5527:                        if (ce->get_static_method) {
                   5528:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   5529:                        } else {
1.1.1.2   misho    5530:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_UNUSED == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    5531:                        }
1.1.1.2   misho    5532:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    5533:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   5534:                        }
1.1.1.2   misho    5535:                        if (IS_UNUSED == IS_CONST &&
                   5536:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   5537:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   5538:                                if (IS_CONST == IS_CONST) {
                   5539:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   5540:                                } else {
                   5541:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   5542:                                }
                   5543:                        }
1.1       misho    5544:                }
1.1.1.2   misho    5545:                if (IS_UNUSED != IS_CONST) {
1.1       misho    5546: 
                   5547:                }
                   5548:        } else {
1.1.1.2   misho    5549:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    5550:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   5551:                }
                   5552:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    5553:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    5554:                }
                   5555:                EX(fbc) = ce->constructor;
                   5556:        }
                   5557: 
                   5558:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   5559:                EX(object) = NULL;
                   5560:        } else {
                   5561:                if (EG(This) &&
                   5562:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   5563:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   5564:                    /* We are calling method of the other (incompatible) class,
                   5565:                       but passing $this. This is done for compatibility with php-4. */
                   5566:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    5567:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    5568:                        } else {
                   5569:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    5570:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    5571:                        }
                   5572:                }
                   5573:                if ((EX(object) = EG(This))) {
                   5574:                        Z_ADDREF_P(EX(object));
                   5575:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   5576:                }
                   5577:        }
                   5578: 
1.1.1.2   misho    5579:        CHECK_EXCEPTION();
1.1       misho    5580:        ZEND_VM_NEXT_OPCODE();
                   5581: }
                   5582: 
1.1.1.2   misho    5583: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5584: {
1.1.1.2   misho    5585:        USE_OPLINE
1.1       misho    5586: 
                   5587:        zval *expr_ptr;
                   5588: 
1.1.1.2   misho    5589:        SAVE_OPLINE();
                   5590:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
                   5591:                zval **expr_ptr_ptr = NULL;
1.1       misho    5592: 
1.1.1.2   misho    5593:                if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   5594:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   5595:                }
                   5596:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    5597:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    5598:                Z_ADDREF_P(expr_ptr);
1.1       misho    5599:        } else {
1.1.1.2   misho    5600:                expr_ptr=opline->op1.zv;
                   5601:                if (0) { /* temporary variable */
                   5602:                        zval *new_expr;
1.1       misho    5603: 
1.1.1.2   misho    5604:                        ALLOC_ZVAL(new_expr);
                   5605:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   5606:                        expr_ptr = new_expr;
                   5607:                } else if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    5608:                        zval *new_expr;
                   5609: 
                   5610:                        ALLOC_ZVAL(new_expr);
                   5611:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   5612:                        expr_ptr = new_expr;
                   5613:                        zendi_zval_copy_ctor(*expr_ptr);
                   5614:                } else {
                   5615:                        Z_ADDREF_P(expr_ptr);
                   5616:                }
                   5617:        }
1.1.1.2   misho    5618: 
                   5619:        if (IS_UNUSED != IS_UNUSED) {
                   5620: 
                   5621:                zval *offset = NULL;
                   5622:                ulong hval;
                   5623: 
1.1       misho    5624:                switch (Z_TYPE_P(offset)) {
                   5625:                        case IS_DOUBLE:
1.1.1.2   misho    5626:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   5627:                                goto num_index;
1.1       misho    5628:                        case IS_LONG:
                   5629:                        case IS_BOOL:
1.1.1.2   misho    5630:                                hval = Z_LVAL_P(offset);
                   5631: num_index:
                   5632:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5633:                                break;
                   5634:                        case IS_STRING:
1.1.1.2   misho    5635:                                if (IS_UNUSED == IS_CONST) {
                   5636:                                        hval = Z_HASH_P(offset);
                   5637:                                } else {
                   5638:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   5639:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   5640:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   5641:                                        } else {
                   5642:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   5643:                                        }
                   5644:                                }
                   5645:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5646:                                break;
                   5647:                        case IS_NULL:
1.1.1.2   misho    5648:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5649:                                break;
                   5650:                        default:
                   5651:                                zend_error(E_WARNING, "Illegal offset type");
                   5652:                                zval_ptr_dtor(&expr_ptr);
                   5653:                                /* do nothing */
                   5654:                                break;
                   5655:                }
                   5656: 
                   5657:        } else {
1.1.1.2   misho    5658:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    5659:        }
1.1.1.2   misho    5660:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
1.1       misho    5661: 
                   5662:        } else {
                   5663: 
                   5664:        }
1.1.1.2   misho    5665:        CHECK_EXCEPTION();
1.1       misho    5666:        ZEND_VM_NEXT_OPCODE();
                   5667: }
                   5668: 
1.1.1.2   misho    5669: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5670: {
1.1.1.2   misho    5671:        USE_OPLINE
1.1       misho    5672: 
1.1.1.2   misho    5673:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    5674:        if (IS_CONST == IS_UNUSED) {
                   5675:                ZEND_VM_NEXT_OPCODE();
                   5676: #if 0 || IS_CONST != IS_UNUSED
                   5677:        } else {
1.1.1.2   misho    5678:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    5679: #endif
                   5680:        }
                   5681: }
                   5682: 
1.1.1.2   misho    5683: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5684: {
1.1.1.2   misho    5685:        USE_OPLINE
                   5686:        zval tmp, *varname;
                   5687:        HashTable *target_symbol_table;
1.1       misho    5688: 
                   5689: 
1.1.1.2   misho    5690:        SAVE_OPLINE();
                   5691:        if (IS_CONST == IS_CV &&
                   5692:            IS_UNUSED == IS_UNUSED &&
                   5693:            (opline->extended_value & ZEND_QUICK_SET)) {
                   5694:                if (EG(active_symbol_table)) {
                   5695:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
1.1       misho    5696: 
1.1.1.2   misho    5697:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   5698:                        EX_CV(opline->op1.var) = NULL;
                   5699:                } else if (EX_CV(opline->op1.var)) {
                   5700:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   5701:                        EX_CV(opline->op1.var) = NULL;
                   5702:                }
                   5703:                CHECK_EXCEPTION();
                   5704:                ZEND_VM_NEXT_OPCODE();
                   5705:        }
1.1       misho    5706: 
1.1.1.2   misho    5707:        varname = opline->op1.zv;
1.1       misho    5708: 
1.1.1.2   misho    5709:        if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   5710:                ZVAL_COPY_VALUE(&tmp, varname);
                   5711:                zval_copy_ctor(&tmp);
                   5712:                convert_to_string(&tmp);
                   5713:                varname = &tmp;
                   5714:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5715:                Z_ADDREF_P(varname);
                   5716:        }
                   5717: 
                   5718:        if (IS_UNUSED != IS_UNUSED) {
                   5719:                zend_class_entry *ce;
                   5720: 
                   5721:                if (IS_UNUSED == IS_CONST) {
                   5722:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5723:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   5724:                        } else {
                   5725:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    5726:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    5727:                                        if (IS_CONST != IS_CONST && varname == &tmp) {
                   5728:                                                zval_dtor(&tmp);
                   5729:                                        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5730:                                                zval_ptr_dtor(&varname);
                   5731:                                        }
                   5732: 
1.1.1.4   misho    5733:                                        HANDLE_EXCEPTION();
                   5734:                                }
                   5735:                                if (UNEXPECTED(ce == NULL)) {
                   5736:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    5737:                                }
                   5738:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   5739:                        }
1.1       misho    5740:                } else {
1.1.1.2   misho    5741:                        ce = EX_T(opline->op2.var).class_entry;
1.1       misho    5742:                }
1.1.1.2   misho    5743:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
1.1       misho    5744:        } else {
1.1.1.2   misho    5745:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   5746: 
                   5747:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   5748:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
1.1       misho    5749:        }
                   5750: 
1.1.1.2   misho    5751:        if (IS_CONST != IS_CONST && varname == &tmp) {
                   5752:                zval_dtor(&tmp);
                   5753:        } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
                   5754:                zval_ptr_dtor(&varname);
                   5755:        }
                   5756: 
                   5757:        CHECK_EXCEPTION();
1.1       misho    5758:        ZEND_VM_NEXT_OPCODE();
                   5759: }
                   5760: 
1.1.1.2   misho    5761: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5762: {
1.1.1.2   misho    5763:        USE_OPLINE
                   5764:        zval **value;
                   5765:        zend_bool isset = 1;
1.1       misho    5766: 
1.1.1.2   misho    5767:        SAVE_OPLINE();
                   5768:        if (IS_CONST == IS_CV &&
                   5769:            IS_UNUSED == IS_UNUSED &&
                   5770:            (opline->extended_value & ZEND_QUICK_SET)) {
                   5771:                if (EX_CV(opline->op1.var)) {
                   5772:                        value = EX_CV(opline->op1.var);
                   5773:                } else if (EG(active_symbol_table)) {
                   5774:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
1.1       misho    5775: 
1.1.1.2   misho    5776:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   5777:                                isset = 0;
                   5778:                        }
                   5779:                } else {
                   5780:                        isset = 0;
                   5781:                }
                   5782:        } else {
                   5783:                HashTable *target_symbol_table;
1.1       misho    5784: 
1.1.1.2   misho    5785:                zval tmp, *varname = opline->op1.zv;
1.1       misho    5786: 
1.1.1.2   misho    5787:                if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   5788:                        ZVAL_COPY_VALUE(&tmp, varname);
                   5789:                        zval_copy_ctor(&tmp);
                   5790:                        convert_to_string(&tmp);
                   5791:                        varname = &tmp;
1.1       misho    5792:                }
                   5793: 
1.1.1.2   misho    5794:                if (IS_UNUSED != IS_UNUSED) {
                   5795:                        zend_class_entry *ce;
                   5796: 
                   5797:                        if (IS_UNUSED == IS_CONST) {
                   5798:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   5799:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   5800:                                } else {
                   5801:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   5802:                                        if (UNEXPECTED(ce == NULL)) {
                   5803:                                                CHECK_EXCEPTION();
                   5804:                                                ZEND_VM_NEXT_OPCODE();
1.1       misho    5805:                                        }
1.1.1.2   misho    5806:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
1.1       misho    5807:                                }
1.1.1.2   misho    5808:                        } else {
                   5809:                                ce = EX_T(opline->op2.var).class_entry;
                   5810:                        }
                   5811:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CONST == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   5812:                        if (!value) {
                   5813:                                isset = 0;
                   5814:                        }
                   5815:                } else {
                   5816:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   5817:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   5818:                                isset = 0;
                   5819:                        }
1.1       misho    5820:                }
                   5821: 
1.1.1.2   misho    5822:                if (IS_CONST != IS_CONST && varname == &tmp) {
                   5823:                        zval_dtor(&tmp);
                   5824:                }
1.1       misho    5825: 
                   5826:        }
1.1.1.2   misho    5827: 
                   5828:        if (opline->extended_value & ZEND_ISSET) {
                   5829:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   5830:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   5831:                } else {
                   5832:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   5833:                }
                   5834:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   5835:                if (!isset || !i_zend_is_true(*value)) {
                   5836:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   5837:                } else {
                   5838:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
1.1       misho    5839:                }
                   5840:        }
1.1.1.2   misho    5841: 
                   5842:        CHECK_EXCEPTION();
1.1       misho    5843:        ZEND_VM_NEXT_OPCODE();
                   5844: }
                   5845: 
1.1.1.2   misho    5846: static int ZEND_FASTCALL  ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5847: {
1.1.1.2   misho    5848:        USE_OPLINE
                   5849:        zend_function *op_array;
                   5850: 
                   5851:        SAVE_OPLINE();
                   5852: 
                   5853:        if (UNEXPECTED(zend_hash_quick_find(EG(function_table), Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), Z_HASH_P(opline->op1.zv), (void *) &op_array) == FAILURE) ||
                   5854:            UNEXPECTED(op_array->type != ZEND_USER_FUNCTION)) {
                   5855:                zend_error_noreturn(E_ERROR, "Base lambda function for closure not found");
                   5856:        }
                   5857: 
                   5858:        zend_create_closure(&EX_T(opline->result.var).tmp_var, op_array, EG(scope), EG(This) TSRMLS_CC);
                   5859: 
                   5860:        CHECK_EXCEPTION();
                   5861:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5862: }
                   5863: 
1.1.1.2   misho    5864: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5865: {
1.1.1.2   misho    5866:        USE_OPLINE
                   5867: 
                   5868: 
                   5869:        SAVE_OPLINE();
                   5870:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   5871:                opline->op1.zv,
                   5872:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5873: 
                   5874: 
                   5875:        CHECK_EXCEPTION();
                   5876:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5877: }
                   5878: 
1.1.1.2   misho    5879: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5880: {
1.1.1.2   misho    5881:        USE_OPLINE
                   5882: 
                   5883: 
                   5884:        SAVE_OPLINE();
                   5885:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   5886:                opline->op1.zv,
                   5887:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5888: 
                   5889: 
                   5890:        CHECK_EXCEPTION();
                   5891:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5892: }
                   5893: 
1.1.1.2   misho    5894: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5895: {
1.1.1.2   misho    5896:        USE_OPLINE
                   5897: 
                   5898: 
                   5899:        SAVE_OPLINE();
                   5900:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   5901:                opline->op1.zv,
                   5902:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5903: 
                   5904: 
                   5905:        CHECK_EXCEPTION();
                   5906:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5907: }
                   5908: 
1.1.1.2   misho    5909: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5910: {
1.1.1.2   misho    5911:        USE_OPLINE
                   5912: 
                   5913: 
                   5914:        SAVE_OPLINE();
                   5915:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   5916:                opline->op1.zv,
                   5917:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5918: 
                   5919: 
                   5920:        CHECK_EXCEPTION();
                   5921:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5922: }
                   5923: 
1.1.1.2   misho    5924: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5925: {
1.1.1.2   misho    5926:        USE_OPLINE
                   5927: 
                   5928: 
                   5929:        SAVE_OPLINE();
                   5930:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   5931:                opline->op1.zv,
                   5932:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5933: 
                   5934: 
                   5935:        CHECK_EXCEPTION();
                   5936:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5937: }
                   5938: 
1.1.1.2   misho    5939: static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5940: {
1.1.1.2   misho    5941:        USE_OPLINE
                   5942: 
                   5943: 
                   5944:        SAVE_OPLINE();
                   5945:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   5946:                opline->op1.zv,
                   5947:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    5948: 
                   5949: 
1.1.1.2   misho    5950:        CHECK_EXCEPTION();
1.1       misho    5951:        ZEND_VM_NEXT_OPCODE();
                   5952: }
                   5953: 
1.1.1.2   misho    5954: static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5955: {
1.1.1.2   misho    5956:        USE_OPLINE
1.1       misho    5957: 
                   5958: 
1.1.1.2   misho    5959:        SAVE_OPLINE();
                   5960:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   5961:                opline->op1.zv,
                   5962:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5963: 
                   5964: 
                   5965:        CHECK_EXCEPTION();
1.1       misho    5966:        ZEND_VM_NEXT_OPCODE();
                   5967: }
                   5968: 
1.1.1.2   misho    5969: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5970: {
1.1.1.2   misho    5971:        USE_OPLINE
1.1       misho    5972: 
1.1.1.2   misho    5973: 
                   5974:        SAVE_OPLINE();
                   5975:        concat_function(&EX_T(opline->result.var).tmp_var,
                   5976:                opline->op1.zv,
                   5977:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5978: 
                   5979: 
                   5980:        CHECK_EXCEPTION();
                   5981:        ZEND_VM_NEXT_OPCODE();
1.1       misho    5982: }
                   5983: 
1.1.1.2   misho    5984: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    5985: {
1.1.1.2   misho    5986:        USE_OPLINE
1.1       misho    5987: 
1.1.1.2   misho    5988: 
                   5989:        SAVE_OPLINE();
                   5990:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   5991:                opline->op1.zv,
                   5992:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   5993: 
                   5994: 
                   5995:        CHECK_EXCEPTION();
1.1       misho    5996:        ZEND_VM_NEXT_OPCODE();
                   5997: }
                   5998: 
1.1.1.2   misho    5999: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6000: {
1.1.1.2   misho    6001:        USE_OPLINE
1.1       misho    6002: 
1.1.1.2   misho    6003:        zval *result = &EX_T(opline->result.var).tmp_var;
                   6004: 
                   6005:        SAVE_OPLINE();
                   6006:        is_identical_function(result,
                   6007:                opline->op1.zv,
                   6008:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   6009:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   6010: 
                   6011: 
                   6012:        CHECK_EXCEPTION();
1.1       misho    6013:        ZEND_VM_NEXT_OPCODE();
                   6014: }
                   6015: 
1.1.1.2   misho    6016: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6017: {
1.1.1.2   misho    6018:        USE_OPLINE
                   6019: 
                   6020:        zval *result = &EX_T(opline->result.var).tmp_var;
                   6021: 
                   6022:        SAVE_OPLINE();
                   6023:        ZVAL_BOOL(result, fast_equal_function(result,
                   6024:                opline->op1.zv,
                   6025:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
                   6026: 
                   6027: 
                   6028:        CHECK_EXCEPTION();
1.1       misho    6029:        ZEND_VM_NEXT_OPCODE();
                   6030: }
                   6031: 
1.1.1.2   misho    6032: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6033: {
1.1.1.2   misho    6034:        USE_OPLINE
1.1       misho    6035: 
1.1.1.2   misho    6036:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    6037: 
1.1.1.2   misho    6038:        SAVE_OPLINE();
                   6039:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   6040:                opline->op1.zv,
                   6041:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    6042: 
                   6043: 
1.1.1.2   misho    6044:        CHECK_EXCEPTION();
                   6045:        ZEND_VM_NEXT_OPCODE();
                   6046: }
1.1       misho    6047: 
1.1.1.2   misho    6048: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6049: {
                   6050:        USE_OPLINE
1.1       misho    6051: 
1.1.1.2   misho    6052:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    6053: 
1.1.1.2   misho    6054:        SAVE_OPLINE();
                   6055:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   6056:                opline->op1.zv,
                   6057:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    6058: 
                   6059: 
1.1.1.2   misho    6060:        CHECK_EXCEPTION();
                   6061:        ZEND_VM_NEXT_OPCODE();
                   6062: }
1.1       misho    6063: 
1.1.1.2   misho    6064: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6065: {
                   6066:        USE_OPLINE
1.1       misho    6067: 
1.1.1.2   misho    6068:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    6069: 
1.1.1.2   misho    6070:        SAVE_OPLINE();
                   6071:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   6072:                opline->op1.zv,
                   6073:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    6074: 
1.1.1.2   misho    6075: 
                   6076:        CHECK_EXCEPTION();
                   6077:        ZEND_VM_NEXT_OPCODE();
1.1       misho    6078: }
                   6079: 
1.1.1.2   misho    6080: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6081: {
1.1.1.2   misho    6082:        USE_OPLINE
1.1       misho    6083: 
                   6084: 
1.1.1.2   misho    6085:        SAVE_OPLINE();
                   6086:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   6087:                opline->op1.zv,
                   6088:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    6089: 
                   6090: 
1.1.1.2   misho    6091:        CHECK_EXCEPTION();
1.1       misho    6092:        ZEND_VM_NEXT_OPCODE();
                   6093: }
                   6094: 
1.1.1.2   misho    6095: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6096: {
1.1.1.2   misho    6097:        USE_OPLINE
1.1       misho    6098: 
                   6099: 
1.1.1.2   misho    6100:        SAVE_OPLINE();
                   6101:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   6102:                opline->op1.zv,
                   6103:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    6104: 
1.1.1.2   misho    6105: 
                   6106:        CHECK_EXCEPTION();
1.1       misho    6107:        ZEND_VM_NEXT_OPCODE();
                   6108: }
                   6109: 
1.1.1.2   misho    6110: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6111: {
1.1.1.2   misho    6112:        USE_OPLINE
1.1       misho    6113: 
                   6114: 
1.1.1.2   misho    6115:        SAVE_OPLINE();
                   6116:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   6117:                opline->op1.zv,
                   6118:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   6119: 
                   6120: 
                   6121:        CHECK_EXCEPTION();
1.1       misho    6122:        ZEND_VM_NEXT_OPCODE();
                   6123: }
                   6124: 
1.1.1.2   misho    6125: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6126: {
1.1.1.2   misho    6127:        USE_OPLINE
                   6128: 
                   6129: 
                   6130:        SAVE_OPLINE();
                   6131:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   6132:                opline->op1.zv,
                   6133:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   6134: 
                   6135: 
                   6136:        CHECK_EXCEPTION();
                   6137:        ZEND_VM_NEXT_OPCODE();
                   6138: }
                   6139: 
                   6140: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6141: {
                   6142:        USE_OPLINE
                   6143:        zval *function_name;
1.1       misho    6144:        zend_class_entry *ce;
                   6145: 
1.1.1.2   misho    6146:        SAVE_OPLINE();
                   6147:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
1.1       misho    6148: 
1.1.1.2   misho    6149:        if (IS_CONST == IS_CONST) {
                   6150:                /* no function found. try a static method in class */
                   6151:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   6152:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
1.1       misho    6153:                } else {
1.1.1.2   misho    6154:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    6155:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   6156:                                HANDLE_EXCEPTION();
                   6157:                        }
1.1.1.2   misho    6158:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    6159:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    6160:                        }
                   6161:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
                   6162:                }
                   6163:                EX(called_scope) = ce;
                   6164:        } else {
                   6165:                ce = EX_T(opline->op1.var).class_entry;
                   6166: 
                   6167:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
                   6168:                        EX(called_scope) = EG(called_scope);
                   6169:                } else {
                   6170:                        EX(called_scope) = ce;
1.1       misho    6171:                }
                   6172:        }
                   6173: 
1.1.1.2   misho    6174:        if (IS_CONST == IS_CONST &&
                   6175:            IS_CV == IS_CONST &&
                   6176:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   6177:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   6178:        } else if (IS_CONST != IS_CONST &&
                   6179:                   IS_CV == IS_CONST &&
                   6180:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   6181:                /* do nothing */
                   6182:        } else if (IS_CV != IS_UNUSED) {
                   6183:                char *function_name_strval = NULL;
                   6184:                int function_name_strlen = 0;
                   6185: 
                   6186: 
                   6187:                if (IS_CV == IS_CONST) {
                   6188:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   6189:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
                   6190:                } else {
                   6191:                        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   6192: 
                   6193:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
                   6194:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   6195:                        } else {
                   6196:                                function_name_strval = Z_STRVAL_P(function_name);
                   6197:                                function_name_strlen = Z_STRLEN_P(function_name);
                   6198:                        }
                   6199:                }
                   6200: 
                   6201:                if (function_name_strval) {
                   6202:                        if (ce->get_static_method) {
                   6203:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   6204:                        } else {
                   6205:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    6206:                        }
1.1.1.2   misho    6207:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   6208:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   6209:                        }
                   6210:                        if (IS_CV == IS_CONST &&
                   6211:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   6212:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   6213:                                if (IS_CONST == IS_CONST) {
                   6214:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   6215:                                } else {
                   6216:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   6217:                                }
1.1       misho    6218:                        }
                   6219:                }
1.1.1.2   misho    6220:                if (IS_CV != IS_CONST) {
                   6221: 
                   6222:                }
                   6223:        } else {
                   6224:                if (UNEXPECTED(ce->constructor == NULL)) {
                   6225:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   6226:                }
                   6227:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
                   6228:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
                   6229:                }
                   6230:                EX(fbc) = ce->constructor;
1.1       misho    6231:        }
                   6232: 
1.1.1.2   misho    6233:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   6234:                EX(object) = NULL;
                   6235:        } else {
                   6236:                if (EG(This) &&
                   6237:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   6238:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   6239:                    /* We are calling method of the other (incompatible) class,
                   6240:                       but passing $this. This is done for compatibility with php-4. */
                   6241:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
                   6242:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
                   6243:                        } else {
                   6244:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
                   6245:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
                   6246:                        }
                   6247:                }
                   6248:                if ((EX(object) = EG(This))) {
                   6249:                        Z_ADDREF_P(EX(object));
                   6250:                        EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    6251:                }
                   6252:        }
                   6253: 
1.1.1.2   misho    6254:        CHECK_EXCEPTION();
1.1       misho    6255:        ZEND_VM_NEXT_OPCODE();
                   6256: }
                   6257: 
1.1.1.2   misho    6258: static int ZEND_FASTCALL  ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6259: {
1.1.1.2   misho    6260:        USE_OPLINE
                   6261:        zend_class_entry *ce, *catch_ce;
                   6262:        zval *exception;
1.1       misho    6263: 
1.1.1.2   misho    6264:        SAVE_OPLINE();
                   6265:        /* Check whether an exception has been thrown, if not, jump over code */
                   6266:        zend_exception_restore(TSRMLS_C);
                   6267:        if (EG(exception) == NULL) {
                   6268:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   6269:                ZEND_VM_CONTINUE(); /* CHECK_ME */
1.1       misho    6270:        }
1.1.1.2   misho    6271:        if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   6272:                catch_ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   6273:        } else {
                   6274:                catch_ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC);
1.1       misho    6275: 
1.1.1.2   misho    6276:                CACHE_PTR(opline->op1.literal->cache_slot, catch_ce);
                   6277:        }
                   6278:        ce = Z_OBJCE_P(EG(exception));
                   6279: 
                   6280: #ifdef HAVE_DTRACE
                   6281:        if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
1.1.1.4   misho    6282:                DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
1.1.1.2   misho    6283:        }
                   6284: #endif /* HAVE_DTRACE */
                   6285: 
                   6286:        if (ce != catch_ce) {
                   6287:                if (!instanceof_function(ce, catch_ce TSRMLS_CC)) {
                   6288:                        if (opline->result.num) {
                   6289:                                zend_throw_exception_internal(NULL TSRMLS_CC);
                   6290:                                HANDLE_EXCEPTION();
1.1       misho    6291:                        }
1.1.1.2   misho    6292:                        ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   6293:                        ZEND_VM_CONTINUE(); /* CHECK_ME */
1.1       misho    6294:                }
                   6295:        }
                   6296: 
1.1.1.2   misho    6297:        exception = EG(exception);
                   6298:        if (!EG(active_symbol_table)) {
                   6299:                if (EX_CV(opline->op2.var)) {
                   6300:                        zval_ptr_dtor(EX_CV(opline->op2.var));
                   6301:                }
                   6302:                EX_CV(opline->op2.var) = (zval**)EX_CVs() + (EX(op_array)->last_var + opline->op2.var);
                   6303:                *EX_CV(opline->op2.var) = EG(exception);
                   6304:        } else {
                   6305:                zend_compiled_variable *cv = &CV_DEF_OF(opline->op2.var);
                   6306:                zend_hash_quick_update(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value,
                   6307:                    &EG(exception), sizeof(zval *), (void**)&EX_CV(opline->op2.var));
                   6308:        }
                   6309:        if (UNEXPECTED(EG(exception) != exception)) {
                   6310:                Z_ADDREF_P(EG(exception));
                   6311:                HANDLE_EXCEPTION();
                   6312:        } else {
                   6313:                EG(exception) = NULL;
                   6314:                ZEND_VM_NEXT_OPCODE();
                   6315:        }
1.1       misho    6316: }
                   6317: 
1.1.1.2   misho    6318: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6319: {
1.1.1.2   misho    6320:        USE_OPLINE
1.1       misho    6321: 
1.1.1.2   misho    6322: 
                   6323:        SAVE_OPLINE();
                   6324:        if (IS_CONST==IS_VAR) {
                   6325:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    6326:        }
1.1.1.2   misho    6327:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   6328:                                 opline->op1.zv,
                   6329:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    6330: 
1.1.1.2   misho    6331:        CHECK_EXCEPTION();
                   6332:        ZEND_VM_NEXT_OPCODE();
                   6333: }
1.1       misho    6334: 
1.1.1.2   misho    6335: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6336: {
                   6337:        USE_OPLINE
                   6338: 
                   6339:        zval *expr_ptr;
                   6340: 
                   6341:        SAVE_OPLINE();
                   6342:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
                   6343:                zval **expr_ptr_ptr = NULL;
                   6344: 
                   6345:                if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   6346:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
1.1       misho    6347:                }
1.1.1.2   misho    6348:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
                   6349:                expr_ptr = *expr_ptr_ptr;
                   6350:                Z_ADDREF_P(expr_ptr);
1.1       misho    6351:        } else {
1.1.1.2   misho    6352:                expr_ptr=opline->op1.zv;
                   6353:                if (0) { /* temporary variable */
                   6354:                        zval *new_expr;
1.1       misho    6355: 
1.1.1.2   misho    6356:                        ALLOC_ZVAL(new_expr);
                   6357:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   6358:                        expr_ptr = new_expr;
                   6359:                } else if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
                   6360:                        zval *new_expr;
1.1       misho    6361: 
1.1.1.2   misho    6362:                        ALLOC_ZVAL(new_expr);
                   6363:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   6364:                        expr_ptr = new_expr;
                   6365:                        zendi_zval_copy_ctor(*expr_ptr);
                   6366:                } else {
                   6367:                        Z_ADDREF_P(expr_ptr);
                   6368:                }
                   6369:        }
1.1       misho    6370: 
1.1.1.2   misho    6371:        if (IS_CV != IS_UNUSED) {
1.1       misho    6372: 
1.1.1.2   misho    6373:                zval *offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   6374:                ulong hval;
                   6375: 
                   6376:                switch (Z_TYPE_P(offset)) {
                   6377:                        case IS_DOUBLE:
                   6378:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   6379:                                goto num_index;
                   6380:                        case IS_LONG:
                   6381:                        case IS_BOOL:
                   6382:                                hval = Z_LVAL_P(offset);
                   6383: num_index:
                   6384:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
                   6385:                                break;
                   6386:                        case IS_STRING:
                   6387:                                if (IS_CV == IS_CONST) {
                   6388:                                        hval = Z_HASH_P(offset);
                   6389:                                } else {
                   6390:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   6391:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   6392:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    6393:                                        } else {
1.1.1.2   misho    6394:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    6395:                                        }
                   6396:                                }
1.1.1.2   misho    6397:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    6398:                                break;
1.1.1.2   misho    6399:                        case IS_NULL:
                   6400:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    6401:                                break;
1.1.1.2   misho    6402:                        default:
                   6403:                                zend_error(E_WARNING, "Illegal offset type");
                   6404:                                zval_ptr_dtor(&expr_ptr);
                   6405:                                /* do nothing */
1.1       misho    6406:                                break;
                   6407:                }
1.1.1.2   misho    6408: 
                   6409:        } else {
                   6410:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    6411:        }
1.1.1.2   misho    6412:        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
1.1       misho    6413: 
1.1.1.2   misho    6414:        } else {
1.1       misho    6415: 
1.1.1.2   misho    6416:        }
                   6417:        CHECK_EXCEPTION();
                   6418:        ZEND_VM_NEXT_OPCODE();
                   6419: }
1.1       misho    6420: 
1.1.1.2   misho    6421: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6422: {
                   6423:        USE_OPLINE
1.1       misho    6424: 
1.1.1.2   misho    6425:        array_init(&EX_T(opline->result.var).tmp_var);
                   6426:        if (IS_CONST == IS_UNUSED) {
                   6427:                ZEND_VM_NEXT_OPCODE();
                   6428: #if 0 || IS_CONST != IS_UNUSED
                   6429:        } else {
                   6430:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   6431: #endif
                   6432:        }
                   6433: }
1.1       misho    6434: 
1.1.1.2   misho    6435: static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6436: {
                   6437:        USE_OPLINE
                   6438:        zend_free_op free_op1;
1.1       misho    6439: 
1.1.1.2   misho    6440:        SAVE_OPLINE();
                   6441:        bitwise_not_function(&EX_T(opline->result.var).tmp_var,
                   6442:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC) TSRMLS_CC);
                   6443:        zval_dtor(free_op1.var);
                   6444:        CHECK_EXCEPTION();
                   6445:        ZEND_VM_NEXT_OPCODE();
                   6446: }
1.1       misho    6447: 
1.1.1.2   misho    6448: static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6449: {
                   6450:        USE_OPLINE
                   6451:        zend_free_op free_op1;
                   6452: 
                   6453:        SAVE_OPLINE();
                   6454:        boolean_not_function(&EX_T(opline->result.var).tmp_var,
                   6455:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC) TSRMLS_CC);
                   6456:        zval_dtor(free_op1.var);
                   6457:        CHECK_EXCEPTION();
1.1       misho    6458:        ZEND_VM_NEXT_OPCODE();
                   6459: }
                   6460: 
1.1.1.2   misho    6461: static int ZEND_FASTCALL  ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6462: {
1.1.1.2   misho    6463:        USE_OPLINE
1.1       misho    6464:        zend_free_op free_op1;
1.1.1.2   misho    6465:        zval *z;
1.1       misho    6466: 
1.1.1.2   misho    6467:        SAVE_OPLINE();
                   6468:        z = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6469: 
1.1.1.3   misho    6470:        if (IS_TMP_VAR == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
                   6471:                INIT_PZVAL(z);
1.1       misho    6472:        }
1.1.1.3   misho    6473:        zend_print_variable(z);
1.1       misho    6474: 
1.1.1.2   misho    6475:        zval_dtor(free_op1.var);
                   6476:        CHECK_EXCEPTION();
                   6477:        ZEND_VM_NEXT_OPCODE();
                   6478: }
1.1       misho    6479: 
1.1.1.2   misho    6480: static int ZEND_FASTCALL  ZEND_PRINT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6481: {
                   6482:        USE_OPLINE
1.1       misho    6483: 
1.1.1.2   misho    6484:        ZVAL_LONG(&EX_T(opline->result.var).tmp_var, 1);
                   6485:        return ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   6486: }
1.1       misho    6487: 
1.1.1.2   misho    6488: static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6489: {
                   6490:        USE_OPLINE
                   6491:        zend_free_op free_op1;
                   6492:        zval *val;
                   6493:        int ret;
1.1       misho    6494: 
1.1.1.2   misho    6495:        SAVE_OPLINE();
                   6496:        val = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6497: 
1.1.1.2   misho    6498:        if (IS_TMP_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                   6499:                ret = Z_LVAL_P(val);
                   6500:        } else {
                   6501:                ret = i_zend_is_true(val);
                   6502:                zval_dtor(free_op1.var);
                   6503:                if (UNEXPECTED(EG(exception) != NULL)) {
                   6504:                        HANDLE_EXCEPTION();
1.1       misho    6505:                }
                   6506:        }
1.1.1.2   misho    6507:        if (!ret) {
                   6508: #if DEBUG_ZEND>=2
                   6509:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   6510: #endif
                   6511:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
                   6512:                ZEND_VM_CONTINUE();
1.1       misho    6513:        }
1.1.1.2   misho    6514: 
1.1       misho    6515:        ZEND_VM_NEXT_OPCODE();
                   6516: }
                   6517: 
1.1.1.2   misho    6518: static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6519: {
1.1.1.2   misho    6520:        USE_OPLINE
1.1       misho    6521:        zend_free_op free_op1;
1.1.1.2   misho    6522:        zval *val;
                   6523:        int ret;
1.1       misho    6524: 
1.1.1.2   misho    6525:        SAVE_OPLINE();
                   6526:        val = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6527: 
1.1.1.2   misho    6528:        if (IS_TMP_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                   6529:                ret = Z_LVAL_P(val);
1.1       misho    6530:        } else {
1.1.1.2   misho    6531:                ret = i_zend_is_true(val);
                   6532:                zval_dtor(free_op1.var);
                   6533:                if (UNEXPECTED(EG(exception) != NULL)) {
                   6534:                        HANDLE_EXCEPTION();
1.1       misho    6535:                }
                   6536:        }
1.1.1.2   misho    6537:        if (ret) {
                   6538: #if DEBUG_ZEND>=2
                   6539:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   6540: #endif
                   6541:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
                   6542:                ZEND_VM_CONTINUE();
                   6543:        }
1.1       misho    6544: 
1.1.1.2   misho    6545:        ZEND_VM_NEXT_OPCODE();
                   6546: }
1.1       misho    6547: 
1.1.1.2   misho    6548: static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6549: {
                   6550:        USE_OPLINE
                   6551:        zend_free_op free_op1;
                   6552:        zval *val;
                   6553:        int retval;
1.1       misho    6554: 
1.1.1.2   misho    6555:        SAVE_OPLINE();
                   6556:        val = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6557: 
1.1.1.2   misho    6558:        if (IS_TMP_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                   6559:                retval = Z_LVAL_P(val);
                   6560:        } else {
                   6561:                retval = i_zend_is_true(val);
                   6562:                zval_dtor(free_op1.var);
                   6563:                if (UNEXPECTED(EG(exception) != NULL)) {
                   6564:                        HANDLE_EXCEPTION();
1.1       misho    6565:                }
                   6566:        }
1.1.1.2   misho    6567:        if (EXPECTED(retval != 0)) {
                   6568: #if DEBUG_ZEND>=2
                   6569:                printf("Conditional jmp on true to %d\n", opline->extended_value);
                   6570: #endif
                   6571:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   6572:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   6573:        } else {
                   6574: #if DEBUG_ZEND>=2
                   6575:                printf("Conditional jmp on false to %d\n", opline->op2.opline_num);
                   6576: #endif
                   6577:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
                   6578:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   6579:        }
                   6580: }
1.1       misho    6581: 
1.1.1.2   misho    6582: static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6583: {
                   6584:        USE_OPLINE
                   6585:        zend_free_op free_op1;
                   6586:        zval *val;
                   6587:        int retval;
1.1       misho    6588: 
1.1.1.2   misho    6589:        SAVE_OPLINE();
                   6590:        val = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6591: 
1.1.1.2   misho    6592:        if (IS_TMP_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                   6593:                retval = Z_LVAL_P(val);
                   6594:        } else {
                   6595:                retval = i_zend_is_true(val);
                   6596:                zval_dtor(free_op1.var);
                   6597:                if (UNEXPECTED(EG(exception) != NULL)) {
                   6598:                        HANDLE_EXCEPTION();
1.1       misho    6599:                }
1.1.1.2   misho    6600:        }
                   6601:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   6602:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   6603:        if (!retval) {
                   6604: #if DEBUG_ZEND>=2
                   6605:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   6606: #endif
                   6607:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
                   6608:                ZEND_VM_CONTINUE();
                   6609:        }
                   6610:        ZEND_VM_NEXT_OPCODE();
                   6611: }
1.1       misho    6612: 
1.1.1.2   misho    6613: static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6614: {
                   6615:        USE_OPLINE
                   6616:        zend_free_op free_op1;
                   6617:        zval *val;
                   6618:        int retval;
1.1       misho    6619: 
1.1.1.2   misho    6620:        SAVE_OPLINE();
                   6621:        val = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6622: 
1.1.1.2   misho    6623:        if (IS_TMP_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                   6624:                retval = Z_LVAL_P(val);
1.1       misho    6625:        } else {
1.1.1.2   misho    6626:                retval = i_zend_is_true(val);
                   6627:                zval_dtor(free_op1.var);
                   6628:                if (UNEXPECTED(EG(exception) != NULL)) {
                   6629:                        HANDLE_EXCEPTION();
                   6630:                }
1.1       misho    6631:        }
1.1.1.2   misho    6632:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   6633:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   6634:        if (retval) {
                   6635: #if DEBUG_ZEND>=2
                   6636:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   6637: #endif
                   6638:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
                   6639:                ZEND_VM_CONTINUE();
                   6640:        }
                   6641:        ZEND_VM_NEXT_OPCODE();
                   6642: }
1.1       misho    6643: 
1.1.1.2   misho    6644: static int ZEND_FASTCALL  ZEND_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6645: {
                   6646:        USE_OPLINE
1.1       misho    6647: 
1.1.1.2   misho    6648:        SAVE_OPLINE();
                   6649:        if (IS_TMP_VAR == IS_TMP_VAR) {
                   6650:                zendi_zval_dtor(EX_T(opline->op1.var).tmp_var);
1.1       misho    6651:        } else {
1.1.1.2   misho    6652:                zval_ptr_dtor(&EX_T(opline->op1.var).var.ptr);
1.1       misho    6653:        }
1.1.1.2   misho    6654:        CHECK_EXCEPTION();
                   6655:        ZEND_VM_NEXT_OPCODE();
1.1       misho    6656: }
                   6657: 
1.1.1.2   misho    6658: static int ZEND_FASTCALL  ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6659: {
1.1.1.2   misho    6660:        USE_OPLINE
                   6661:        zval *retval_ptr;
                   6662:        zend_free_op free_op1;
1.1       misho    6663: 
1.1.1.2   misho    6664:        SAVE_OPLINE();
                   6665:        retval_ptr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6666: 
1.1.1.2   misho    6667:        if (!EG(return_value_ptr_ptr)) {
                   6668:                if (IS_TMP_VAR == IS_TMP_VAR) {
                   6669:                        zval_dtor(free_op1.var);
                   6670:                }
                   6671:        } else if (!1) { /* Not a temp var */
                   6672:                if (IS_TMP_VAR == IS_CONST ||
                   6673:                    (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) {
                   6674:                        zval *ret;
1.1       misho    6675: 
1.1.1.2   misho    6676:                        ALLOC_ZVAL(ret);
                   6677:                        INIT_PZVAL_COPY(ret, retval_ptr);
                   6678:                        zval_copy_ctor(ret);
                   6679:                        *EG(return_value_ptr_ptr) = ret;
                   6680:                } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) &&
                   6681:                           retval_ptr == &EG(uninitialized_zval)) {
                   6682:                        zval *ret;
1.1       misho    6683: 
1.1.1.2   misho    6684:                        ALLOC_INIT_ZVAL(ret);
                   6685:                        *EG(return_value_ptr_ptr) = ret;
1.1       misho    6686:                } else {
1.1.1.2   misho    6687:                        *EG(return_value_ptr_ptr) = retval_ptr;
                   6688:                        Z_ADDREF_P(retval_ptr);
1.1       misho    6689:                }
1.1.1.2   misho    6690:        } else {
                   6691:                zval *ret;
1.1       misho    6692: 
1.1.1.2   misho    6693:                ALLOC_ZVAL(ret);
                   6694:                INIT_PZVAL_COPY(ret, retval_ptr);
                   6695:                *EG(return_value_ptr_ptr) = ret;
1.1       misho    6696:        }
                   6697: 
1.1.1.2   misho    6698:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   6699: }
1.1       misho    6700: 
1.1.1.2   misho    6701: static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   6702: {
                   6703:        USE_OPLINE
                   6704:        zval *retval_ptr;
                   6705:        zval **retval_ptr_ptr;
                   6706:        zend_free_op free_op1;
                   6707: 
                   6708:        SAVE_OPLINE();
                   6709: 
                   6710:        do {
                   6711:                if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
                   6712:                        /* Not supposed to happen, but we'll allow it */
                   6713:                        zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   6714: 
                   6715:                        retval_ptr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   6716:                        if (!EG(return_value_ptr_ptr)) {
                   6717:                                if (IS_TMP_VAR == IS_TMP_VAR) {
                   6718:                                        zval_dtor(free_op1.var);
                   6719:                                }
                   6720:                        } else if (!1) { /* Not a temp var */
                   6721:                                zval *ret;
                   6722: 
                   6723:                                ALLOC_ZVAL(ret);
                   6724:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   6725:                                zval_copy_ctor(ret);
                   6726:                                *EG(return_value_ptr_ptr) = ret;
1.1       misho    6727:                        } else {
1.1.1.2   misho    6728:                                zval *ret;
                   6729: 
                   6730:                                ALLOC_ZVAL(ret);
                   6731:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   6732:                                *EG(return_value_ptr_ptr) = ret;
1.1       misho    6733:                        }
                   6734:                        break;
1.1.1.2   misho    6735:                }
1.1       misho    6736: 
1.1.1.2   misho    6737:                retval_ptr_ptr = NULL;
1.1       misho    6738: 
1.1.1.2   misho    6739:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
                   6740:                        zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
1.1       misho    6741:                }
                   6742: 
1.1.1.2   misho    6743:                if (IS_TMP_VAR == IS_VAR && !Z_ISREF_PP(retval_ptr_ptr)) {
                   6744:                        if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
                   6745:                            EX_T(opline->op1.var).var.fcall_returned_reference) {
                   6746:                        } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
                   6747:                                zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   6748:                                if (EG(return_value_ptr_ptr)) {
1.1.1.4   misho    6749:                                        zval *ret;
                   6750: 
                   6751:                                        ALLOC_ZVAL(ret);
                   6752:                                        INIT_PZVAL_COPY(ret, *retval_ptr_ptr);
                   6753:                                        zval_copy_ctor(ret);
                   6754:                                        *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    6755:                                }
                   6756:                                break;
                   6757:                        }
                   6758:                }
1.1       misho    6759: 
1.1.1.2   misho    6760:                if (EG(return_value_ptr_ptr)) {
                   6761:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
                   6762:                        Z_ADDREF_PP(retval_ptr_ptr);
1.1       misho    6763: 
1.1.1.2   misho    6764:                        *EG(return_value_ptr_ptr) = *retval_ptr_ptr;
                   6765:                }
                   6766:        } while (0);
1.1       misho    6767: 
1.1.1.2   misho    6768:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    6769: }
                   6770: 
1.1.1.2   misho    6771: static int ZEND_FASTCALL  ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6772: {
1.1.1.2   misho    6773:        USE_OPLINE
                   6774:        zval *value;
                   6775:        zval *exception;
1.1       misho    6776:        zend_free_op free_op1;
                   6777: 
1.1.1.2   misho    6778:        SAVE_OPLINE();
                   6779:        value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   6780: 
                   6781:        if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
                   6782:                zend_error_noreturn(E_ERROR, "Can only throw objects");
                   6783:        }
                   6784:        zend_exception_save(TSRMLS_C);
                   6785:        /* Not sure if a complete copy is what we want here */
                   6786:        ALLOC_ZVAL(exception);
                   6787:        INIT_PZVAL_COPY(exception, value);
1.1       misho    6788:        if (!1) {
1.1.1.2   misho    6789:                zval_copy_ctor(exception);
1.1       misho    6790:        }
                   6791: 
1.1.1.2   misho    6792:        zend_throw_exception_object(exception TSRMLS_CC);
                   6793:        zend_exception_restore(TSRMLS_C);
                   6794: 
                   6795:        HANDLE_EXCEPTION();
1.1       misho    6796: }
                   6797: 
1.1.1.2   misho    6798: static int ZEND_FASTCALL  ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6799: {
1.1.1.2   misho    6800:        USE_OPLINE
1.1       misho    6801: 
1.1.1.2   misho    6802:        SAVE_OPLINE();
                   6803:        if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
                   6804:                && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
                   6805:                        zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.opline_num);
1.1       misho    6806:        }
1.1.1.2   misho    6807:        {
                   6808:                zval *valptr;
                   6809:                zval *value;
                   6810:                zend_free_op free_op1;
1.1       misho    6811: 
1.1.1.2   misho    6812:                value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6813: 
1.1.1.2   misho    6814:                ALLOC_ZVAL(valptr);
                   6815:                INIT_PZVAL_COPY(valptr, value);
                   6816:                if (!1) {
                   6817:                        zval_copy_ctor(valptr);
                   6818:                }
                   6819:                zend_vm_stack_push(valptr TSRMLS_CC);
1.1       misho    6820: 
1.1.1.2   misho    6821:        }
                   6822:        CHECK_EXCEPTION();
1.1       misho    6823:        ZEND_VM_NEXT_OPCODE();
                   6824: }
                   6825: 
1.1.1.2   misho    6826: static int ZEND_FASTCALL  ZEND_BOOL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6827: {
1.1.1.2   misho    6828:        USE_OPLINE
1.1       misho    6829:        zend_free_op free_op1;
1.1.1.2   misho    6830:        zval *retval = &EX_T(opline->result.var).tmp_var;
1.1       misho    6831: 
1.1.1.2   misho    6832:        SAVE_OPLINE();
                   6833:        /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
                   6834:        ZVAL_BOOL(retval, i_zend_is_true(_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC)));
1.1       misho    6835:        zval_dtor(free_op1.var);
                   6836: 
1.1.1.2   misho    6837:        CHECK_EXCEPTION();
1.1       misho    6838:        ZEND_VM_NEXT_OPCODE();
                   6839: }
                   6840: 
1.1.1.2   misho    6841: static int ZEND_FASTCALL  ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6842: {
1.1.1.2   misho    6843:        USE_OPLINE
1.1       misho    6844:        zend_free_op free_op1;
1.1.1.2   misho    6845:        zval *obj;
                   6846:        zend_class_entry *ce;
                   6847:        zend_function *clone;
                   6848:        zend_object_clone_obj_t clone_call;
1.1       misho    6849: 
1.1.1.2   misho    6850:        SAVE_OPLINE();
                   6851:        obj = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6852: 
1.1.1.2   misho    6853:        if (IS_TMP_VAR == IS_CONST ||
                   6854:            UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT)) {
                   6855:                zend_error_noreturn(E_ERROR, "__clone method called on non-object");
                   6856:        }
1.1       misho    6857: 
1.1.1.2   misho    6858:        ce = Z_OBJCE_P(obj);
                   6859:        clone = ce ? ce->clone : NULL;
                   6860:        clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
                   6861:        if (UNEXPECTED(clone_call == NULL)) {
                   6862:                if (ce) {
                   6863:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
                   6864:                } else {
                   6865:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
                   6866:                }
                   6867:        }
1.1       misho    6868: 
1.1.1.2   misho    6869:        if (ce && clone) {
                   6870:                if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
                   6871:                        /* Ensure that if we're calling a private function, we're allowed to do so.
                   6872:                         */
                   6873:                        if (UNEXPECTED(ce != EG(scope))) {
                   6874:                                zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   6875:                        }
                   6876:                } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
                   6877:                        /* Ensure that if we're calling a protected function, we're allowed to do so.
                   6878:                         */
1.1.1.3   misho    6879:                        if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
1.1.1.2   misho    6880:                                zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   6881:                        }
                   6882:                }
                   6883:        }
1.1       misho    6884: 
1.1.1.2   misho    6885:        if (EXPECTED(EG(exception) == NULL)) {
                   6886:                zval *retval;
1.1       misho    6887: 
1.1.1.2   misho    6888:                ALLOC_ZVAL(retval);
                   6889:                Z_OBJVAL_P(retval) = clone_call(obj TSRMLS_CC);
                   6890:                Z_TYPE_P(retval) = IS_OBJECT;
                   6891:                Z_SET_REFCOUNT_P(retval, 1);
                   6892:                Z_SET_ISREF_P(retval);
                   6893:                if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
                   6894:                        zval_ptr_dtor(&retval);
                   6895:                } else {
                   6896:                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   6897:                }
                   6898:        }
1.1       misho    6899: 
1.1.1.2   misho    6900:        CHECK_EXCEPTION();
1.1       misho    6901:        ZEND_VM_NEXT_OPCODE();
                   6902: }
                   6903: 
1.1.1.2   misho    6904: static int ZEND_FASTCALL  ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6905: {
1.1.1.2   misho    6906:        USE_OPLINE
1.1       misho    6907:        zend_free_op free_op1;
1.1.1.2   misho    6908:        zval *expr;
                   6909:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    6910: 
1.1.1.2   misho    6911:        SAVE_OPLINE();
                   6912:        expr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6913: 
1.1.1.2   misho    6914:        if (opline->extended_value != IS_STRING) {
                   6915:                ZVAL_COPY_VALUE(result, expr);
                   6916:                if (!1) {
                   6917:                        zendi_zval_copy_ctor(*result);
                   6918:                }
                   6919:        }
                   6920:        switch (opline->extended_value) {
                   6921:                case IS_NULL:
                   6922:                        convert_to_null(result);
                   6923:                        break;
                   6924:                case IS_BOOL:
                   6925:                        convert_to_boolean(result);
                   6926:                        break;
                   6927:                case IS_LONG:
                   6928:                        convert_to_long(result);
                   6929:                        break;
                   6930:                case IS_DOUBLE:
                   6931:                        convert_to_double(result);
                   6932:                        break;
                   6933:                case IS_STRING: {
                   6934:                        zval var_copy;
                   6935:                        int use_copy;
1.1       misho    6936: 
1.1.1.2   misho    6937:                        zend_make_printable_zval(expr, &var_copy, &use_copy);
                   6938:                        if (use_copy) {
                   6939:                                ZVAL_COPY_VALUE(result, &var_copy);
                   6940:                                if (1) {
                   6941:                                        zval_dtor(free_op1.var);
                   6942:                                }
                   6943:                        } else {
                   6944:                                ZVAL_COPY_VALUE(result, expr);
                   6945:                                if (!1) {
                   6946:                                        zendi_zval_copy_ctor(*result);
                   6947:                                }
                   6948:                        }
                   6949:                        break;
                   6950:                }
                   6951:                case IS_ARRAY:
                   6952:                        convert_to_array(result);
                   6953:                        break;
                   6954:                case IS_OBJECT:
                   6955:                        convert_to_object(result);
                   6956:                        break;
                   6957:        }
1.1       misho    6958: 
1.1.1.2   misho    6959:        CHECK_EXCEPTION();
1.1       misho    6960:        ZEND_VM_NEXT_OPCODE();
                   6961: }
                   6962: 
1.1.1.2   misho    6963: static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    6964: {
1.1.1.2   misho    6965:        USE_OPLINE
                   6966:        zend_op_array *new_op_array=NULL;
1.1       misho    6967:        zend_free_op free_op1;
1.1.1.2   misho    6968:        zval *inc_filename;
                   6969:     zval *tmp_inc_filename = NULL;
                   6970:        zend_bool failure_retval=0;
1.1       misho    6971: 
1.1.1.2   misho    6972:        SAVE_OPLINE();
                   6973:        inc_filename = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    6974: 
1.1.1.2   misho    6975:        if (inc_filename->type!=IS_STRING) {
                   6976:                MAKE_STD_ZVAL(tmp_inc_filename);
                   6977:                ZVAL_COPY_VALUE(tmp_inc_filename, inc_filename);
                   6978:                zval_copy_ctor(tmp_inc_filename);
                   6979:                convert_to_string(tmp_inc_filename);
                   6980:                inc_filename = tmp_inc_filename;
                   6981:        }
1.1       misho    6982: 
1.1.1.2   misho    6983:        if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
                   6984:                if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
                   6985:                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   6986:                } else {
                   6987:                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   6988:                }
                   6989:        } else {
                   6990:                switch (opline->extended_value) {
                   6991:                        case ZEND_INCLUDE_ONCE:
                   6992:                        case ZEND_REQUIRE_ONCE: {
                   6993:                                        zend_file_handle file_handle;
                   6994:                                        char *resolved_path;
1.1       misho    6995: 
1.1.1.2   misho    6996:                                        resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
                   6997:                                        if (resolved_path) {
                   6998:                                                failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
                   6999:                                        } else {
                   7000:                                                resolved_path = Z_STRVAL_P(inc_filename);
                   7001:                                        }
1.1       misho    7002: 
1.1.1.2   misho    7003:                                        if (failure_retval) {
                   7004:                                                /* do nothing, file already included */
                   7005:                                        } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
1.1       misho    7006: 
1.1.1.2   misho    7007:                                                if (!file_handle.opened_path) {
                   7008:                                                        file_handle.opened_path = estrdup(resolved_path);
                   7009:                                                }
1.1       misho    7010: 
1.1.1.2   misho    7011:                                                if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
                   7012:                                                        new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
                   7013:                                                        zend_destroy_file_handle(&file_handle TSRMLS_CC);
                   7014:                                                } else {
                   7015:                                                        zend_file_handle_dtor(&file_handle TSRMLS_CC);
                   7016:                                                        failure_retval=1;
                   7017:                                                }
                   7018:                                        } else {
                   7019:                                                if (opline->extended_value == ZEND_INCLUDE_ONCE) {
                   7020:                                                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   7021:                                                } else {
                   7022:                                                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   7023:                                                }
                   7024:                                        }
                   7025:                                        if (resolved_path != Z_STRVAL_P(inc_filename)) {
                   7026:                                                efree(resolved_path);
                   7027:                                        }
                   7028:                                }
                   7029:                                break;
                   7030:                        case ZEND_INCLUDE:
                   7031:                        case ZEND_REQUIRE:
                   7032:                                new_op_array = compile_filename(opline->extended_value, inc_filename TSRMLS_CC);
                   7033:                                break;
                   7034:                        case ZEND_EVAL: {
                   7035:                                        char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
1.1       misho    7036: 
1.1.1.2   misho    7037:                                        new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
                   7038:                                        efree(eval_desc);
                   7039:                                }
                   7040:                                break;
                   7041:                        EMPTY_SWITCH_DEFAULT_CASE()
                   7042:                }
                   7043:        }
                   7044:        if (tmp_inc_filename) {
                   7045:                zval_ptr_dtor(&tmp_inc_filename);
                   7046:        }
1.1       misho    7047:        zval_dtor(free_op1.var);
1.1.1.2   misho    7048:        if (UNEXPECTED(EG(exception) != NULL)) {
                   7049:                HANDLE_EXCEPTION();
                   7050:        } else if (EXPECTED(new_op_array != NULL)) {
                   7051:                EX(original_return_value) = EG(return_value_ptr_ptr);
                   7052:                EG(active_op_array) = new_op_array;
                   7053:                if (RETURN_VALUE_USED(opline)) {
                   7054:                        EX_T(opline->result.var).var.ptr = NULL;
                   7055:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   7056:                        EG(return_value_ptr_ptr) = EX_T(opline->result.var).var.ptr_ptr;
                   7057:                } else {
                   7058:                        EG(return_value_ptr_ptr) = NULL;
                   7059:                }
1.1       misho    7060: 
1.1.1.2   misho    7061:                EX(current_object) = EX(object);
1.1       misho    7062: 
1.1.1.2   misho    7063:                EX(function_state).function = (zend_function *) new_op_array;
                   7064:                EX(object) = NULL;
1.1       misho    7065: 
1.1.1.2   misho    7066:                if (!EG(active_symbol_table)) {
                   7067:                        zend_rebuild_symbol_table(TSRMLS_C);
                   7068:                }
1.1       misho    7069: 
1.1.1.2   misho    7070:                if (EXPECTED(zend_execute == execute)) {
                   7071:                        ZEND_VM_ENTER();
                   7072:                } else {
                   7073:                        zend_execute(new_op_array TSRMLS_CC);
                   7074:                }
1.1       misho    7075: 
1.1.1.2   misho    7076:                EX(function_state).function = (zend_function *) EX(op_array);
                   7077:                EX(object) = EX(current_object);
1.1       misho    7078: 
1.1.1.2   misho    7079:                EG(opline_ptr) = &EX(opline);
                   7080:                EG(active_op_array) = EX(op_array);
                   7081:                EG(return_value_ptr_ptr) = EX(original_return_value);
                   7082:                destroy_op_array(new_op_array TSRMLS_CC);
                   7083:                efree(new_op_array);
                   7084:                if (UNEXPECTED(EG(exception) != NULL)) {
                   7085:                        zend_throw_exception_internal(NULL TSRMLS_CC);
                   7086:                        HANDLE_EXCEPTION();
                   7087:                } else if (RETURN_VALUE_USED(opline)) {
                   7088:                        if (!EX_T(opline->result.var).var.ptr) { /* there was no return statement */
                   7089:                                zval *retval;
1.1       misho    7090: 
1.1.1.2   misho    7091:                                ALLOC_ZVAL(retval);
                   7092:                                ZVAL_BOOL(retval, 1);
                   7093:                                INIT_PZVAL(retval);
                   7094:                                EX_T(opline->result.var).var.ptr = retval;
                   7095:                        }
                   7096:                }
1.1       misho    7097: 
1.1.1.2   misho    7098:        } else if (RETURN_VALUE_USED(opline)) {
                   7099:                zval *retval;
1.1       misho    7100: 
1.1.1.2   misho    7101:                ALLOC_ZVAL(retval);
                   7102:                ZVAL_BOOL(retval, failure_retval);
                   7103:                INIT_PZVAL(retval);
                   7104:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   7105:        }
1.1       misho    7106:        ZEND_VM_NEXT_OPCODE();
                   7107: }
                   7108: 
1.1.1.2   misho    7109: static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7110: {
1.1.1.2   misho    7111:        USE_OPLINE
1.1       misho    7112:        zend_free_op free_op1;
1.1.1.2   misho    7113:        zval *array_ptr, **array_ptr_ptr;
                   7114:        HashTable *fe_ht;
                   7115:        zend_object_iterator *iter = NULL;
                   7116:        zend_class_entry *ce = NULL;
                   7117:        zend_bool is_empty = 0;
1.1       misho    7118: 
1.1.1.2   misho    7119:        SAVE_OPLINE();
1.1       misho    7120: 
1.1.1.2   misho    7121:        if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) &&
                   7122:            (opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
                   7123:                array_ptr_ptr = NULL;
                   7124:                if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
                   7125:                        MAKE_STD_ZVAL(array_ptr);
                   7126:                        ZVAL_NULL(array_ptr);
                   7127:                } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
                   7128:                        if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
                   7129:                                zend_error(E_WARNING, "foreach() cannot iterate over objects without PHP class");
                   7130:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
                   7131:                        }
1.1       misho    7132: 
1.1.1.2   misho    7133:                        ce = Z_OBJCE_PP(array_ptr_ptr);
                   7134:                        if (!ce || ce->get_iterator == NULL) {
                   7135:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   7136:                                Z_ADDREF_PP(array_ptr_ptr);
                   7137:                        }
                   7138:                        array_ptr = *array_ptr_ptr;
                   7139:                } else {
                   7140:                        if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
                   7141:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   7142:                                if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
                   7143:                                        Z_SET_ISREF_PP(array_ptr_ptr);
                   7144:                                }
                   7145:                        }
                   7146:                        array_ptr = *array_ptr_ptr;
                   7147:                        Z_ADDREF_P(array_ptr);
                   7148:                }
                   7149:        } else {
                   7150:                array_ptr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   7151:                if (1) { /* IS_TMP_VAR */
                   7152:                        zval *tmp;
1.1       misho    7153: 
1.1.1.2   misho    7154:                        ALLOC_ZVAL(tmp);
                   7155:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   7156:                        array_ptr = tmp;
                   7157:                        if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   7158:                                ce = Z_OBJCE_P(array_ptr);
                   7159:                                if (ce && ce->get_iterator) {
                   7160:                                        Z_DELREF_P(array_ptr);
                   7161:                                }
                   7162:                        }
                   7163:                } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   7164:                        ce = Z_OBJCE_P(array_ptr);
                   7165:                        if (!ce || !ce->get_iterator) {
                   7166:                                Z_ADDREF_P(array_ptr);
                   7167:                        }
                   7168:                } else if (IS_TMP_VAR == IS_CONST ||
                   7169:                           ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) &&
                   7170:                            !Z_ISREF_P(array_ptr) &&
                   7171:                            Z_REFCOUNT_P(array_ptr) > 1)) {
                   7172:                        zval *tmp;
1.1       misho    7173: 
1.1.1.2   misho    7174:                        ALLOC_ZVAL(tmp);
                   7175:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   7176:                        zval_copy_ctor(tmp);
                   7177:                        array_ptr = tmp;
                   7178:                } else {
                   7179:                        Z_ADDREF_P(array_ptr);
                   7180:                }
                   7181:        }
1.1       misho    7182: 
1.1.1.2   misho    7183:        if (ce && ce->get_iterator) {
                   7184:                iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
1.1       misho    7185: 
1.1.1.2   misho    7186:                if (iter && EXPECTED(EG(exception) == NULL)) {
                   7187:                        array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
                   7188:                } else {
1.1       misho    7189: 
1.1.1.2   misho    7190:                        if (!EG(exception)) {
                   7191:                                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
                   7192:                        }
                   7193:                        zend_throw_exception_internal(NULL TSRMLS_CC);
                   7194:                        HANDLE_EXCEPTION();
                   7195:                }
                   7196:        }
1.1       misho    7197: 
1.1.1.2   misho    7198:        EX_T(opline->result.var).fe.ptr = array_ptr;
1.1       misho    7199: 
1.1.1.2   misho    7200:        if (iter) {
                   7201:                iter->index = 0;
                   7202:                if (iter->funcs->rewind) {
                   7203:                        iter->funcs->rewind(iter TSRMLS_CC);
                   7204:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   7205:                                zval_ptr_dtor(&array_ptr);
1.1       misho    7206: 
1.1.1.2   misho    7207:                                HANDLE_EXCEPTION();
                   7208:                        }
1.1       misho    7209:                }
1.1.1.2   misho    7210:                is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
                   7211:                if (UNEXPECTED(EG(exception) != NULL)) {
                   7212:                        zval_ptr_dtor(&array_ptr);
1.1       misho    7213: 
1.1.1.2   misho    7214:                        HANDLE_EXCEPTION();
                   7215:                }
                   7216:                iter->index = -1; /* will be set to 0 before using next handler */
                   7217:        } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
                   7218:                zend_hash_internal_pointer_reset(fe_ht);
                   7219:                if (ce) {
                   7220:                        zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
                   7221:                        while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
                   7222:                                char *str_key;
                   7223:                                uint str_key_len;
                   7224:                                ulong int_key;
                   7225:                                zend_uchar key_type;
1.1       misho    7226: 
1.1.1.2   misho    7227:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
                   7228:                                if (key_type != HASH_KEY_NON_EXISTANT &&
                   7229:                                        (key_type == HASH_KEY_IS_LONG ||
                   7230:                                     zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
                   7231:                                        break;
                   7232:                                }
                   7233:                                zend_hash_move_forward(fe_ht);
                   7234:                        }
                   7235:                }
                   7236:                is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
                   7237:                zend_hash_get_pointer(fe_ht, &EX_T(opline->result.var).fe.fe_pos);
                   7238:        } else {
                   7239:                zend_error(E_WARNING, "Invalid argument supplied for foreach()");
                   7240:                is_empty = 1;
                   7241:        }
1.1       misho    7242: 
1.1.1.2   misho    7243:        if (is_empty) {
                   7244:                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
                   7245:        } else {
                   7246:                CHECK_EXCEPTION();
                   7247:                ZEND_VM_NEXT_OPCODE();
1.1       misho    7248:        }
                   7249: }
                   7250: 
1.1.1.2   misho    7251: static int ZEND_FASTCALL  ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7252: {
1.1.1.2   misho    7253: #if 0 || (IS_TMP_VAR != IS_UNUSED)
                   7254:        USE_OPLINE
1.1       misho    7255: 
1.1.1.2   misho    7256:        SAVE_OPLINE();
                   7257:        if (IS_TMP_VAR != IS_UNUSED) {
                   7258:                zend_free_op free_op1;
                   7259:                zval *ptr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7260: 
1.1.1.2   misho    7261:                if (Z_TYPE_P(ptr) == IS_LONG) {
                   7262:                        EG(exit_status) = Z_LVAL_P(ptr);
                   7263:                } else {
                   7264:                        zend_print_variable(ptr);
                   7265:                }
                   7266:                zval_dtor(free_op1.var);
1.1       misho    7267:        }
1.1.1.2   misho    7268: #endif
                   7269:        zend_bailout();
                   7270:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
1.1       misho    7271: }
                   7272: 
1.1.1.2   misho    7273: static int ZEND_FASTCALL  ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7274: {
1.1.1.2   misho    7275:        USE_OPLINE
                   7276:        zval restored_error_reporting;
1.1       misho    7277: 
1.1.1.2   misho    7278:        SAVE_OPLINE();
                   7279:        if (!EG(error_reporting) && Z_LVAL(EX_T(opline->op1.var).tmp_var) != 0) {
                   7280:                Z_TYPE(restored_error_reporting) = IS_LONG;
                   7281:                Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.var).tmp_var);
                   7282:                EG(error_reporting) = Z_LVAL(restored_error_reporting);
                   7283:                convert_to_string(&restored_error_reporting);
                   7284:                if (EXPECTED(EG(error_reporting_ini_entry) != NULL)) {
                   7285:                        if (EXPECTED(EG(error_reporting_ini_entry)->modified &&
                   7286:                            EG(error_reporting_ini_entry)->value != EG(error_reporting_ini_entry)->orig_value)) {
                   7287:                                efree(EG(error_reporting_ini_entry)->value);
                   7288:                        }
                   7289:                        EG(error_reporting_ini_entry)->value = Z_STRVAL(restored_error_reporting);
                   7290:                        EG(error_reporting_ini_entry)->value_length = Z_STRLEN(restored_error_reporting);
                   7291:                } else {
                   7292:                        zendi_zval_dtor(restored_error_reporting);
                   7293:                }
1.1       misho    7294:        }
1.1.1.2   misho    7295:        if (EX(old_error_reporting) == &EX_T(opline->op1.var).tmp_var) {
                   7296:                EX(old_error_reporting) = NULL;
                   7297:        }
                   7298:        CHECK_EXCEPTION();
1.1       misho    7299:        ZEND_VM_NEXT_OPCODE();
                   7300: }
                   7301: 
1.1.1.2   misho    7302: static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7303: {
1.1.1.2   misho    7304:        USE_OPLINE
1.1       misho    7305:        zend_free_op free_op1;
1.1.1.2   misho    7306:        zval *value;
1.1       misho    7307: 
1.1.1.2   misho    7308:        SAVE_OPLINE();
                   7309:        value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7310: 
1.1.1.2   misho    7311:        if (i_zend_is_true(value)) {
                   7312:                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   7313:                if (!1) {
                   7314:                        zendi_zval_copy_ctor(EX_T(opline->result.var).tmp_var);
1.1       misho    7315:                }
                   7316: 
1.1.1.2   misho    7317: #if DEBUG_ZEND>=2
                   7318:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   7319: #endif
                   7320:                ZEND_VM_JMP(opline->op2.jmp_addr);
1.1       misho    7321:        }
                   7322: 
1.1.1.2   misho    7323:        zval_dtor(free_op1.var);
                   7324:        CHECK_EXCEPTION();
1.1       misho    7325:        ZEND_VM_NEXT_OPCODE();
                   7326: }
                   7327: 
1.1.1.2   misho    7328: static int ZEND_FASTCALL  ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7329: {
1.1.1.2   misho    7330:        USE_OPLINE
1.1       misho    7331:        zend_free_op free_op1;
1.1.1.2   misho    7332:        zval *value, *ret;
1.1       misho    7333: 
1.1.1.2   misho    7334:        SAVE_OPLINE();
                   7335:        value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   7336: 
                   7337:        if (i_zend_is_true(value)) {
                   7338:                if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   7339:                        Z_ADDREF_P(value);
                   7340:                        EX_T(opline->result.var).var.ptr = value;
                   7341:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    7342:                } else {
1.1.1.2   misho    7343:                        ALLOC_ZVAL(ret);
                   7344:                        INIT_PZVAL_COPY(ret, value);
                   7345:                        EX_T(opline->result.var).var.ptr = ret;
                   7346:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   7347:                        if (!1) {
                   7348:                                zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   7349:                        }
1.1       misho    7350:                }
1.1.1.2   misho    7351: 
                   7352: #if DEBUG_ZEND>=2
                   7353:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   7354: #endif
                   7355:                ZEND_VM_JMP(opline->op2.jmp_addr);
1.1       misho    7356:        }
1.1.1.2   misho    7357: 
                   7358:        zval_dtor(free_op1.var);
                   7359:        CHECK_EXCEPTION();
1.1       misho    7360:        ZEND_VM_NEXT_OPCODE();
                   7361: }
                   7362: 
1.1.1.2   misho    7363: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7364: {
1.1.1.2   misho    7365:        USE_OPLINE
1.1       misho    7366:        zend_free_op free_op1;
1.1.1.2   misho    7367:        zval *value;
1.1       misho    7368: 
1.1.1.2   misho    7369:        SAVE_OPLINE();
                   7370:        value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7371: 
1.1.1.2   misho    7372:        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   7373:        if (!1) {
                   7374:                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    7375:        }
                   7376: 
1.1.1.2   misho    7377:        CHECK_EXCEPTION();
                   7378:        ZEND_VM_NEXT_OPCODE();
                   7379: }
1.1       misho    7380: 
1.1.1.2   misho    7381: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7382: {
                   7383:        USE_OPLINE
                   7384:        zend_free_op free_op1;
                   7385:        zval *value, *ret;
1.1       misho    7386: 
1.1.1.2   misho    7387:        SAVE_OPLINE();
                   7388:        value = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7389: 
1.1.1.2   misho    7390:        if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   7391:                Z_ADDREF_P(value);
                   7392:                EX_T(opline->result.var).var.ptr = value;
                   7393:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    7394:        } else {
1.1.1.2   misho    7395:                ALLOC_ZVAL(ret);
                   7396:                INIT_PZVAL_COPY(ret, value);
                   7397:                EX_T(opline->result.var).var.ptr = ret;
                   7398:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   7399:                if (!1) {
                   7400:                        zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   7401:                }
1.1       misho    7402:        }
                   7403: 
1.1.1.2   misho    7404:        CHECK_EXCEPTION();
1.1       misho    7405:        ZEND_VM_NEXT_OPCODE();
                   7406: }
                   7407: 
1.1.1.2   misho    7408: static int ZEND_FASTCALL  ZEND_INSTANCEOF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7409: {
1.1.1.2   misho    7410:        USE_OPLINE
                   7411:        zend_free_op free_op1;
                   7412:        zval *expr;
                   7413:        zend_bool result;
1.1       misho    7414: 
1.1.1.2   misho    7415:        SAVE_OPLINE();
                   7416:        expr = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   7417: 
                   7418:        if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
                   7419:                result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.var).class_entry TSRMLS_CC);
1.1       misho    7420:        } else {
1.1.1.2   misho    7421:                result = 0;
1.1       misho    7422:        }
1.1.1.2   misho    7423:        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, result);
                   7424:        zval_dtor(free_op1.var);
                   7425:        CHECK_EXCEPTION();
                   7426:        ZEND_VM_NEXT_OPCODE();
1.1       misho    7427: }
                   7428: 
1.1.1.2   misho    7429: static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7430: {
1.1.1.2   misho    7431:        USE_OPLINE
                   7432:        zend_free_op free_op1;
1.1       misho    7433: 
1.1.1.2   misho    7434:        SAVE_OPLINE();
                   7435:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   7436:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7437:                opline->op2.zv TSRMLS_CC);
1.1       misho    7438:        zval_dtor(free_op1.var);
1.1.1.2   misho    7439: 
                   7440:        CHECK_EXCEPTION();
1.1       misho    7441:        ZEND_VM_NEXT_OPCODE();
                   7442: }
                   7443: 
1.1.1.2   misho    7444: static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7445: {
1.1.1.2   misho    7446:        USE_OPLINE
                   7447:        zend_free_op free_op1;
1.1       misho    7448: 
1.1.1.2   misho    7449:        SAVE_OPLINE();
                   7450:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   7451:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7452:                opline->op2.zv TSRMLS_CC);
1.1       misho    7453:        zval_dtor(free_op1.var);
1.1.1.2   misho    7454: 
                   7455:        CHECK_EXCEPTION();
1.1       misho    7456:        ZEND_VM_NEXT_OPCODE();
                   7457: }
                   7458: 
1.1.1.2   misho    7459: static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7460: {
1.1.1.2   misho    7461:        USE_OPLINE
                   7462:        zend_free_op free_op1;
1.1       misho    7463: 
1.1.1.2   misho    7464:        SAVE_OPLINE();
                   7465:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   7466:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7467:                opline->op2.zv TSRMLS_CC);
1.1       misho    7468:        zval_dtor(free_op1.var);
1.1.1.2   misho    7469: 
                   7470:        CHECK_EXCEPTION();
1.1       misho    7471:        ZEND_VM_NEXT_OPCODE();
                   7472: }
                   7473: 
1.1.1.2   misho    7474: static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7475: {
1.1.1.2   misho    7476:        USE_OPLINE
                   7477:        zend_free_op free_op1;
1.1       misho    7478: 
1.1.1.2   misho    7479:        SAVE_OPLINE();
                   7480:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   7481:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7482:                opline->op2.zv TSRMLS_CC);
1.1       misho    7483:        zval_dtor(free_op1.var);
1.1.1.2   misho    7484: 
                   7485:        CHECK_EXCEPTION();
1.1       misho    7486:        ZEND_VM_NEXT_OPCODE();
                   7487: }
                   7488: 
1.1.1.2   misho    7489: static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7490: {
1.1.1.2   misho    7491:        USE_OPLINE
                   7492:        zend_free_op free_op1;
1.1       misho    7493: 
1.1.1.2   misho    7494:        SAVE_OPLINE();
                   7495:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   7496:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7497:                opline->op2.zv TSRMLS_CC);
1.1       misho    7498:        zval_dtor(free_op1.var);
1.1.1.2   misho    7499: 
                   7500:        CHECK_EXCEPTION();
1.1       misho    7501:        ZEND_VM_NEXT_OPCODE();
                   7502: }
                   7503: 
1.1.1.2   misho    7504: static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7505: {
1.1.1.2   misho    7506:        USE_OPLINE
                   7507:        zend_free_op free_op1;
1.1       misho    7508: 
1.1.1.2   misho    7509:        SAVE_OPLINE();
                   7510:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   7511:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7512:                opline->op2.zv TSRMLS_CC);
1.1       misho    7513:        zval_dtor(free_op1.var);
1.1.1.2   misho    7514: 
                   7515:        CHECK_EXCEPTION();
1.1       misho    7516:        ZEND_VM_NEXT_OPCODE();
                   7517: }
                   7518: 
1.1.1.2   misho    7519: static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7520: {
1.1.1.2   misho    7521:        USE_OPLINE
                   7522:        zend_free_op free_op1;
1.1       misho    7523: 
1.1.1.2   misho    7524:        SAVE_OPLINE();
                   7525:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   7526:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7527:                opline->op2.zv TSRMLS_CC);
1.1       misho    7528:        zval_dtor(free_op1.var);
1.1.1.2   misho    7529: 
                   7530:        CHECK_EXCEPTION();
1.1       misho    7531:        ZEND_VM_NEXT_OPCODE();
                   7532: }
                   7533: 
1.1.1.2   misho    7534: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7535: {
1.1.1.2   misho    7536:        USE_OPLINE
                   7537:        zend_free_op free_op1;
1.1       misho    7538: 
1.1.1.2   misho    7539:        SAVE_OPLINE();
                   7540:        concat_function(&EX_T(opline->result.var).tmp_var,
                   7541:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7542:                opline->op2.zv TSRMLS_CC);
1.1       misho    7543:        zval_dtor(free_op1.var);
1.1.1.2   misho    7544: 
                   7545:        CHECK_EXCEPTION();
1.1       misho    7546:        ZEND_VM_NEXT_OPCODE();
                   7547: }
                   7548: 
1.1.1.2   misho    7549: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7550: {
1.1.1.2   misho    7551:        USE_OPLINE
                   7552:        zend_free_op free_op1;
1.1       misho    7553: 
1.1.1.2   misho    7554:        SAVE_OPLINE();
                   7555:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   7556:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7557:                opline->op2.zv TSRMLS_CC);
1.1       misho    7558:        zval_dtor(free_op1.var);
1.1.1.2   misho    7559: 
                   7560:        CHECK_EXCEPTION();
1.1       misho    7561:        ZEND_VM_NEXT_OPCODE();
                   7562: }
                   7563: 
1.1.1.2   misho    7564: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7565: {
1.1.1.2   misho    7566:        USE_OPLINE
                   7567:        zend_free_op free_op1;
                   7568:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    7569: 
1.1.1.2   misho    7570:        SAVE_OPLINE();
1.1       misho    7571:        is_identical_function(result,
1.1.1.2   misho    7572:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7573:                opline->op2.zv TSRMLS_CC);
1.1       misho    7574:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   7575:        zval_dtor(free_op1.var);
1.1.1.2   misho    7576: 
                   7577:        CHECK_EXCEPTION();
1.1       misho    7578:        ZEND_VM_NEXT_OPCODE();
                   7579: }
                   7580: 
1.1.1.2   misho    7581: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7582: {
1.1.1.2   misho    7583:        USE_OPLINE
                   7584:        zend_free_op free_op1;
                   7585:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    7586: 
1.1.1.2   misho    7587:        SAVE_OPLINE();
                   7588:        ZVAL_BOOL(result, fast_equal_function(result,
                   7589:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7590:                opline->op2.zv TSRMLS_CC));
1.1       misho    7591:        zval_dtor(free_op1.var);
1.1.1.2   misho    7592: 
                   7593:        CHECK_EXCEPTION();
1.1       misho    7594:        ZEND_VM_NEXT_OPCODE();
                   7595: }
                   7596: 
1.1.1.2   misho    7597: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7598: {
1.1.1.2   misho    7599:        USE_OPLINE
                   7600:        zend_free_op free_op1;
                   7601:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    7602: 
1.1.1.2   misho    7603:        SAVE_OPLINE();
                   7604:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   7605:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7606:                opline->op2.zv TSRMLS_CC));
1.1       misho    7607:        zval_dtor(free_op1.var);
1.1.1.2   misho    7608: 
                   7609:        CHECK_EXCEPTION();
1.1       misho    7610:        ZEND_VM_NEXT_OPCODE();
                   7611: }
                   7612: 
1.1.1.2   misho    7613: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7614: {
1.1.1.2   misho    7615:        USE_OPLINE
                   7616:        zend_free_op free_op1;
                   7617:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    7618: 
1.1.1.2   misho    7619:        SAVE_OPLINE();
                   7620:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   7621:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7622:                opline->op2.zv TSRMLS_CC));
1.1       misho    7623:        zval_dtor(free_op1.var);
1.1.1.2   misho    7624: 
                   7625:        CHECK_EXCEPTION();
1.1       misho    7626:        ZEND_VM_NEXT_OPCODE();
                   7627: }
                   7628: 
1.1.1.2   misho    7629: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7630: {
1.1.1.2   misho    7631:        USE_OPLINE
                   7632:        zend_free_op free_op1;
                   7633:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    7634: 
1.1.1.2   misho    7635:        SAVE_OPLINE();
                   7636:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   7637:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7638:                opline->op2.zv TSRMLS_CC));
1.1       misho    7639:        zval_dtor(free_op1.var);
1.1.1.2   misho    7640: 
                   7641:        CHECK_EXCEPTION();
1.1       misho    7642:        ZEND_VM_NEXT_OPCODE();
                   7643: }
                   7644: 
1.1.1.2   misho    7645: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7646: {
1.1.1.2   misho    7647:        USE_OPLINE
                   7648:        zend_free_op free_op1;
1.1       misho    7649: 
1.1.1.2   misho    7650:        SAVE_OPLINE();
                   7651:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   7652:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7653:                opline->op2.zv TSRMLS_CC);
1.1       misho    7654:        zval_dtor(free_op1.var);
1.1.1.2   misho    7655: 
                   7656:        CHECK_EXCEPTION();
1.1       misho    7657:        ZEND_VM_NEXT_OPCODE();
                   7658: }
                   7659: 
1.1.1.2   misho    7660: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7661: {
1.1.1.2   misho    7662:        USE_OPLINE
                   7663:        zend_free_op free_op1;
1.1       misho    7664: 
1.1.1.2   misho    7665:        SAVE_OPLINE();
                   7666:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   7667:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7668:                opline->op2.zv TSRMLS_CC);
1.1       misho    7669:        zval_dtor(free_op1.var);
1.1.1.2   misho    7670: 
                   7671:        CHECK_EXCEPTION();
1.1       misho    7672:        ZEND_VM_NEXT_OPCODE();
                   7673: }
                   7674: 
1.1.1.2   misho    7675: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7676: {
1.1.1.2   misho    7677:        USE_OPLINE
                   7678:        zend_free_op free_op1;
1.1       misho    7679: 
1.1.1.2   misho    7680:        SAVE_OPLINE();
                   7681:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   7682:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7683:                opline->op2.zv TSRMLS_CC);
1.1       misho    7684:        zval_dtor(free_op1.var);
1.1.1.2   misho    7685: 
                   7686:        CHECK_EXCEPTION();
1.1       misho    7687:        ZEND_VM_NEXT_OPCODE();
                   7688: }
                   7689: 
1.1.1.2   misho    7690: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7691: {
1.1.1.2   misho    7692:        USE_OPLINE
                   7693:        zend_free_op free_op1;
1.1       misho    7694: 
1.1.1.2   misho    7695:        SAVE_OPLINE();
                   7696:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   7697:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   7698:                opline->op2.zv TSRMLS_CC);
1.1       misho    7699:        zval_dtor(free_op1.var);
1.1.1.2   misho    7700: 
                   7701:        CHECK_EXCEPTION();
1.1       misho    7702:        ZEND_VM_NEXT_OPCODE();
                   7703: }
                   7704: 
1.1.1.2   misho    7705: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7706: {
1.1.1.2   misho    7707:        USE_OPLINE
                   7708:        zend_free_op free_op1;
                   7709:        zval *varname;
                   7710:        zval **retval;
                   7711:        zval tmp_varname;
                   7712:        HashTable *target_symbol_table;
                   7713:        ulong hash_value;
1.1       misho    7714: 
1.1.1.2   misho    7715:        SAVE_OPLINE();
                   7716:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7717: 
1.1.1.2   misho    7718:        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   7719:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   7720:                zval_copy_ctor(&tmp_varname);
                   7721:                Z_SET_REFCOUNT(tmp_varname, 1);
                   7722:                Z_UNSET_ISREF(tmp_varname);
                   7723:                convert_to_string(&tmp_varname);
                   7724:                varname = &tmp_varname;
1.1       misho    7725:        }
                   7726: 
1.1.1.2   misho    7727:        if (IS_CONST != IS_UNUSED) {
                   7728:                zend_class_entry *ce;
1.1       misho    7729: 
1.1.1.2   misho    7730:                if (IS_CONST == IS_CONST) {
                   7731:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   7732:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   7733:                        } else {
                   7734:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   7735:                                if (UNEXPECTED(ce == NULL)) {
                   7736:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   7737:                                                zval_dtor(&tmp_varname);
                   7738:                                        }
                   7739:                                        zval_dtor(free_op1.var);
                   7740:                                        CHECK_EXCEPTION();
                   7741:                                        ZEND_VM_NEXT_OPCODE();
                   7742:                                }
                   7743:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   7744:                        }
                   7745:                } else {
                   7746:                        ce = EX_T(opline->op2.var).class_entry;
                   7747:                }
                   7748:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   7749:                zval_dtor(free_op1.var);
                   7750:        } else {
                   7751:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   7752: /*
                   7753:                if (!target_symbol_table) {
                   7754:                        CHECK_EXCEPTION();
                   7755:                        ZEND_VM_NEXT_OPCODE();
                   7756:                }
                   7757: */
                   7758:                if (IS_TMP_VAR == IS_CONST) {
                   7759:                        hash_value = Z_HASH_P(varname);
                   7760:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   7761:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   7762:                } else {
                   7763:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
1.1       misho    7764:                }
                   7765: 
1.1.1.2   misho    7766:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   7767:                        switch (type) {
                   7768:                                case BP_VAR_R:
                   7769:                                case BP_VAR_UNSET:
                   7770:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   7771:                                        /* break missing intentionally */
                   7772:                                case BP_VAR_IS:
                   7773:                                        retval = &EG(uninitialized_zval_ptr);
                   7774:                                        break;
                   7775:                                case BP_VAR_RW:
                   7776:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   7777:                                        /* break missing intentionally */
                   7778:                                case BP_VAR_W:
                   7779:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   7780:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   7781:                                        break;
                   7782:                                EMPTY_SWITCH_DEFAULT_CASE()
                   7783:                        }
                   7784:                }
                   7785:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   7786:                        case ZEND_FETCH_GLOBAL:
                   7787:                                if (IS_TMP_VAR != IS_TMP_VAR) {
                   7788:                                        zval_dtor(free_op1.var);
                   7789:                                }
                   7790:                                break;
                   7791:                        case ZEND_FETCH_LOCAL:
                   7792:                                zval_dtor(free_op1.var);
                   7793:                                break;
                   7794:                        case ZEND_FETCH_STATIC:
                   7795:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   7796:                                break;
                   7797:                        case ZEND_FETCH_GLOBAL_LOCK:
                   7798:                                if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
                   7799:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   7800:                                }
                   7801:                                break;
                   7802:                }
1.1       misho    7803:        }
                   7804: 
1.1.1.2   misho    7805: 
                   7806:        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   7807:                zval_dtor(&tmp_varname);
                   7808:        }
                   7809:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   7810:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   7811:        }
                   7812:        PZVAL_LOCK(*retval);
                   7813:        switch (type) {
                   7814:                case BP_VAR_R:
                   7815:                case BP_VAR_IS:
                   7816:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   7817:                        break;
                   7818:                case BP_VAR_UNSET: {
                   7819:                        zend_free_op free_res;
                   7820: 
                   7821:                        PZVAL_UNLOCK(*retval, &free_res);
                   7822:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   7823:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   7824:                        }
                   7825:                        PZVAL_LOCK(*retval);
                   7826:                        FREE_OP_VAR_PTR(free_res);
                   7827:                }
                   7828:                /* break missing intentionally */
                   7829:                default:
                   7830:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   7831:                        break;
                   7832:        }
                   7833:        CHECK_EXCEPTION();
1.1       misho    7834:        ZEND_VM_NEXT_OPCODE();
                   7835: }
                   7836: 
1.1.1.2   misho    7837: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7838: {
1.1.1.2   misho    7839:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7840: }
1.1       misho    7841: 
1.1.1.2   misho    7842: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7843: {
                   7844:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7845: }
1.1       misho    7846: 
1.1.1.2   misho    7847: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7848: {
                   7849:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7850: }
1.1       misho    7851: 
1.1.1.2   misho    7852: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7853: {
                   7854:        USE_OPLINE
1.1       misho    7855: 
1.1.1.2   misho    7856:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7857: }
1.1       misho    7858: 
1.1.1.2   misho    7859: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7860: {
                   7861:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7862: }
1.1       misho    7863: 
1.1.1.2   misho    7864: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7865: {
                   7866:        return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   7867: }
1.1       misho    7868: 
1.1.1.2   misho    7869: static int ZEND_FASTCALL  ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7870: {
                   7871:        USE_OPLINE
                   7872:        zend_free_op free_op1;
                   7873:        zval *container;
1.1       misho    7874: 
1.1.1.2   misho    7875:        SAVE_OPLINE();
                   7876:        container = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    7877: 
1.1.1.2   misho    7878:        if (UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
                   7879:                PZVAL_LOCK(&EG(uninitialized_zval));
                   7880:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    7881:        } else {
                   7882: 
1.1.1.2   misho    7883:                zval *value = *zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
                   7884: 
                   7885:                PZVAL_LOCK(value);
                   7886:                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    7887: 
1.1.1.2   misho    7888:        }
                   7889:        CHECK_EXCEPTION();
1.1       misho    7890:        ZEND_VM_NEXT_OPCODE();
                   7891: }
                   7892: 
1.1.1.2   misho    7893: static int ZEND_FASTCALL  ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7894: {
1.1.1.2   misho    7895:        USE_OPLINE
                   7896:        zval *str = &EX_T(opline->result.var).tmp_var;
1.1       misho    7897: 
1.1.1.2   misho    7898:        SAVE_OPLINE();
1.1       misho    7899: 
1.1.1.2   misho    7900:        if (IS_TMP_VAR == IS_UNUSED) {
                   7901:                /* Initialize for erealloc in add_char_to_string */
                   7902:                Z_STRVAL_P(str) = NULL;
                   7903:                Z_STRLEN_P(str) = 0;
                   7904:                Z_TYPE_P(str) = IS_STRING;
                   7905: 
                   7906:                INIT_PZVAL(str);
1.1       misho    7907:        }
1.1.1.2   misho    7908: 
                   7909:        add_char_to_string(str, str, opline->op2.zv);
                   7910: 
                   7911:        /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
                   7912:        /*CHECK_EXCEPTION();*/
1.1       misho    7913:        ZEND_VM_NEXT_OPCODE();
                   7914: }
                   7915: 
1.1.1.2   misho    7916: static int ZEND_FASTCALL  ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    7917: {
1.1.1.2   misho    7918:        USE_OPLINE
                   7919:        zval *str = &EX_T(opline->result.var).tmp_var;
1.1       misho    7920: 
1.1.1.2   misho    7921:        SAVE_OPLINE();
1.1       misho    7922: 
1.1.1.2   misho    7923:        if (IS_TMP_VAR == IS_UNUSED) {
                   7924:                /* Initialize for erealloc in add_string_to_string */
                   7925:                Z_STRVAL_P(str) = NULL;
                   7926:                Z_STRLEN_P(str) = 0;
                   7927:                Z_TYPE_P(str) = IS_STRING;
                   7928: 
                   7929:                INIT_PZVAL(str);
                   7930:        }
                   7931: 
                   7932:        add_string_to_string(str, str, opline->op2.zv);
                   7933: 
                   7934:        /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
                   7935:        /*CHECK_EXCEPTION();*/
                   7936:        ZEND_VM_NEXT_OPCODE();
                   7937: }
                   7938: 
                   7939: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   7940: {
                   7941:        USE_OPLINE
                   7942:        zval *function_name;
                   7943:        char *function_name_strval;
                   7944:        int function_name_strlen;
                   7945:        zend_free_op free_op1;
                   7946: 
                   7947:        SAVE_OPLINE();
                   7948:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   7949: 
                   7950:        function_name = opline->op2.zv;
                   7951: 
                   7952:        if (IS_CONST != IS_CONST &&
                   7953:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
                   7954:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   7955:        }
                   7956: 
                   7957:        function_name_strval = Z_STRVAL_P(function_name);
                   7958:        function_name_strlen = Z_STRLEN_P(function_name);
                   7959: 
                   7960:        EX(object) = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   7961: 
                   7962:        if (EXPECTED(EX(object) != NULL) &&
                   7963:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   7964:                EX(called_scope) = Z_OBJCE_P(EX(object));
                   7965: 
                   7966:                if (IS_CONST != IS_CONST ||
                   7967:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   7968:                    zval *object = EX(object);
                   7969: 
                   7970:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   7971:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   7972:                        }
                   7973: 
                   7974:                        /* First, locate the function. */
                   7975:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   7976:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   7977:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   7978:                        }
                   7979:                        if (IS_CONST == IS_CONST &&
                   7980:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   7981:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   7982:                            EXPECTED(EX(object) == object)) {
                   7983:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   7984:                        }
                   7985:                }
1.1       misho    7986:        } else {
1.1.1.2   misho    7987:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   7988:        }
                   7989: 
                   7990:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   7991:                EX(object) = NULL;
                   7992:        } else {
                   7993:                if (!PZVAL_IS_REF(EX(object))) {
                   7994:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   7995:                } else {
                   7996:                        zval *this_ptr;
                   7997:                        ALLOC_ZVAL(this_ptr);
                   7998:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   7999:                        zval_copy_ctor(this_ptr);
                   8000:                        EX(object) = this_ptr;
                   8001:                }
1.1       misho    8002:        }
                   8003: 
                   8004: 
1.1.1.2   misho    8005:        CHECK_EXCEPTION();
                   8006:        ZEND_VM_NEXT_OPCODE();
                   8007: }
                   8008: 
                   8009: static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8010: {
                   8011:        USE_OPLINE
                   8012:        zend_free_op free_op1;
                   8013: 
                   8014:        SAVE_OPLINE();
                   8015:        if (IS_TMP_VAR==IS_VAR) {
                   8016:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
                   8017:        }
                   8018:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   8019:                                 _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8020:                                 opline->op2.zv TSRMLS_CC);
                   8021: 
                   8022:        CHECK_EXCEPTION();
                   8023:        ZEND_VM_NEXT_OPCODE();
                   8024: }
                   8025: 
                   8026: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8027: {
                   8028:        USE_OPLINE
                   8029:        zend_free_op free_op1;
                   8030:        zval *expr_ptr;
                   8031: 
                   8032:        SAVE_OPLINE();
                   8033:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   8034:                zval **expr_ptr_ptr = NULL;
                   8035: 
                   8036:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   8037:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   8038:                }
                   8039:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
                   8040:                expr_ptr = *expr_ptr_ptr;
                   8041:                Z_ADDREF_P(expr_ptr);
                   8042:        } else {
                   8043:                expr_ptr=_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   8044:                if (1) { /* temporary variable */
                   8045:                        zval *new_expr;
                   8046: 
                   8047:                        ALLOC_ZVAL(new_expr);
                   8048:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   8049:                        expr_ptr = new_expr;
                   8050:                } else if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    8051:                        zval *new_expr;
                   8052: 
                   8053:                        ALLOC_ZVAL(new_expr);
                   8054:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   8055:                        expr_ptr = new_expr;
                   8056:                        zendi_zval_copy_ctor(*expr_ptr);
                   8057:                } else {
                   8058:                        Z_ADDREF_P(expr_ptr);
                   8059:                }
                   8060:        }
1.1.1.2   misho    8061: 
                   8062:        if (IS_CONST != IS_UNUSED) {
                   8063: 
                   8064:                zval *offset = opline->op2.zv;
                   8065:                ulong hval;
                   8066: 
1.1       misho    8067:                switch (Z_TYPE_P(offset)) {
                   8068:                        case IS_DOUBLE:
1.1.1.2   misho    8069:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   8070:                                goto num_index;
1.1       misho    8071:                        case IS_LONG:
                   8072:                        case IS_BOOL:
1.1.1.2   misho    8073:                                hval = Z_LVAL_P(offset);
                   8074: num_index:
                   8075:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    8076:                                break;
                   8077:                        case IS_STRING:
1.1.1.2   misho    8078:                                if (IS_CONST == IS_CONST) {
                   8079:                                        hval = Z_HASH_P(offset);
                   8080:                                } else {
                   8081:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   8082:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   8083:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   8084:                                        } else {
                   8085:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   8086:                                        }
                   8087:                                }
                   8088:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    8089:                                break;
                   8090:                        case IS_NULL:
1.1.1.2   misho    8091:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    8092:                                break;
                   8093:                        default:
                   8094:                                zend_error(E_WARNING, "Illegal offset type");
                   8095:                                zval_ptr_dtor(&expr_ptr);
                   8096:                                /* do nothing */
                   8097:                                break;
                   8098:                }
1.1.1.2   misho    8099: 
1.1       misho    8100:        } else {
1.1.1.2   misho    8101:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    8102:        }
1.1.1.2   misho    8103:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
1.1       misho    8104: 
                   8105:        } else {
                   8106: 
                   8107:        }
1.1.1.2   misho    8108:        CHECK_EXCEPTION();
1.1       misho    8109:        ZEND_VM_NEXT_OPCODE();
                   8110: }
                   8111: 
1.1.1.2   misho    8112: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8113: {
1.1.1.2   misho    8114:        USE_OPLINE
1.1       misho    8115: 
1.1.1.2   misho    8116:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    8117:        if (IS_TMP_VAR == IS_UNUSED) {
                   8118:                ZEND_VM_NEXT_OPCODE();
                   8119: #if 0 || IS_TMP_VAR != IS_UNUSED
                   8120:        } else {
1.1.1.2   misho    8121:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    8122: #endif
                   8123:        }
                   8124: }
                   8125: 
1.1.1.2   misho    8126: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8127: {
1.1.1.2   misho    8128:        USE_OPLINE
                   8129:        zval tmp, *varname;
                   8130:        HashTable *target_symbol_table;
                   8131:        zend_free_op free_op1;
                   8132: 
                   8133:        SAVE_OPLINE();
                   8134:        if (IS_TMP_VAR == IS_CV &&
                   8135:            IS_CONST == IS_UNUSED &&
                   8136:            (opline->extended_value & ZEND_QUICK_SET)) {
                   8137:                if (EG(active_symbol_table)) {
                   8138:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   8139: 
                   8140:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   8141:                        EX_CV(opline->op1.var) = NULL;
                   8142:                } else if (EX_CV(opline->op1.var)) {
                   8143:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   8144:                        EX_CV(opline->op1.var) = NULL;
                   8145:                }
                   8146:                CHECK_EXCEPTION();
                   8147:                ZEND_VM_NEXT_OPCODE();
                   8148:        }
                   8149: 
                   8150:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   8151: 
                   8152:        if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   8153:                ZVAL_COPY_VALUE(&tmp, varname);
                   8154:                zval_copy_ctor(&tmp);
                   8155:                convert_to_string(&tmp);
                   8156:                varname = &tmp;
                   8157:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   8158:                Z_ADDREF_P(varname);
                   8159:        }
                   8160: 
                   8161:        if (IS_CONST != IS_UNUSED) {
                   8162:                zend_class_entry *ce;
                   8163: 
                   8164:                if (IS_CONST == IS_CONST) {
                   8165:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   8166:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   8167:                        } else {
                   8168:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    8169:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    8170:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   8171:                                                zval_dtor(&tmp);
                   8172:                                        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   8173:                                                zval_ptr_dtor(&varname);
                   8174:                                        }
                   8175:                                        zval_dtor(free_op1.var);
1.1.1.4   misho    8176:                                        HANDLE_EXCEPTION();
                   8177:                                }
                   8178:                                if (UNEXPECTED(ce == NULL)) {
                   8179:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    8180:                                }
                   8181:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   8182:                        }
                   8183:                } else {
                   8184:                        ce = EX_T(opline->op2.var).class_entry;
                   8185:                }
                   8186:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   8187:        } else {
                   8188:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   8189: 
                   8190:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   8191:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   8192:        }
1.1       misho    8193: 
1.1.1.2   misho    8194:        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   8195:                zval_dtor(&tmp);
                   8196:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   8197:                zval_ptr_dtor(&varname);
                   8198:        }
1.1       misho    8199:        zval_dtor(free_op1.var);
1.1.1.2   misho    8200:        CHECK_EXCEPTION();
1.1       misho    8201:        ZEND_VM_NEXT_OPCODE();
                   8202: }
                   8203: 
1.1.1.2   misho    8204: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8205: {
1.1.1.2   misho    8206:        USE_OPLINE
                   8207:        zval **value;
                   8208:        zend_bool isset = 1;
1.1       misho    8209: 
1.1.1.2   misho    8210:        SAVE_OPLINE();
                   8211:        if (IS_TMP_VAR == IS_CV &&
                   8212:            IS_CONST == IS_UNUSED &&
                   8213:            (opline->extended_value & ZEND_QUICK_SET)) {
                   8214:                if (EX_CV(opline->op1.var)) {
                   8215:                        value = EX_CV(opline->op1.var);
                   8216:                } else if (EG(active_symbol_table)) {
                   8217:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   8218: 
                   8219:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   8220:                                isset = 0;
                   8221:                        }
                   8222:                } else {
                   8223:                        isset = 0;
                   8224:                }
                   8225:        } else {
                   8226:                HashTable *target_symbol_table;
                   8227:                zend_free_op free_op1;
                   8228:                zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   8229: 
                   8230:                if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   8231:                        ZVAL_COPY_VALUE(&tmp, varname);
                   8232:                        zval_copy_ctor(&tmp);
                   8233:                        convert_to_string(&tmp);
                   8234:                        varname = &tmp;
                   8235:                }
                   8236: 
                   8237:                if (IS_CONST != IS_UNUSED) {
                   8238:                        zend_class_entry *ce;
                   8239: 
                   8240:                        if (IS_CONST == IS_CONST) {
                   8241:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   8242:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   8243:                                } else {
                   8244:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   8245:                                        if (UNEXPECTED(ce == NULL)) {
                   8246:                                                CHECK_EXCEPTION();
                   8247:                                                ZEND_VM_NEXT_OPCODE();
                   8248:                                        }
                   8249:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   8250:                                }
                   8251:                        } else {
                   8252:                                ce = EX_T(opline->op2.var).class_entry;
                   8253:                        }
                   8254:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   8255:                        if (!value) {
                   8256:                                isset = 0;
                   8257:                        }
                   8258:                } else {
                   8259:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   8260:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   8261:                                isset = 0;
                   8262:                        }
                   8263:                }
                   8264: 
                   8265:                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   8266:                        zval_dtor(&tmp);
                   8267:                }
                   8268:                zval_dtor(free_op1.var);
                   8269:        }
                   8270: 
                   8271:        if (opline->extended_value & ZEND_ISSET) {
                   8272:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   8273:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   8274:                } else {
                   8275:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   8276:                }
                   8277:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   8278:                if (!isset || !i_zend_is_true(*value)) {
                   8279:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   8280:                } else {
                   8281:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   8282:                }
                   8283:        }
                   8284: 
                   8285:        CHECK_EXCEPTION();
1.1       misho    8286:        ZEND_VM_NEXT_OPCODE();
                   8287: }
                   8288: 
1.1.1.2   misho    8289: static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8290: {
1.1.1.2   misho    8291:        USE_OPLINE
1.1       misho    8292:        zend_free_op free_op1, free_op2;
                   8293: 
1.1.1.2   misho    8294:        SAVE_OPLINE();
                   8295:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   8296:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8297:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8298:        zval_dtor(free_op1.var);
1.1.1.2   misho    8299:        zval_dtor(free_op2.var);
                   8300:        CHECK_EXCEPTION();
1.1       misho    8301:        ZEND_VM_NEXT_OPCODE();
                   8302: }
                   8303: 
1.1.1.2   misho    8304: static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8305: {
1.1.1.2   misho    8306:        USE_OPLINE
1.1       misho    8307:        zend_free_op free_op1, free_op2;
                   8308: 
1.1.1.2   misho    8309:        SAVE_OPLINE();
                   8310:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   8311:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8312:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8313:        zval_dtor(free_op1.var);
1.1.1.2   misho    8314:        zval_dtor(free_op2.var);
                   8315:        CHECK_EXCEPTION();
1.1       misho    8316:        ZEND_VM_NEXT_OPCODE();
                   8317: }
                   8318: 
1.1.1.2   misho    8319: static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8320: {
1.1.1.2   misho    8321:        USE_OPLINE
1.1       misho    8322:        zend_free_op free_op1, free_op2;
                   8323: 
1.1.1.2   misho    8324:        SAVE_OPLINE();
                   8325:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   8326:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8327:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8328:        zval_dtor(free_op1.var);
1.1.1.2   misho    8329:        zval_dtor(free_op2.var);
                   8330:        CHECK_EXCEPTION();
1.1       misho    8331:        ZEND_VM_NEXT_OPCODE();
                   8332: }
                   8333: 
1.1.1.2   misho    8334: static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8335: {
1.1.1.2   misho    8336:        USE_OPLINE
1.1       misho    8337:        zend_free_op free_op1, free_op2;
                   8338: 
1.1.1.2   misho    8339:        SAVE_OPLINE();
                   8340:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   8341:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8342:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8343:        zval_dtor(free_op1.var);
1.1.1.2   misho    8344:        zval_dtor(free_op2.var);
                   8345:        CHECK_EXCEPTION();
1.1       misho    8346:        ZEND_VM_NEXT_OPCODE();
                   8347: }
                   8348: 
1.1.1.2   misho    8349: static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8350: {
1.1.1.2   misho    8351:        USE_OPLINE
1.1       misho    8352:        zend_free_op free_op1, free_op2;
                   8353: 
1.1.1.2   misho    8354:        SAVE_OPLINE();
                   8355:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   8356:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8357:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8358:        zval_dtor(free_op1.var);
1.1.1.2   misho    8359:        zval_dtor(free_op2.var);
                   8360:        CHECK_EXCEPTION();
1.1       misho    8361:        ZEND_VM_NEXT_OPCODE();
                   8362: }
                   8363: 
1.1.1.2   misho    8364: static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8365: {
1.1.1.2   misho    8366:        USE_OPLINE
1.1       misho    8367:        zend_free_op free_op1, free_op2;
                   8368: 
1.1.1.2   misho    8369:        SAVE_OPLINE();
                   8370:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   8371:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8372:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8373:        zval_dtor(free_op1.var);
1.1.1.2   misho    8374:        zval_dtor(free_op2.var);
                   8375:        CHECK_EXCEPTION();
1.1       misho    8376:        ZEND_VM_NEXT_OPCODE();
                   8377: }
                   8378: 
1.1.1.2   misho    8379: static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8380: {
1.1.1.2   misho    8381:        USE_OPLINE
1.1       misho    8382:        zend_free_op free_op1, free_op2;
                   8383: 
1.1.1.2   misho    8384:        SAVE_OPLINE();
                   8385:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   8386:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8387:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8388:        zval_dtor(free_op1.var);
1.1.1.2   misho    8389:        zval_dtor(free_op2.var);
                   8390:        CHECK_EXCEPTION();
1.1       misho    8391:        ZEND_VM_NEXT_OPCODE();
                   8392: }
                   8393: 
1.1.1.2   misho    8394: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8395: {
1.1.1.2   misho    8396:        USE_OPLINE
1.1       misho    8397:        zend_free_op free_op1, free_op2;
                   8398: 
1.1.1.2   misho    8399:        SAVE_OPLINE();
                   8400:        concat_function(&EX_T(opline->result.var).tmp_var,
                   8401:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8402:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8403:        zval_dtor(free_op1.var);
1.1.1.2   misho    8404:        zval_dtor(free_op2.var);
                   8405:        CHECK_EXCEPTION();
1.1       misho    8406:        ZEND_VM_NEXT_OPCODE();
                   8407: }
                   8408: 
1.1.1.2   misho    8409: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8410: {
1.1.1.2   misho    8411:        USE_OPLINE
1.1       misho    8412:        zend_free_op free_op1, free_op2;
                   8413: 
1.1.1.2   misho    8414:        SAVE_OPLINE();
                   8415:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   8416:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8417:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8418:        zval_dtor(free_op1.var);
1.1.1.2   misho    8419:        zval_dtor(free_op2.var);
                   8420:        CHECK_EXCEPTION();
1.1       misho    8421:        ZEND_VM_NEXT_OPCODE();
                   8422: }
                   8423: 
1.1.1.2   misho    8424: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8425: {
1.1.1.2   misho    8426:        USE_OPLINE
1.1       misho    8427:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    8428:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    8429: 
1.1.1.2   misho    8430:        SAVE_OPLINE();
                   8431:        is_identical_function(result,
                   8432:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8433:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8434:        Z_LVAL_P(result) = !Z_LVAL_P(result);
1.1       misho    8435:        zval_dtor(free_op1.var);
1.1.1.2   misho    8436:        zval_dtor(free_op2.var);
                   8437:        CHECK_EXCEPTION();
1.1       misho    8438:        ZEND_VM_NEXT_OPCODE();
                   8439: }
                   8440: 
1.1.1.2   misho    8441: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8442: {
1.1.1.2   misho    8443:        USE_OPLINE
1.1       misho    8444:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    8445:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    8446: 
1.1.1.2   misho    8447:        SAVE_OPLINE();
                   8448:        ZVAL_BOOL(result, fast_equal_function(result,
                   8449:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8450:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    8451:        zval_dtor(free_op1.var);
1.1.1.2   misho    8452:        zval_dtor(free_op2.var);
                   8453:        CHECK_EXCEPTION();
1.1       misho    8454:        ZEND_VM_NEXT_OPCODE();
                   8455: }
                   8456: 
1.1.1.2   misho    8457: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8458: {
1.1.1.2   misho    8459:        USE_OPLINE
1.1       misho    8460:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    8461:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    8462: 
1.1.1.2   misho    8463:        SAVE_OPLINE();
                   8464:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   8465:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8466:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    8467:        zval_dtor(free_op1.var);
1.1.1.2   misho    8468:        zval_dtor(free_op2.var);
                   8469:        CHECK_EXCEPTION();
1.1       misho    8470:        ZEND_VM_NEXT_OPCODE();
                   8471: }
                   8472: 
1.1.1.2   misho    8473: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8474: {
1.1.1.2   misho    8475:        USE_OPLINE
1.1       misho    8476:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    8477:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    8478: 
1.1.1.2   misho    8479:        SAVE_OPLINE();
                   8480:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   8481:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8482:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    8483:        zval_dtor(free_op1.var);
1.1.1.2   misho    8484:        zval_dtor(free_op2.var);
                   8485:        CHECK_EXCEPTION();
1.1       misho    8486:        ZEND_VM_NEXT_OPCODE();
                   8487: }
                   8488: 
1.1.1.2   misho    8489: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8490: {
1.1.1.2   misho    8491:        USE_OPLINE
1.1       misho    8492:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    8493:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    8494: 
1.1.1.2   misho    8495:        SAVE_OPLINE();
                   8496:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   8497:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8498:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    8499:        zval_dtor(free_op1.var);
1.1.1.2   misho    8500:        zval_dtor(free_op2.var);
                   8501:        CHECK_EXCEPTION();
1.1       misho    8502:        ZEND_VM_NEXT_OPCODE();
                   8503: }
                   8504: 
1.1.1.2   misho    8505: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8506: {
1.1.1.2   misho    8507:        USE_OPLINE
1.1       misho    8508:        zend_free_op free_op1, free_op2;
                   8509: 
1.1.1.2   misho    8510:        SAVE_OPLINE();
                   8511:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   8512:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8513:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8514:        zval_dtor(free_op1.var);
1.1.1.2   misho    8515:        zval_dtor(free_op2.var);
                   8516:        CHECK_EXCEPTION();
1.1       misho    8517:        ZEND_VM_NEXT_OPCODE();
                   8518: }
                   8519: 
1.1.1.2   misho    8520: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8521: {
1.1.1.2   misho    8522:        USE_OPLINE
1.1       misho    8523:        zend_free_op free_op1, free_op2;
                   8524: 
1.1.1.2   misho    8525:        SAVE_OPLINE();
                   8526:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   8527:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8528:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    8529:        zval_dtor(free_op1.var);
1.1.1.2   misho    8530:        zval_dtor(free_op2.var);
                   8531:        CHECK_EXCEPTION();
1.1       misho    8532:        ZEND_VM_NEXT_OPCODE();
                   8533: }
                   8534: 
1.1.1.2   misho    8535: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8536: {
                   8537:        USE_OPLINE
                   8538:        zend_free_op free_op1, free_op2;
                   8539: 
                   8540:        SAVE_OPLINE();
                   8541:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   8542:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8543:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8544:        zval_dtor(free_op1.var);
                   8545:        zval_dtor(free_op2.var);
                   8546:        CHECK_EXCEPTION();
                   8547:        ZEND_VM_NEXT_OPCODE();
                   8548: }
                   8549: 
                   8550: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8551: {
                   8552:        USE_OPLINE
                   8553:        zend_free_op free_op1, free_op2;
                   8554: 
                   8555:        SAVE_OPLINE();
                   8556:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   8557:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8558:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8559:        zval_dtor(free_op1.var);
                   8560:        zval_dtor(free_op2.var);
                   8561:        CHECK_EXCEPTION();
                   8562:        ZEND_VM_NEXT_OPCODE();
                   8563: }
                   8564: 
                   8565: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    8566: {
1.1.1.2   misho    8567:        USE_OPLINE
1.1       misho    8568:        zend_free_op free_op2;
1.1.1.2   misho    8569:        zval *str = &EX_T(opline->result.var).tmp_var;
                   8570:        zval *var;
1.1       misho    8571:        zval var_copy;
                   8572:        int use_copy = 0;
                   8573: 
1.1.1.2   misho    8574:        SAVE_OPLINE();
                   8575:        var = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   8576: 
1.1       misho    8577:        if (IS_TMP_VAR == IS_UNUSED) {
                   8578:                /* Initialize for erealloc in add_string_to_string */
                   8579:                Z_STRVAL_P(str) = NULL;
                   8580:                Z_STRLEN_P(str) = 0;
                   8581:                Z_TYPE_P(str) = IS_STRING;
                   8582: 
                   8583:                INIT_PZVAL(str);
                   8584:        }
                   8585: 
1.1.1.2   misho    8586:        if (Z_TYPE_P(var) != IS_STRING) {
                   8587:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   8588: 
                   8589:                if (use_copy) {
                   8590:                        var = &var_copy;
                   8591:                }
                   8592:        }
                   8593:        add_string_to_string(str, str, var);
                   8594: 
                   8595:        if (use_copy) {
                   8596:                zval_dtor(var);
                   8597:        }
                   8598:        /* original comment, possibly problematic:
                   8599:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   8600:         * (Zeev):  I don't think it's problematic, we only use variables
                   8601:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   8602:         * string offsets or overloaded objects
                   8603:         */
                   8604:        zval_dtor(free_op2.var);
                   8605: 
                   8606:        CHECK_EXCEPTION();
                   8607:        ZEND_VM_NEXT_OPCODE();
                   8608: }
                   8609: 
                   8610: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8611: {
                   8612:        USE_OPLINE
                   8613:        zval *function_name;
                   8614:        char *function_name_strval;
                   8615:        int function_name_strlen;
                   8616:        zend_free_op free_op1, free_op2;
                   8617: 
                   8618:        SAVE_OPLINE();
                   8619:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   8620: 
                   8621:        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   8622: 
                   8623:        if (IS_TMP_VAR != IS_CONST &&
                   8624:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
                   8625:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   8626:        }
                   8627: 
                   8628:        function_name_strval = Z_STRVAL_P(function_name);
                   8629:        function_name_strlen = Z_STRLEN_P(function_name);
                   8630: 
                   8631:        EX(object) = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   8632: 
                   8633:        if (EXPECTED(EX(object) != NULL) &&
                   8634:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   8635:                EX(called_scope) = Z_OBJCE_P(EX(object));
                   8636: 
                   8637:                if (IS_TMP_VAR != IS_CONST ||
                   8638:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   8639:                    zval *object = EX(object);
                   8640: 
                   8641:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   8642:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   8643:                        }
                   8644: 
                   8645:                        /* First, locate the function. */
                   8646:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   8647:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   8648:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   8649:                        }
                   8650:                        if (IS_TMP_VAR == IS_CONST &&
                   8651:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   8652:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   8653:                            EXPECTED(EX(object) == object)) {
                   8654:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   8655:                        }
                   8656:                }
                   8657:        } else {
                   8658:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   8659:        }
                   8660: 
                   8661:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   8662:                EX(object) = NULL;
                   8663:        } else {
                   8664:                if (!PZVAL_IS_REF(EX(object))) {
                   8665:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   8666:                } else {
                   8667:                        zval *this_ptr;
                   8668:                        ALLOC_ZVAL(this_ptr);
                   8669:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   8670:                        zval_copy_ctor(this_ptr);
                   8671:                        EX(object) = this_ptr;
                   8672:                }
                   8673:        }
                   8674: 
                   8675:        zval_dtor(free_op2.var);
                   8676: 
                   8677:        CHECK_EXCEPTION();
                   8678:        ZEND_VM_NEXT_OPCODE();
                   8679: }
                   8680: 
                   8681: static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8682: {
                   8683:        USE_OPLINE
                   8684:        zend_free_op free_op1, free_op2;
                   8685: 
                   8686:        SAVE_OPLINE();
                   8687:        if (IS_TMP_VAR==IS_VAR) {
                   8688:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
                   8689:        }
                   8690:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   8691:                                 _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8692:                                 _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8693: 
                   8694:        zval_dtor(free_op2.var);
                   8695:        CHECK_EXCEPTION();
                   8696:        ZEND_VM_NEXT_OPCODE();
                   8697: }
                   8698: 
                   8699: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8700: {
                   8701:        USE_OPLINE
                   8702:        zend_free_op free_op1;
                   8703:        zval *expr_ptr;
                   8704: 
                   8705:        SAVE_OPLINE();
                   8706:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   8707:                zval **expr_ptr_ptr = NULL;
                   8708: 
                   8709:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   8710:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   8711:                }
                   8712:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
                   8713:                expr_ptr = *expr_ptr_ptr;
                   8714:                Z_ADDREF_P(expr_ptr);
                   8715:        } else {
                   8716:                expr_ptr=_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   8717:                if (1) { /* temporary variable */
                   8718:                        zval *new_expr;
                   8719: 
                   8720:                        ALLOC_ZVAL(new_expr);
                   8721:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   8722:                        expr_ptr = new_expr;
                   8723:                } else if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
                   8724:                        zval *new_expr;
                   8725: 
                   8726:                        ALLOC_ZVAL(new_expr);
                   8727:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   8728:                        expr_ptr = new_expr;
                   8729:                        zendi_zval_copy_ctor(*expr_ptr);
                   8730:                } else {
                   8731:                        Z_ADDREF_P(expr_ptr);
                   8732:                }
                   8733:        }
                   8734: 
                   8735:        if (IS_TMP_VAR != IS_UNUSED) {
                   8736:                zend_free_op free_op2;
                   8737:                zval *offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   8738:                ulong hval;
                   8739: 
                   8740:                switch (Z_TYPE_P(offset)) {
                   8741:                        case IS_DOUBLE:
                   8742:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   8743:                                goto num_index;
                   8744:                        case IS_LONG:
                   8745:                        case IS_BOOL:
                   8746:                                hval = Z_LVAL_P(offset);
                   8747: num_index:
                   8748:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
                   8749:                                break;
                   8750:                        case IS_STRING:
                   8751:                                if (IS_TMP_VAR == IS_CONST) {
                   8752:                                        hval = Z_HASH_P(offset);
                   8753:                                } else {
                   8754:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   8755:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   8756:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   8757:                                        } else {
                   8758:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   8759:                                        }
                   8760:                                }
                   8761:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
                   8762:                                break;
                   8763:                        case IS_NULL:
                   8764:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
                   8765:                                break;
                   8766:                        default:
                   8767:                                zend_error(E_WARNING, "Illegal offset type");
                   8768:                                zval_ptr_dtor(&expr_ptr);
                   8769:                                /* do nothing */
                   8770:                                break;
                   8771:                }
                   8772:                zval_dtor(free_op2.var);
                   8773:        } else {
                   8774:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
                   8775:        }
                   8776:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   8777: 
                   8778:        } else {
                   8779: 
                   8780:        }
                   8781:        CHECK_EXCEPTION();
                   8782:        ZEND_VM_NEXT_OPCODE();
                   8783: }
                   8784: 
                   8785: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8786: {
                   8787:        USE_OPLINE
                   8788: 
                   8789:        array_init(&EX_T(opline->result.var).tmp_var);
                   8790:        if (IS_TMP_VAR == IS_UNUSED) {
                   8791:                ZEND_VM_NEXT_OPCODE();
                   8792: #if 0 || IS_TMP_VAR != IS_UNUSED
                   8793:        } else {
                   8794:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   8795: #endif
                   8796:        }
                   8797: }
                   8798: 
                   8799: static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8800: {
                   8801:        USE_OPLINE
                   8802:        zend_free_op free_op1, free_op2;
                   8803: 
                   8804:        SAVE_OPLINE();
                   8805:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   8806:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8807:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8808:        zval_dtor(free_op1.var);
                   8809:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8810:        CHECK_EXCEPTION();
                   8811:        ZEND_VM_NEXT_OPCODE();
                   8812: }
                   8813: 
                   8814: static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8815: {
                   8816:        USE_OPLINE
                   8817:        zend_free_op free_op1, free_op2;
                   8818: 
                   8819:        SAVE_OPLINE();
                   8820:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   8821:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8822:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8823:        zval_dtor(free_op1.var);
                   8824:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8825:        CHECK_EXCEPTION();
                   8826:        ZEND_VM_NEXT_OPCODE();
                   8827: }
                   8828: 
                   8829: static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8830: {
                   8831:        USE_OPLINE
                   8832:        zend_free_op free_op1, free_op2;
                   8833: 
                   8834:        SAVE_OPLINE();
                   8835:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   8836:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8837:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8838:        zval_dtor(free_op1.var);
                   8839:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8840:        CHECK_EXCEPTION();
                   8841:        ZEND_VM_NEXT_OPCODE();
                   8842: }
                   8843: 
                   8844: static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8845: {
                   8846:        USE_OPLINE
                   8847:        zend_free_op free_op1, free_op2;
                   8848: 
                   8849:        SAVE_OPLINE();
                   8850:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   8851:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8852:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8853:        zval_dtor(free_op1.var);
                   8854:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8855:        CHECK_EXCEPTION();
                   8856:        ZEND_VM_NEXT_OPCODE();
                   8857: }
                   8858: 
                   8859: static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8860: {
                   8861:        USE_OPLINE
                   8862:        zend_free_op free_op1, free_op2;
                   8863: 
                   8864:        SAVE_OPLINE();
                   8865:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   8866:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8867:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8868:        zval_dtor(free_op1.var);
                   8869:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8870:        CHECK_EXCEPTION();
                   8871:        ZEND_VM_NEXT_OPCODE();
                   8872: }
                   8873: 
                   8874: static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8875: {
                   8876:        USE_OPLINE
                   8877:        zend_free_op free_op1, free_op2;
                   8878: 
                   8879:        SAVE_OPLINE();
                   8880:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   8881:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8882:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8883:        zval_dtor(free_op1.var);
                   8884:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8885:        CHECK_EXCEPTION();
                   8886:        ZEND_VM_NEXT_OPCODE();
                   8887: }
                   8888: 
                   8889: static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8890: {
                   8891:        USE_OPLINE
                   8892:        zend_free_op free_op1, free_op2;
                   8893: 
                   8894:        SAVE_OPLINE();
                   8895:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   8896:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8897:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8898:        zval_dtor(free_op1.var);
                   8899:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8900:        CHECK_EXCEPTION();
                   8901:        ZEND_VM_NEXT_OPCODE();
                   8902: }
                   8903: 
                   8904: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8905: {
                   8906:        USE_OPLINE
                   8907:        zend_free_op free_op1, free_op2;
                   8908: 
                   8909:        SAVE_OPLINE();
                   8910:        concat_function(&EX_T(opline->result.var).tmp_var,
                   8911:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8912:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8913:        zval_dtor(free_op1.var);
                   8914:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8915:        CHECK_EXCEPTION();
                   8916:        ZEND_VM_NEXT_OPCODE();
                   8917: }
                   8918: 
                   8919: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8920: {
                   8921:        USE_OPLINE
                   8922:        zend_free_op free_op1, free_op2;
                   8923: 
                   8924:        SAVE_OPLINE();
                   8925:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   8926:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8927:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8928:        zval_dtor(free_op1.var);
                   8929:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8930:        CHECK_EXCEPTION();
                   8931:        ZEND_VM_NEXT_OPCODE();
                   8932: }
                   8933: 
                   8934: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8935: {
                   8936:        USE_OPLINE
                   8937:        zend_free_op free_op1, free_op2;
                   8938:        zval *result = &EX_T(opline->result.var).tmp_var;
                   8939: 
                   8940:        SAVE_OPLINE();
                   8941:        is_identical_function(result,
                   8942:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8943:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   8944:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   8945:        zval_dtor(free_op1.var);
                   8946:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8947:        CHECK_EXCEPTION();
                   8948:        ZEND_VM_NEXT_OPCODE();
                   8949: }
                   8950: 
                   8951: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8952: {
                   8953:        USE_OPLINE
                   8954:        zend_free_op free_op1, free_op2;
                   8955:        zval *result = &EX_T(opline->result.var).tmp_var;
                   8956: 
                   8957:        SAVE_OPLINE();
                   8958:        ZVAL_BOOL(result, fast_equal_function(result,
                   8959:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8960:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
                   8961:        zval_dtor(free_op1.var);
                   8962:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8963:        CHECK_EXCEPTION();
                   8964:        ZEND_VM_NEXT_OPCODE();
                   8965: }
                   8966: 
                   8967: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8968: {
                   8969:        USE_OPLINE
                   8970:        zend_free_op free_op1, free_op2;
                   8971:        zval *result = &EX_T(opline->result.var).tmp_var;
                   8972: 
                   8973:        SAVE_OPLINE();
                   8974:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   8975:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8976:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
                   8977:        zval_dtor(free_op1.var);
                   8978:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8979:        CHECK_EXCEPTION();
                   8980:        ZEND_VM_NEXT_OPCODE();
                   8981: }
                   8982: 
                   8983: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   8984: {
                   8985:        USE_OPLINE
                   8986:        zend_free_op free_op1, free_op2;
                   8987:        zval *result = &EX_T(opline->result.var).tmp_var;
                   8988: 
                   8989:        SAVE_OPLINE();
                   8990:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   8991:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   8992:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
                   8993:        zval_dtor(free_op1.var);
                   8994:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   8995:        CHECK_EXCEPTION();
                   8996:        ZEND_VM_NEXT_OPCODE();
                   8997: }
                   8998: 
                   8999: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9000: {
                   9001:        USE_OPLINE
                   9002:        zend_free_op free_op1, free_op2;
                   9003:        zval *result = &EX_T(opline->result.var).tmp_var;
                   9004: 
                   9005:        SAVE_OPLINE();
                   9006:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   9007:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9008:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
                   9009:        zval_dtor(free_op1.var);
                   9010:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9011:        CHECK_EXCEPTION();
                   9012:        ZEND_VM_NEXT_OPCODE();
                   9013: }
                   9014: 
                   9015: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9016: {
                   9017:        USE_OPLINE
                   9018:        zend_free_op free_op1, free_op2;
                   9019: 
                   9020:        SAVE_OPLINE();
                   9021:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   9022:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9023:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   9024:        zval_dtor(free_op1.var);
                   9025:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9026:        CHECK_EXCEPTION();
                   9027:        ZEND_VM_NEXT_OPCODE();
                   9028: }
                   9029: 
                   9030: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9031: {
                   9032:        USE_OPLINE
                   9033:        zend_free_op free_op1, free_op2;
                   9034: 
                   9035:        SAVE_OPLINE();
                   9036:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   9037:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9038:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   9039:        zval_dtor(free_op1.var);
                   9040:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9041:        CHECK_EXCEPTION();
                   9042:        ZEND_VM_NEXT_OPCODE();
                   9043: }
                   9044: 
                   9045: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9046: {
                   9047:        USE_OPLINE
                   9048:        zend_free_op free_op1, free_op2;
                   9049: 
                   9050:        SAVE_OPLINE();
                   9051:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   9052:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9053:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   9054:        zval_dtor(free_op1.var);
                   9055:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9056:        CHECK_EXCEPTION();
                   9057:        ZEND_VM_NEXT_OPCODE();
                   9058: }
                   9059: 
                   9060: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9061: {
                   9062:        USE_OPLINE
                   9063:        zend_free_op free_op1, free_op2;
                   9064: 
                   9065:        SAVE_OPLINE();
                   9066:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   9067:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9068:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   9069:        zval_dtor(free_op1.var);
                   9070:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9071:        CHECK_EXCEPTION();
                   9072:        ZEND_VM_NEXT_OPCODE();
                   9073: }
                   9074: 
                   9075: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
                   9076: {
                   9077:        USE_OPLINE
                   9078:        zend_free_op free_op1;
                   9079:        zval *varname;
                   9080:        zval **retval;
                   9081:        zval tmp_varname;
                   9082:        HashTable *target_symbol_table;
                   9083:        ulong hash_value;
                   9084: 
                   9085:        SAVE_OPLINE();
                   9086:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9087: 
                   9088:        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   9089:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   9090:                zval_copy_ctor(&tmp_varname);
                   9091:                Z_SET_REFCOUNT(tmp_varname, 1);
                   9092:                Z_UNSET_ISREF(tmp_varname);
                   9093:                convert_to_string(&tmp_varname);
                   9094:                varname = &tmp_varname;
                   9095:        }
                   9096: 
                   9097:        if (IS_VAR != IS_UNUSED) {
                   9098:                zend_class_entry *ce;
                   9099: 
                   9100:                if (IS_VAR == IS_CONST) {
                   9101:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   9102:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   9103:                        } else {
                   9104:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   9105:                                if (UNEXPECTED(ce == NULL)) {
                   9106:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   9107:                                                zval_dtor(&tmp_varname);
                   9108:                                        }
                   9109:                                        zval_dtor(free_op1.var);
                   9110:                                        CHECK_EXCEPTION();
                   9111:                                        ZEND_VM_NEXT_OPCODE();
                   9112:                                }
                   9113:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   9114:                        }
                   9115:                } else {
                   9116:                        ce = EX_T(opline->op2.var).class_entry;
                   9117:                }
                   9118:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   9119:                zval_dtor(free_op1.var);
                   9120:        } else {
                   9121:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   9122: /*
                   9123:                if (!target_symbol_table) {
                   9124:                        CHECK_EXCEPTION();
                   9125:                        ZEND_VM_NEXT_OPCODE();
                   9126:                }
                   9127: */
                   9128:                if (IS_TMP_VAR == IS_CONST) {
                   9129:                        hash_value = Z_HASH_P(varname);
                   9130:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   9131:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   9132:                } else {
                   9133:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   9134:                }
                   9135: 
                   9136:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   9137:                        switch (type) {
                   9138:                                case BP_VAR_R:
                   9139:                                case BP_VAR_UNSET:
                   9140:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   9141:                                        /* break missing intentionally */
                   9142:                                case BP_VAR_IS:
                   9143:                                        retval = &EG(uninitialized_zval_ptr);
                   9144:                                        break;
                   9145:                                case BP_VAR_RW:
                   9146:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   9147:                                        /* break missing intentionally */
                   9148:                                case BP_VAR_W:
                   9149:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   9150:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   9151:                                        break;
                   9152:                                EMPTY_SWITCH_DEFAULT_CASE()
                   9153:                        }
                   9154:                }
                   9155:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   9156:                        case ZEND_FETCH_GLOBAL:
                   9157:                                if (IS_TMP_VAR != IS_TMP_VAR) {
                   9158:                                        zval_dtor(free_op1.var);
                   9159:                                }
                   9160:                                break;
                   9161:                        case ZEND_FETCH_LOCAL:
                   9162:                                zval_dtor(free_op1.var);
                   9163:                                break;
                   9164:                        case ZEND_FETCH_STATIC:
                   9165:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   9166:                                break;
                   9167:                        case ZEND_FETCH_GLOBAL_LOCK:
                   9168:                                if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
                   9169:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   9170:                                }
                   9171:                                break;
                   9172:                }
                   9173:        }
                   9174: 
                   9175: 
                   9176:        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   9177:                zval_dtor(&tmp_varname);
                   9178:        }
                   9179:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   9180:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   9181:        }
                   9182:        PZVAL_LOCK(*retval);
                   9183:        switch (type) {
                   9184:                case BP_VAR_R:
                   9185:                case BP_VAR_IS:
                   9186:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   9187:                        break;
                   9188:                case BP_VAR_UNSET: {
                   9189:                        zend_free_op free_res;
                   9190: 
                   9191:                        PZVAL_UNLOCK(*retval, &free_res);
                   9192:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   9193:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   9194:                        }
                   9195:                        PZVAL_LOCK(*retval);
                   9196:                        FREE_OP_VAR_PTR(free_res);
                   9197:                }
                   9198:                /* break missing intentionally */
                   9199:                default:
                   9200:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   9201:                        break;
                   9202:        }
                   9203:        CHECK_EXCEPTION();
                   9204:        ZEND_VM_NEXT_OPCODE();
                   9205: }
                   9206: 
                   9207: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9208: {
                   9209:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9210: }
                   9211: 
                   9212: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9213: {
                   9214:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9215: }
                   9216: 
                   9217: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9218: {
                   9219:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9220: }
                   9221: 
                   9222: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9223: {
                   9224:        USE_OPLINE
                   9225: 
                   9226:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9227: }
                   9228: 
                   9229: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9230: {
                   9231:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9232: }
                   9233: 
                   9234: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9235: {
                   9236:        return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9237: }
                   9238: 
                   9239: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9240: {
                   9241:        USE_OPLINE
                   9242:        zend_free_op free_op2;
                   9243:        zval *str = &EX_T(opline->result.var).tmp_var;
                   9244:        zval *var;
                   9245:        zval var_copy;
                   9246:        int use_copy = 0;
                   9247: 
                   9248:        SAVE_OPLINE();
                   9249:        var = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   9250: 
                   9251:        if (IS_TMP_VAR == IS_UNUSED) {
                   9252:                /* Initialize for erealloc in add_string_to_string */
                   9253:                Z_STRVAL_P(str) = NULL;
                   9254:                Z_STRLEN_P(str) = 0;
                   9255:                Z_TYPE_P(str) = IS_STRING;
                   9256: 
                   9257:                INIT_PZVAL(str);
                   9258:        }
                   9259: 
                   9260:        if (Z_TYPE_P(var) != IS_STRING) {
                   9261:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   9262: 
                   9263:                if (use_copy) {
                   9264:                        var = &var_copy;
                   9265:                }
                   9266:        }
                   9267:        add_string_to_string(str, str, var);
                   9268: 
                   9269:        if (use_copy) {
                   9270:                zval_dtor(var);
                   9271:        }
                   9272:        /* original comment, possibly problematic:
                   9273:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   9274:         * (Zeev):  I don't think it's problematic, we only use variables
                   9275:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   9276:         * string offsets or overloaded objects
                   9277:         */
                   9278:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9279: 
                   9280:        CHECK_EXCEPTION();
                   9281:        ZEND_VM_NEXT_OPCODE();
                   9282: }
                   9283: 
                   9284: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9285: {
                   9286:        USE_OPLINE
                   9287:        zval *function_name;
                   9288:        char *function_name_strval;
                   9289:        int function_name_strlen;
                   9290:        zend_free_op free_op1, free_op2;
                   9291: 
                   9292:        SAVE_OPLINE();
                   9293:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   9294: 
                   9295:        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   9296: 
                   9297:        if (IS_VAR != IS_CONST &&
                   9298:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
                   9299:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   9300:        }
                   9301: 
                   9302:        function_name_strval = Z_STRVAL_P(function_name);
                   9303:        function_name_strlen = Z_STRLEN_P(function_name);
                   9304: 
                   9305:        EX(object) = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9306: 
                   9307:        if (EXPECTED(EX(object) != NULL) &&
                   9308:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   9309:                EX(called_scope) = Z_OBJCE_P(EX(object));
                   9310: 
                   9311:                if (IS_VAR != IS_CONST ||
                   9312:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   9313:                    zval *object = EX(object);
                   9314: 
                   9315:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   9316:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   9317:                        }
                   9318: 
                   9319:                        /* First, locate the function. */
                   9320:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   9321:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   9322:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   9323:                        }
                   9324:                        if (IS_VAR == IS_CONST &&
                   9325:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   9326:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   9327:                            EXPECTED(EX(object) == object)) {
                   9328:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   9329:                        }
                   9330:                }
                   9331:        } else {
                   9332:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   9333:        }
                   9334: 
                   9335:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   9336:                EX(object) = NULL;
                   9337:        } else {
                   9338:                if (!PZVAL_IS_REF(EX(object))) {
                   9339:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   9340:                } else {
                   9341:                        zval *this_ptr;
                   9342:                        ALLOC_ZVAL(this_ptr);
                   9343:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   9344:                        zval_copy_ctor(this_ptr);
                   9345:                        EX(object) = this_ptr;
                   9346:                }
                   9347:        }
                   9348: 
                   9349:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9350: 
                   9351:        CHECK_EXCEPTION();
                   9352:        ZEND_VM_NEXT_OPCODE();
                   9353: }
                   9354: 
                   9355: static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9356: {
                   9357:        USE_OPLINE
                   9358:        zend_free_op free_op1, free_op2;
                   9359: 
                   9360:        SAVE_OPLINE();
                   9361:        if (IS_TMP_VAR==IS_VAR) {
                   9362:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
                   9363:        }
                   9364:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   9365:                                 _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   9366:                                 _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
                   9367: 
                   9368:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9369:        CHECK_EXCEPTION();
                   9370:        ZEND_VM_NEXT_OPCODE();
                   9371: }
                   9372: 
                   9373: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9374: {
                   9375:        USE_OPLINE
                   9376:        zend_free_op free_op1;
                   9377:        zval *expr_ptr;
                   9378: 
                   9379:        SAVE_OPLINE();
                   9380:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   9381:                zval **expr_ptr_ptr = NULL;
                   9382: 
                   9383:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   9384:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   9385:                }
                   9386:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
                   9387:                expr_ptr = *expr_ptr_ptr;
                   9388:                Z_ADDREF_P(expr_ptr);
                   9389:        } else {
                   9390:                expr_ptr=_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9391:                if (1) { /* temporary variable */
                   9392:                        zval *new_expr;
                   9393: 
                   9394:                        ALLOC_ZVAL(new_expr);
                   9395:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   9396:                        expr_ptr = new_expr;
                   9397:                } else if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
                   9398:                        zval *new_expr;
                   9399: 
                   9400:                        ALLOC_ZVAL(new_expr);
                   9401:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   9402:                        expr_ptr = new_expr;
                   9403:                        zendi_zval_copy_ctor(*expr_ptr);
                   9404:                } else {
                   9405:                        Z_ADDREF_P(expr_ptr);
                   9406:                }
                   9407:        }
                   9408: 
                   9409:        if (IS_VAR != IS_UNUSED) {
                   9410:                zend_free_op free_op2;
                   9411:                zval *offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   9412:                ulong hval;
                   9413: 
                   9414:                switch (Z_TYPE_P(offset)) {
                   9415:                        case IS_DOUBLE:
                   9416:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   9417:                                goto num_index;
                   9418:                        case IS_LONG:
                   9419:                        case IS_BOOL:
                   9420:                                hval = Z_LVAL_P(offset);
                   9421: num_index:
                   9422:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
                   9423:                                break;
                   9424:                        case IS_STRING:
                   9425:                                if (IS_VAR == IS_CONST) {
                   9426:                                        hval = Z_HASH_P(offset);
                   9427:                                } else {
                   9428:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   9429:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   9430:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   9431:                                        } else {
                   9432:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   9433:                                        }
                   9434:                                }
                   9435:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
                   9436:                                break;
                   9437:                        case IS_NULL:
                   9438:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
                   9439:                                break;
                   9440:                        default:
                   9441:                                zend_error(E_WARNING, "Illegal offset type");
                   9442:                                zval_ptr_dtor(&expr_ptr);
                   9443:                                /* do nothing */
                   9444:                                break;
                   9445:                }
                   9446:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   9447:        } else {
                   9448:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
                   9449:        }
                   9450:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   9451: 
                   9452:        } else {
                   9453: 
                   9454:        }
                   9455:        CHECK_EXCEPTION();
                   9456:        ZEND_VM_NEXT_OPCODE();
                   9457: }
                   9458: 
                   9459: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9460: {
                   9461:        USE_OPLINE
                   9462: 
                   9463:        array_init(&EX_T(opline->result.var).tmp_var);
                   9464:        if (IS_TMP_VAR == IS_UNUSED) {
                   9465:                ZEND_VM_NEXT_OPCODE();
                   9466: #if 0 || IS_TMP_VAR != IS_UNUSED
                   9467:        } else {
                   9468:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9469: #endif
                   9470:        }
                   9471: }
                   9472: 
                   9473: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9474: {
                   9475:        USE_OPLINE
                   9476:        zval tmp, *varname;
                   9477:        HashTable *target_symbol_table;
                   9478:        zend_free_op free_op1;
                   9479: 
                   9480:        SAVE_OPLINE();
                   9481:        if (IS_TMP_VAR == IS_CV &&
                   9482:            IS_VAR == IS_UNUSED &&
                   9483:            (opline->extended_value & ZEND_QUICK_SET)) {
                   9484:                if (EG(active_symbol_table)) {
                   9485:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   9486: 
                   9487:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   9488:                        EX_CV(opline->op1.var) = NULL;
                   9489:                } else if (EX_CV(opline->op1.var)) {
                   9490:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   9491:                        EX_CV(opline->op1.var) = NULL;
                   9492:                }
                   9493:                CHECK_EXCEPTION();
                   9494:                ZEND_VM_NEXT_OPCODE();
                   9495:        }
                   9496: 
                   9497:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9498: 
                   9499:        if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   9500:                ZVAL_COPY_VALUE(&tmp, varname);
                   9501:                zval_copy_ctor(&tmp);
                   9502:                convert_to_string(&tmp);
                   9503:                varname = &tmp;
                   9504:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9505:                Z_ADDREF_P(varname);
                   9506:        }
                   9507: 
                   9508:        if (IS_VAR != IS_UNUSED) {
                   9509:                zend_class_entry *ce;
                   9510: 
                   9511:                if (IS_VAR == IS_CONST) {
                   9512:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   9513:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   9514:                        } else {
                   9515:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    9516:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    9517:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   9518:                                                zval_dtor(&tmp);
                   9519:                                        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9520:                                                zval_ptr_dtor(&varname);
                   9521:                                        }
                   9522:                                        zval_dtor(free_op1.var);
1.1.1.4   misho    9523:                                        HANDLE_EXCEPTION();
                   9524:                                }
                   9525:                                if (UNEXPECTED(ce == NULL)) {
                   9526:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    9527:                                }
                   9528:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   9529:                        }
                   9530:                } else {
                   9531:                        ce = EX_T(opline->op2.var).class_entry;
                   9532:                }
                   9533:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   9534:        } else {
                   9535:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   9536: 
                   9537:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   9538:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   9539:        }
                   9540: 
                   9541:        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   9542:                zval_dtor(&tmp);
                   9543:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9544:                zval_ptr_dtor(&varname);
                   9545:        }
                   9546:        zval_dtor(free_op1.var);
                   9547:        CHECK_EXCEPTION();
                   9548:        ZEND_VM_NEXT_OPCODE();
                   9549: }
                   9550: 
                   9551: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9552: {
                   9553:        USE_OPLINE
                   9554:        zval **value;
                   9555:        zend_bool isset = 1;
                   9556: 
                   9557:        SAVE_OPLINE();
                   9558:        if (IS_TMP_VAR == IS_CV &&
                   9559:            IS_VAR == IS_UNUSED &&
                   9560:            (opline->extended_value & ZEND_QUICK_SET)) {
                   9561:                if (EX_CV(opline->op1.var)) {
                   9562:                        value = EX_CV(opline->op1.var);
                   9563:                } else if (EG(active_symbol_table)) {
                   9564:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   9565: 
                   9566:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   9567:                                isset = 0;
                   9568:                        }
                   9569:                } else {
                   9570:                        isset = 0;
                   9571:                }
                   9572:        } else {
                   9573:                HashTable *target_symbol_table;
                   9574:                zend_free_op free_op1;
                   9575:                zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9576: 
                   9577:                if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   9578:                        ZVAL_COPY_VALUE(&tmp, varname);
                   9579:                        zval_copy_ctor(&tmp);
                   9580:                        convert_to_string(&tmp);
                   9581:                        varname = &tmp;
                   9582:                }
                   9583: 
                   9584:                if (IS_VAR != IS_UNUSED) {
                   9585:                        zend_class_entry *ce;
                   9586: 
                   9587:                        if (IS_VAR == IS_CONST) {
                   9588:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   9589:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   9590:                                } else {
                   9591:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   9592:                                        if (UNEXPECTED(ce == NULL)) {
                   9593:                                                CHECK_EXCEPTION();
                   9594:                                                ZEND_VM_NEXT_OPCODE();
                   9595:                                        }
                   9596:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   9597:                                }
                   9598:                        } else {
                   9599:                                ce = EX_T(opline->op2.var).class_entry;
                   9600:                        }
                   9601:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   9602:                        if (!value) {
                   9603:                                isset = 0;
                   9604:                        }
                   9605:                } else {
                   9606:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   9607:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   9608:                                isset = 0;
                   9609:                        }
                   9610:                }
                   9611: 
                   9612:                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   9613:                        zval_dtor(&tmp);
                   9614:                }
                   9615:                zval_dtor(free_op1.var);
                   9616:        }
                   9617: 
                   9618:        if (opline->extended_value & ZEND_ISSET) {
                   9619:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   9620:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   9621:                } else {
                   9622:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   9623:                }
                   9624:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   9625:                if (!isset || !i_zend_is_true(*value)) {
                   9626:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   9627:                } else {
                   9628:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   9629:                }
                   9630:        }
                   9631: 
                   9632:        CHECK_EXCEPTION();
                   9633:        ZEND_VM_NEXT_OPCODE();
                   9634: }
                   9635: 
                   9636: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
                   9637: {
                   9638:        USE_OPLINE
                   9639:        zend_free_op free_op1;
                   9640:        zval *varname;
                   9641:        zval **retval;
                   9642:        zval tmp_varname;
                   9643:        HashTable *target_symbol_table;
                   9644:        ulong hash_value;
                   9645: 
                   9646:        SAVE_OPLINE();
                   9647:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9648: 
                   9649:        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   9650:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   9651:                zval_copy_ctor(&tmp_varname);
                   9652:                Z_SET_REFCOUNT(tmp_varname, 1);
                   9653:                Z_UNSET_ISREF(tmp_varname);
                   9654:                convert_to_string(&tmp_varname);
                   9655:                varname = &tmp_varname;
                   9656:        }
                   9657: 
                   9658:        if (IS_UNUSED != IS_UNUSED) {
                   9659:                zend_class_entry *ce;
                   9660: 
                   9661:                if (IS_UNUSED == IS_CONST) {
                   9662:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   9663:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   9664:                        } else {
                   9665:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   9666:                                if (UNEXPECTED(ce == NULL)) {
                   9667:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   9668:                                                zval_dtor(&tmp_varname);
                   9669:                                        }
                   9670:                                        zval_dtor(free_op1.var);
                   9671:                                        CHECK_EXCEPTION();
                   9672:                                        ZEND_VM_NEXT_OPCODE();
                   9673:                                }
                   9674:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   9675:                        }
                   9676:                } else {
                   9677:                        ce = EX_T(opline->op2.var).class_entry;
                   9678:                }
                   9679:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   9680:                zval_dtor(free_op1.var);
                   9681:        } else {
                   9682:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   9683: /*
                   9684:                if (!target_symbol_table) {
                   9685:                        CHECK_EXCEPTION();
                   9686:                        ZEND_VM_NEXT_OPCODE();
                   9687:                }
                   9688: */
                   9689:                if (IS_TMP_VAR == IS_CONST) {
                   9690:                        hash_value = Z_HASH_P(varname);
                   9691:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   9692:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   9693:                } else {
                   9694:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   9695:                }
                   9696: 
                   9697:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   9698:                        switch (type) {
                   9699:                                case BP_VAR_R:
                   9700:                                case BP_VAR_UNSET:
                   9701:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   9702:                                        /* break missing intentionally */
                   9703:                                case BP_VAR_IS:
                   9704:                                        retval = &EG(uninitialized_zval_ptr);
                   9705:                                        break;
                   9706:                                case BP_VAR_RW:
                   9707:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   9708:                                        /* break missing intentionally */
                   9709:                                case BP_VAR_W:
                   9710:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   9711:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   9712:                                        break;
                   9713:                                EMPTY_SWITCH_DEFAULT_CASE()
                   9714:                        }
                   9715:                }
                   9716:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   9717:                        case ZEND_FETCH_GLOBAL:
                   9718:                                if (IS_TMP_VAR != IS_TMP_VAR) {
                   9719:                                        zval_dtor(free_op1.var);
                   9720:                                }
                   9721:                                break;
                   9722:                        case ZEND_FETCH_LOCAL:
                   9723:                                zval_dtor(free_op1.var);
                   9724:                                break;
                   9725:                        case ZEND_FETCH_STATIC:
                   9726:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   9727:                                break;
                   9728:                        case ZEND_FETCH_GLOBAL_LOCK:
                   9729:                                if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
                   9730:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   9731:                                }
                   9732:                                break;
                   9733:                }
                   9734:        }
                   9735: 
1.1       misho    9736: 
1.1.1.2   misho    9737:        if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
                   9738:                zval_dtor(&tmp_varname);
1.1       misho    9739:        }
1.1.1.2   misho    9740:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   9741:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
1.1       misho    9742:        }
1.1.1.2   misho    9743:        PZVAL_LOCK(*retval);
                   9744:        switch (type) {
                   9745:                case BP_VAR_R:
                   9746:                case BP_VAR_IS:
                   9747:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   9748:                        break;
                   9749:                case BP_VAR_UNSET: {
                   9750:                        zend_free_op free_res;
                   9751: 
                   9752:                        PZVAL_UNLOCK(*retval, &free_res);
                   9753:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   9754:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   9755:                        }
                   9756:                        PZVAL_LOCK(*retval);
                   9757:                        FREE_OP_VAR_PTR(free_res);
                   9758:                }
                   9759:                /* break missing intentionally */
                   9760:                default:
                   9761:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   9762:                        break;
                   9763:        }
                   9764:        CHECK_EXCEPTION();
1.1       misho    9765:        ZEND_VM_NEXT_OPCODE();
                   9766: }
                   9767: 
1.1.1.2   misho    9768: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9769: {
1.1.1.2   misho    9770:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9771: }
1.1       misho    9772: 
1.1.1.2   misho    9773: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9774: {
                   9775:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9776: }
1.1       misho    9777: 
1.1.1.2   misho    9778: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9779: {
                   9780:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9781: }
1.1       misho    9782: 
1.1.1.2   misho    9783: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9784: {
                   9785:        USE_OPLINE
1.1       misho    9786: 
1.1.1.2   misho    9787:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    9788: }
                   9789: 
1.1.1.2   misho    9790: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9791: {
1.1.1.2   misho    9792:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   9793: }
1.1       misho    9794: 
1.1.1.2   misho    9795: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   9796: {
                   9797:        return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    9798: }
                   9799: 
1.1.1.2   misho    9800: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9801: {
1.1.1.2   misho    9802:        USE_OPLINE
                   9803:        zend_free_op free_op1;
1.1       misho    9804:        zval *expr_ptr;
                   9805: 
1.1.1.2   misho    9806:        SAVE_OPLINE();
                   9807:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   9808:                zval **expr_ptr_ptr = NULL;
1.1       misho    9809: 
1.1.1.2   misho    9810:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   9811:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   9812:                }
                   9813:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    9814:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    9815:                Z_ADDREF_P(expr_ptr);
1.1       misho    9816:        } else {
1.1.1.2   misho    9817:                expr_ptr=_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   9818:                if (1) { /* temporary variable */
                   9819:                        zval *new_expr;
1.1       misho    9820: 
1.1.1.2   misho    9821:                        ALLOC_ZVAL(new_expr);
                   9822:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   9823:                        expr_ptr = new_expr;
                   9824:                } else if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    9825:                        zval *new_expr;
                   9826: 
                   9827:                        ALLOC_ZVAL(new_expr);
                   9828:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   9829:                        expr_ptr = new_expr;
                   9830:                        zendi_zval_copy_ctor(*expr_ptr);
                   9831:                } else {
                   9832:                        Z_ADDREF_P(expr_ptr);
                   9833:                }
                   9834:        }
1.1.1.2   misho    9835: 
                   9836:        if (IS_UNUSED != IS_UNUSED) {
                   9837: 
                   9838:                zval *offset = NULL;
                   9839:                ulong hval;
                   9840: 
1.1       misho    9841:                switch (Z_TYPE_P(offset)) {
                   9842:                        case IS_DOUBLE:
1.1.1.2   misho    9843:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   9844:                                goto num_index;
1.1       misho    9845:                        case IS_LONG:
                   9846:                        case IS_BOOL:
1.1.1.2   misho    9847:                                hval = Z_LVAL_P(offset);
                   9848: num_index:
                   9849:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    9850:                                break;
                   9851:                        case IS_STRING:
1.1.1.2   misho    9852:                                if (IS_UNUSED == IS_CONST) {
                   9853:                                        hval = Z_HASH_P(offset);
                   9854:                                } else {
                   9855:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   9856:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   9857:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   9858:                                        } else {
                   9859:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   9860:                                        }
                   9861:                                }
                   9862:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    9863:                                break;
                   9864:                        case IS_NULL:
1.1.1.2   misho    9865:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    9866:                                break;
                   9867:                        default:
                   9868:                                zend_error(E_WARNING, "Illegal offset type");
                   9869:                                zval_ptr_dtor(&expr_ptr);
                   9870:                                /* do nothing */
                   9871:                                break;
                   9872:                }
1.1.1.2   misho    9873: 
1.1       misho    9874:        } else {
1.1.1.2   misho    9875:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    9876:        }
1.1.1.2   misho    9877:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
1.1       misho    9878: 
                   9879:        } else {
                   9880: 
                   9881:        }
1.1.1.2   misho    9882:        CHECK_EXCEPTION();
1.1       misho    9883:        ZEND_VM_NEXT_OPCODE();
                   9884: }
                   9885: 
1.1.1.2   misho    9886: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9887: {
1.1.1.2   misho    9888:        USE_OPLINE
1.1       misho    9889: 
1.1.1.2   misho    9890:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    9891:        if (IS_TMP_VAR == IS_UNUSED) {
                   9892:                ZEND_VM_NEXT_OPCODE();
                   9893: #if 0 || IS_TMP_VAR != IS_UNUSED
                   9894:        } else {
1.1.1.2   misho    9895:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    9896: #endif
                   9897:        }
                   9898: }
                   9899: 
1.1.1.2   misho    9900: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9901: {
1.1.1.2   misho    9902:        USE_OPLINE
                   9903:        zval tmp, *varname;
                   9904:        HashTable *target_symbol_table;
1.1       misho    9905:        zend_free_op free_op1;
                   9906: 
1.1.1.2   misho    9907:        SAVE_OPLINE();
                   9908:        if (IS_TMP_VAR == IS_CV &&
                   9909:            IS_UNUSED == IS_UNUSED &&
                   9910:            (opline->extended_value & ZEND_QUICK_SET)) {
                   9911:                if (EG(active_symbol_table)) {
                   9912:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
1.1       misho    9913: 
1.1.1.2   misho    9914:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   9915:                        EX_CV(opline->op1.var) = NULL;
                   9916:                } else if (EX_CV(opline->op1.var)) {
                   9917:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   9918:                        EX_CV(opline->op1.var) = NULL;
                   9919:                }
                   9920:                CHECK_EXCEPTION();
                   9921:                ZEND_VM_NEXT_OPCODE();
1.1       misho    9922:        }
                   9923: 
1.1.1.2   misho    9924:        varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    9925: 
1.1.1.2   misho    9926:        if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   9927:                ZVAL_COPY_VALUE(&tmp, varname);
                   9928:                zval_copy_ctor(&tmp);
                   9929:                convert_to_string(&tmp);
                   9930:                varname = &tmp;
                   9931:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9932:                Z_ADDREF_P(varname);
                   9933:        }
1.1       misho    9934: 
1.1.1.2   misho    9935:        if (IS_UNUSED != IS_UNUSED) {
                   9936:                zend_class_entry *ce;
                   9937: 
                   9938:                if (IS_UNUSED == IS_CONST) {
                   9939:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   9940:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   9941:                        } else {
                   9942:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    9943:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    9944:                                        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   9945:                                                zval_dtor(&tmp);
                   9946:                                        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9947:                                                zval_ptr_dtor(&varname);
                   9948:                                        }
                   9949:                                        zval_dtor(free_op1.var);
1.1.1.4   misho    9950:                                        HANDLE_EXCEPTION();
                   9951:                                }
                   9952:                                if (UNEXPECTED(ce == NULL)) {
                   9953:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    9954:                                }
                   9955:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   9956:                        }
1.1       misho    9957:                } else {
1.1.1.2   misho    9958:                        ce = EX_T(opline->op2.var).class_entry;
1.1       misho    9959:                }
1.1.1.2   misho    9960:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
1.1       misho    9961:        } else {
1.1.1.2   misho    9962:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
1.1       misho    9963: 
1.1.1.2   misho    9964:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   9965:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   9966:        }
1.1       misho    9967: 
1.1.1.2   misho    9968:        if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   9969:                zval_dtor(&tmp);
                   9970:        } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
                   9971:                zval_ptr_dtor(&varname);
1.1       misho    9972:        }
1.1.1.2   misho    9973:        zval_dtor(free_op1.var);
                   9974:        CHECK_EXCEPTION();
1.1       misho    9975:        ZEND_VM_NEXT_OPCODE();
                   9976: }
                   9977: 
1.1.1.2   misho    9978: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    9979: {
1.1.1.2   misho    9980:        USE_OPLINE
                   9981:        zval **value;
                   9982:        zend_bool isset = 1;
1.1       misho    9983: 
1.1.1.2   misho    9984:        SAVE_OPLINE();
                   9985:        if (IS_TMP_VAR == IS_CV &&
                   9986:            IS_UNUSED == IS_UNUSED &&
                   9987:            (opline->extended_value & ZEND_QUICK_SET)) {
                   9988:                if (EX_CV(opline->op1.var)) {
                   9989:                        value = EX_CV(opline->op1.var);
                   9990:                } else if (EG(active_symbol_table)) {
                   9991:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   9992: 
                   9993:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   9994:                                isset = 0;
                   9995:                        }
                   9996:                } else {
                   9997:                        isset = 0;
                   9998:                }
1.1       misho    9999:        } else {
1.1.1.2   misho    10000:                HashTable *target_symbol_table;
                   10001:                zend_free_op free_op1;
                   10002:                zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10003: 
                   10004:                if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   10005:                        ZVAL_COPY_VALUE(&tmp, varname);
                   10006:                        zval_copy_ctor(&tmp);
                   10007:                        convert_to_string(&tmp);
                   10008:                        varname = &tmp;
                   10009:                }
                   10010: 
                   10011:                if (IS_UNUSED != IS_UNUSED) {
                   10012:                        zend_class_entry *ce;
                   10013: 
                   10014:                        if (IS_UNUSED == IS_CONST) {
                   10015:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   10016:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   10017:                                } else {
                   10018:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   10019:                                        if (UNEXPECTED(ce == NULL)) {
                   10020:                                                CHECK_EXCEPTION();
                   10021:                                                ZEND_VM_NEXT_OPCODE();
                   10022:                                        }
                   10023:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   10024:                                }
                   10025:                        } else {
                   10026:                                ce = EX_T(opline->op2.var).class_entry;
                   10027:                        }
                   10028:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   10029:                        if (!value) {
                   10030:                                isset = 0;
                   10031:                        }
                   10032:                } else {
                   10033:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   10034:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   10035:                                isset = 0;
                   10036:                        }
                   10037:                }
                   10038: 
                   10039:                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                   10040:                        zval_dtor(&tmp);
                   10041:                }
                   10042:                zval_dtor(free_op1.var);
                   10043:        }
                   10044: 
                   10045:        if (opline->extended_value & ZEND_ISSET) {
                   10046:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   10047:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   10048:                } else {
                   10049:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   10050:                }
                   10051:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   10052:                if (!isset || !i_zend_is_true(*value)) {
                   10053:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   10054:                } else {
                   10055:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   10056:                }
1.1       misho    10057:        }
1.1.1.2   misho    10058: 
                   10059:        CHECK_EXCEPTION();
                   10060:        ZEND_VM_NEXT_OPCODE();
1.1       misho    10061: }
                   10062: 
                   10063: static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10064: {
1.1.1.2   misho    10065:        USE_OPLINE
1.1       misho    10066:        zend_free_op free_op1;
                   10067: 
1.1.1.2   misho    10068:        SAVE_OPLINE();
                   10069:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   10070:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10071:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10072:        zval_dtor(free_op1.var);
                   10073: 
1.1.1.2   misho    10074:        CHECK_EXCEPTION();
1.1       misho    10075:        ZEND_VM_NEXT_OPCODE();
                   10076: }
                   10077: 
                   10078: static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10079: {
1.1.1.2   misho    10080:        USE_OPLINE
1.1       misho    10081:        zend_free_op free_op1;
                   10082: 
1.1.1.2   misho    10083:        SAVE_OPLINE();
                   10084:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   10085:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10086:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10087:        zval_dtor(free_op1.var);
                   10088: 
1.1.1.2   misho    10089:        CHECK_EXCEPTION();
1.1       misho    10090:        ZEND_VM_NEXT_OPCODE();
                   10091: }
                   10092: 
                   10093: static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10094: {
1.1.1.2   misho    10095:        USE_OPLINE
1.1       misho    10096:        zend_free_op free_op1;
                   10097: 
1.1.1.2   misho    10098:        SAVE_OPLINE();
                   10099:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   10100:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10101:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10102:        zval_dtor(free_op1.var);
                   10103: 
1.1.1.2   misho    10104:        CHECK_EXCEPTION();
1.1       misho    10105:        ZEND_VM_NEXT_OPCODE();
                   10106: }
                   10107: 
                   10108: static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10109: {
1.1.1.2   misho    10110:        USE_OPLINE
1.1       misho    10111:        zend_free_op free_op1;
                   10112: 
1.1.1.2   misho    10113:        SAVE_OPLINE();
                   10114:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   10115:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10116:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10117:        zval_dtor(free_op1.var);
                   10118: 
1.1.1.2   misho    10119:        CHECK_EXCEPTION();
1.1       misho    10120:        ZEND_VM_NEXT_OPCODE();
                   10121: }
                   10122: 
                   10123: static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10124: {
1.1.1.2   misho    10125:        USE_OPLINE
1.1       misho    10126:        zend_free_op free_op1;
                   10127: 
1.1.1.2   misho    10128:        SAVE_OPLINE();
                   10129:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   10130:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10131:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10132:        zval_dtor(free_op1.var);
                   10133: 
1.1.1.2   misho    10134:        CHECK_EXCEPTION();
1.1       misho    10135:        ZEND_VM_NEXT_OPCODE();
                   10136: }
                   10137: 
                   10138: static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10139: {
1.1.1.2   misho    10140:        USE_OPLINE
1.1       misho    10141:        zend_free_op free_op1;
                   10142: 
1.1.1.2   misho    10143:        SAVE_OPLINE();
                   10144:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   10145:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10146:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10147:        zval_dtor(free_op1.var);
                   10148: 
1.1.1.2   misho    10149:        CHECK_EXCEPTION();
1.1       misho    10150:        ZEND_VM_NEXT_OPCODE();
                   10151: }
                   10152: 
                   10153: static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10154: {
1.1.1.2   misho    10155:        USE_OPLINE
1.1       misho    10156:        zend_free_op free_op1;
                   10157: 
1.1.1.2   misho    10158:        SAVE_OPLINE();
                   10159:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   10160:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10161:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10162:        zval_dtor(free_op1.var);
                   10163: 
1.1.1.2   misho    10164:        CHECK_EXCEPTION();
1.1       misho    10165:        ZEND_VM_NEXT_OPCODE();
                   10166: }
                   10167: 
                   10168: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10169: {
1.1.1.2   misho    10170:        USE_OPLINE
1.1       misho    10171:        zend_free_op free_op1;
                   10172: 
1.1.1.2   misho    10173:        SAVE_OPLINE();
                   10174:        concat_function(&EX_T(opline->result.var).tmp_var,
                   10175:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10176:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10177:        zval_dtor(free_op1.var);
                   10178: 
1.1.1.2   misho    10179:        CHECK_EXCEPTION();
1.1       misho    10180:        ZEND_VM_NEXT_OPCODE();
                   10181: }
                   10182: 
                   10183: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10184: {
1.1.1.2   misho    10185:        USE_OPLINE
1.1       misho    10186:        zend_free_op free_op1;
                   10187: 
1.1.1.2   misho    10188:        SAVE_OPLINE();
                   10189:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   10190:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10191:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10192:        zval_dtor(free_op1.var);
                   10193: 
1.1.1.2   misho    10194:        CHECK_EXCEPTION();
1.1       misho    10195:        ZEND_VM_NEXT_OPCODE();
                   10196: }
                   10197: 
                   10198: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10199: {
1.1.1.2   misho    10200:        USE_OPLINE
1.1       misho    10201:        zend_free_op free_op1;
1.1.1.2   misho    10202:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    10203: 
1.1.1.2   misho    10204:        SAVE_OPLINE();
1.1       misho    10205:        is_identical_function(result,
1.1.1.2   misho    10206:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10207:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10208:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   10209:        zval_dtor(free_op1.var);
                   10210: 
1.1.1.2   misho    10211:        CHECK_EXCEPTION();
1.1       misho    10212:        ZEND_VM_NEXT_OPCODE();
                   10213: }
                   10214: 
                   10215: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10216: {
1.1.1.2   misho    10217:        USE_OPLINE
1.1       misho    10218:        zend_free_op free_op1;
1.1.1.2   misho    10219:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    10220: 
1.1.1.2   misho    10221:        SAVE_OPLINE();
                   10222:        ZVAL_BOOL(result, fast_equal_function(result,
                   10223:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10224:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    10225:        zval_dtor(free_op1.var);
                   10226: 
1.1.1.2   misho    10227:        CHECK_EXCEPTION();
1.1       misho    10228:        ZEND_VM_NEXT_OPCODE();
                   10229: }
                   10230: 
                   10231: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10232: {
1.1.1.2   misho    10233:        USE_OPLINE
1.1       misho    10234:        zend_free_op free_op1;
1.1.1.2   misho    10235:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    10236: 
1.1.1.2   misho    10237:        SAVE_OPLINE();
                   10238:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   10239:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10240:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    10241:        zval_dtor(free_op1.var);
                   10242: 
1.1.1.2   misho    10243:        CHECK_EXCEPTION();
1.1       misho    10244:        ZEND_VM_NEXT_OPCODE();
                   10245: }
                   10246: 
                   10247: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10248: {
1.1.1.2   misho    10249:        USE_OPLINE
1.1       misho    10250:        zend_free_op free_op1;
1.1.1.2   misho    10251:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    10252: 
1.1.1.2   misho    10253:        SAVE_OPLINE();
                   10254:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   10255:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10256:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    10257:        zval_dtor(free_op1.var);
                   10258: 
1.1.1.2   misho    10259:        CHECK_EXCEPTION();
1.1       misho    10260:        ZEND_VM_NEXT_OPCODE();
                   10261: }
                   10262: 
                   10263: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10264: {
1.1.1.2   misho    10265:        USE_OPLINE
1.1       misho    10266:        zend_free_op free_op1;
1.1.1.2   misho    10267:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    10268: 
1.1.1.2   misho    10269:        SAVE_OPLINE();
                   10270:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   10271:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10272:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    10273:        zval_dtor(free_op1.var);
                   10274: 
1.1.1.2   misho    10275:        CHECK_EXCEPTION();
1.1       misho    10276:        ZEND_VM_NEXT_OPCODE();
                   10277: }
                   10278: 
                   10279: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10280: {
1.1.1.2   misho    10281:        USE_OPLINE
1.1       misho    10282:        zend_free_op free_op1;
                   10283: 
1.1.1.2   misho    10284:        SAVE_OPLINE();
                   10285:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   10286:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10287:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10288:        zval_dtor(free_op1.var);
                   10289: 
1.1.1.2   misho    10290:        CHECK_EXCEPTION();
1.1       misho    10291:        ZEND_VM_NEXT_OPCODE();
                   10292: }
                   10293: 
                   10294: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10295: {
1.1.1.2   misho    10296:        USE_OPLINE
1.1       misho    10297:        zend_free_op free_op1;
                   10298: 
1.1.1.2   misho    10299:        SAVE_OPLINE();
                   10300:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   10301:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10302:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10303:        zval_dtor(free_op1.var);
                   10304: 
1.1.1.2   misho    10305:        CHECK_EXCEPTION();
1.1       misho    10306:        ZEND_VM_NEXT_OPCODE();
                   10307: }
                   10308: 
                   10309: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10310: {
1.1.1.2   misho    10311:        USE_OPLINE
1.1       misho    10312:        zend_free_op free_op1;
                   10313: 
1.1.1.2   misho    10314:        SAVE_OPLINE();
                   10315:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   10316:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10317:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10318:        zval_dtor(free_op1.var);
                   10319: 
1.1.1.2   misho    10320:        CHECK_EXCEPTION();
1.1       misho    10321:        ZEND_VM_NEXT_OPCODE();
                   10322: }
                   10323: 
                   10324: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10325: {
1.1.1.2   misho    10326:        USE_OPLINE
1.1       misho    10327:        zend_free_op free_op1;
                   10328: 
1.1.1.2   misho    10329:        SAVE_OPLINE();
                   10330:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   10331:                _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10332:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    10333:        zval_dtor(free_op1.var);
                   10334: 
1.1.1.2   misho    10335:        CHECK_EXCEPTION();
1.1       misho    10336:        ZEND_VM_NEXT_OPCODE();
                   10337: }
                   10338: 
                   10339: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10340: {
1.1.1.2   misho    10341:        USE_OPLINE
1.1       misho    10342: 
1.1.1.2   misho    10343:        zval *str = &EX_T(opline->result.var).tmp_var;
                   10344:        zval *var;
1.1       misho    10345:        zval var_copy;
                   10346:        int use_copy = 0;
                   10347: 
1.1.1.2   misho    10348:        SAVE_OPLINE();
                   10349:        var = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   10350: 
1.1       misho    10351:        if (IS_TMP_VAR == IS_UNUSED) {
                   10352:                /* Initialize for erealloc in add_string_to_string */
                   10353:                Z_STRVAL_P(str) = NULL;
                   10354:                Z_STRLEN_P(str) = 0;
                   10355:                Z_TYPE_P(str) = IS_STRING;
                   10356: 
                   10357:                INIT_PZVAL(str);
                   10358:        }
                   10359: 
                   10360:        if (Z_TYPE_P(var) != IS_STRING) {
                   10361:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   10362: 
                   10363:                if (use_copy) {
                   10364:                        var = &var_copy;
                   10365:                }
                   10366:        }
                   10367:        add_string_to_string(str, str, var);
                   10368: 
                   10369:        if (use_copy) {
                   10370:                zval_dtor(var);
                   10371:        }
                   10372:        /* original comment, possibly problematic:
                   10373:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   10374:         * (Zeev):  I don't think it's problematic, we only use variables
                   10375:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   10376:         * string offsets or overloaded objects
                   10377:         */
                   10378: 
1.1.1.2   misho    10379:        CHECK_EXCEPTION();
1.1       misho    10380:        ZEND_VM_NEXT_OPCODE();
                   10381: }
                   10382: 
                   10383: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10384: {
1.1.1.2   misho    10385:        USE_OPLINE
1.1       misho    10386:        zval *function_name;
                   10387:        char *function_name_strval;
                   10388:        int function_name_strlen;
                   10389:        zend_free_op free_op1;
                   10390: 
1.1.1.2   misho    10391:        SAVE_OPLINE();
1.1       misho    10392:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   10393: 
1.1.1.2   misho    10394:        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    10395: 
1.1.1.2   misho    10396:        if (IS_CV != IS_CONST &&
                   10397:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    10398:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   10399:        }
                   10400: 
                   10401:        function_name_strval = Z_STRVAL_P(function_name);
                   10402:        function_name_strlen = Z_STRLEN_P(function_name);
                   10403: 
1.1.1.2   misho    10404:        EX(object) = _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    10405: 
1.1.1.2   misho    10406:        if (EXPECTED(EX(object) != NULL) &&
                   10407:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   10408:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    10409: 
1.1.1.2   misho    10410:                if (IS_CV != IS_CONST ||
                   10411:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   10412:                    zval *object = EX(object);
                   10413: 
                   10414:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   10415:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   10416:                        }
                   10417: 
                   10418:                        /* First, locate the function. */
                   10419:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   10420:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   10421:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   10422:                        }
                   10423:                        if (IS_CV == IS_CONST &&
                   10424:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   10425:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   10426:                            EXPECTED(EX(object) == object)) {
                   10427:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   10428:                        }
1.1       misho    10429:                }
                   10430:        } else {
                   10431:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   10432:        }
                   10433: 
                   10434:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   10435:                EX(object) = NULL;
                   10436:        } else {
                   10437:                if (!PZVAL_IS_REF(EX(object))) {
                   10438:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   10439:                } else {
                   10440:                        zval *this_ptr;
                   10441:                        ALLOC_ZVAL(this_ptr);
                   10442:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   10443:                        zval_copy_ctor(this_ptr);
                   10444:                        EX(object) = this_ptr;
                   10445:                }
                   10446:        }
                   10447: 
                   10448: 
1.1.1.2   misho    10449:        CHECK_EXCEPTION();
1.1       misho    10450:        ZEND_VM_NEXT_OPCODE();
                   10451: }
                   10452: 
                   10453: static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10454: {
1.1.1.2   misho    10455:        USE_OPLINE
1.1       misho    10456:        zend_free_op free_op1;
                   10457: 
1.1.1.2   misho    10458:        SAVE_OPLINE();
1.1       misho    10459:        if (IS_TMP_VAR==IS_VAR) {
1.1.1.2   misho    10460:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    10461:        }
1.1.1.2   misho    10462:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   10463:                                 _get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   10464:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   10465: 
                   10466:        CHECK_EXCEPTION();
1.1       misho    10467:        ZEND_VM_NEXT_OPCODE();
                   10468: }
                   10469: 
                   10470: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10471: {
1.1.1.2   misho    10472:        USE_OPLINE
1.1       misho    10473:        zend_free_op free_op1;
                   10474:        zval *expr_ptr;
                   10475: 
1.1.1.2   misho    10476:        SAVE_OPLINE();
                   10477:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
                   10478:                zval **expr_ptr_ptr = NULL;
1.1       misho    10479: 
1.1.1.2   misho    10480:                if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   10481:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   10482:                }
                   10483:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    10484:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    10485:                Z_ADDREF_P(expr_ptr);
1.1       misho    10486:        } else {
1.1.1.2   misho    10487:                expr_ptr=_get_zval_ptr_tmp(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10488:                if (1) { /* temporary variable */
                   10489:                        zval *new_expr;
1.1       misho    10490: 
1.1.1.2   misho    10491:                        ALLOC_ZVAL(new_expr);
                   10492:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   10493:                        expr_ptr = new_expr;
                   10494:                } else if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    10495:                        zval *new_expr;
                   10496: 
                   10497:                        ALLOC_ZVAL(new_expr);
                   10498:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   10499:                        expr_ptr = new_expr;
                   10500:                        zendi_zval_copy_ctor(*expr_ptr);
                   10501:                } else {
                   10502:                        Z_ADDREF_P(expr_ptr);
                   10503:                }
                   10504:        }
1.1.1.2   misho    10505: 
                   10506:        if (IS_CV != IS_UNUSED) {
                   10507: 
                   10508:                zval *offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   10509:                ulong hval;
                   10510: 
1.1       misho    10511:                switch (Z_TYPE_P(offset)) {
                   10512:                        case IS_DOUBLE:
1.1.1.2   misho    10513:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   10514:                                goto num_index;
1.1       misho    10515:                        case IS_LONG:
                   10516:                        case IS_BOOL:
1.1.1.2   misho    10517:                                hval = Z_LVAL_P(offset);
                   10518: num_index:
                   10519:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    10520:                                break;
                   10521:                        case IS_STRING:
1.1.1.2   misho    10522:                                if (IS_CV == IS_CONST) {
                   10523:                                        hval = Z_HASH_P(offset);
                   10524:                                } else {
                   10525:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   10526:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   10527:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   10528:                                        } else {
                   10529:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   10530:                                        }
                   10531:                                }
                   10532:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    10533:                                break;
                   10534:                        case IS_NULL:
1.1.1.2   misho    10535:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    10536:                                break;
                   10537:                        default:
                   10538:                                zend_error(E_WARNING, "Illegal offset type");
                   10539:                                zval_ptr_dtor(&expr_ptr);
                   10540:                                /* do nothing */
                   10541:                                break;
                   10542:                }
                   10543: 
                   10544:        } else {
1.1.1.2   misho    10545:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    10546:        }
1.1.1.2   misho    10547:        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
1.1       misho    10548: 
                   10549:        } else {
                   10550: 
                   10551:        }
1.1.1.2   misho    10552:        CHECK_EXCEPTION();
1.1       misho    10553:        ZEND_VM_NEXT_OPCODE();
                   10554: }
                   10555: 
                   10556: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10557: {
1.1.1.2   misho    10558:        USE_OPLINE
1.1       misho    10559: 
1.1.1.2   misho    10560:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    10561:        if (IS_TMP_VAR == IS_UNUSED) {
                   10562:                ZEND_VM_NEXT_OPCODE();
                   10563: #if 0 || IS_TMP_VAR != IS_UNUSED
                   10564:        } else {
                   10565:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   10566: #endif
                   10567:        }
                   10568: }
                   10569: 
                   10570: static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10571: {
1.1.1.2   misho    10572:        USE_OPLINE
1.1       misho    10573:        zend_free_op free_op1;
                   10574: 
1.1.1.2   misho    10575:        SAVE_OPLINE();
                   10576:        bitwise_not_function(&EX_T(opline->result.var).tmp_var,
                   10577:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC) TSRMLS_CC);
1.1       misho    10578:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10579:        CHECK_EXCEPTION();
1.1       misho    10580:        ZEND_VM_NEXT_OPCODE();
                   10581: }
                   10582: 
                   10583: static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10584: {
1.1.1.2   misho    10585:        USE_OPLINE
1.1       misho    10586:        zend_free_op free_op1;
                   10587: 
1.1.1.2   misho    10588:        SAVE_OPLINE();
                   10589:        boolean_not_function(&EX_T(opline->result.var).tmp_var,
                   10590:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC) TSRMLS_CC);
1.1       misho    10591:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10592:        CHECK_EXCEPTION();
1.1       misho    10593:        ZEND_VM_NEXT_OPCODE();
                   10594: }
                   10595: 
                   10596: static int ZEND_FASTCALL  ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10597: {
1.1.1.2   misho    10598:        USE_OPLINE
1.1       misho    10599:        zend_free_op free_op1;
1.1.1.2   misho    10600:        zval **var_ptr;
                   10601: 
                   10602:        SAVE_OPLINE();
                   10603:        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    10604: 
1.1.1.2   misho    10605:        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    10606:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   10607:        }
1.1.1.2   misho    10608:        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   10609:                if (RETURN_VALUE_USED(opline)) {
                   10610:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   10611:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    10612:                }
                   10613:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10614:                CHECK_EXCEPTION();
1.1       misho    10615:                ZEND_VM_NEXT_OPCODE();
                   10616:        }
                   10617: 
                   10618:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   10619: 
1.1.1.2   misho    10620:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   10621:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    10622:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   10623:                /* proxy object */
                   10624:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   10625:                Z_ADDREF_P(val);
1.1.1.2   misho    10626:                fast_increment_function(val);
1.1       misho    10627:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   10628:                zval_ptr_dtor(&val);
                   10629:        } else {
1.1.1.2   misho    10630:                fast_increment_function(*var_ptr);
1.1       misho    10631:        }
                   10632: 
1.1.1.2   misho    10633:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    10634:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    10635:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    10636:        }
                   10637: 
                   10638:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10639:        CHECK_EXCEPTION();
1.1       misho    10640:        ZEND_VM_NEXT_OPCODE();
                   10641: }
                   10642: 
                   10643: static int ZEND_FASTCALL  ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10644: {
1.1.1.2   misho    10645:        USE_OPLINE
1.1       misho    10646:        zend_free_op free_op1;
1.1.1.2   misho    10647:        zval **var_ptr;
1.1       misho    10648: 
1.1.1.2   misho    10649:        SAVE_OPLINE();
                   10650:        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10651: 
                   10652:        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    10653:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   10654:        }
1.1.1.2   misho    10655:        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   10656:                if (RETURN_VALUE_USED(opline)) {
                   10657:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   10658:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    10659:                }
                   10660:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10661:                CHECK_EXCEPTION();
1.1       misho    10662:                ZEND_VM_NEXT_OPCODE();
                   10663:        }
                   10664: 
                   10665:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   10666: 
1.1.1.2   misho    10667:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   10668:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    10669:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   10670:                /* proxy object */
                   10671:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   10672:                Z_ADDREF_P(val);
1.1.1.2   misho    10673:                fast_decrement_function(val);
1.1       misho    10674:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   10675:                zval_ptr_dtor(&val);
                   10676:        } else {
1.1.1.2   misho    10677:                fast_decrement_function(*var_ptr);
1.1       misho    10678:        }
                   10679: 
1.1.1.2   misho    10680:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    10681:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    10682:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    10683:        }
                   10684: 
                   10685:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10686:        CHECK_EXCEPTION();
1.1       misho    10687:        ZEND_VM_NEXT_OPCODE();
                   10688: }
                   10689: 
                   10690: static int ZEND_FASTCALL  ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10691: {
1.1.1.2   misho    10692:        USE_OPLINE
1.1       misho    10693:        zend_free_op free_op1;
1.1.1.2   misho    10694:        zval **var_ptr, *retval;
1.1       misho    10695: 
1.1.1.2   misho    10696:        SAVE_OPLINE();
                   10697:        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10698: 
                   10699:        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    10700:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   10701:        }
1.1.1.2   misho    10702:        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   10703:                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
1.1       misho    10704:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10705:                CHECK_EXCEPTION();
1.1       misho    10706:                ZEND_VM_NEXT_OPCODE();
                   10707:        }
                   10708: 
1.1.1.2   misho    10709:        retval = &EX_T(opline->result.var).tmp_var;
                   10710:        ZVAL_COPY_VALUE(retval, *var_ptr);
                   10711:        zendi_zval_copy_ctor(*retval);
1.1       misho    10712: 
                   10713:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   10714: 
1.1.1.2   misho    10715:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   10716:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    10717:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   10718:                /* proxy object */
                   10719:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   10720:                Z_ADDREF_P(val);
1.1.1.2   misho    10721:                fast_increment_function(val);
1.1       misho    10722:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   10723:                zval_ptr_dtor(&val);
                   10724:        } else {
1.1.1.2   misho    10725:                fast_increment_function(*var_ptr);
1.1       misho    10726:        }
                   10727: 
                   10728:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10729:        CHECK_EXCEPTION();
1.1       misho    10730:        ZEND_VM_NEXT_OPCODE();
                   10731: }
                   10732: 
                   10733: static int ZEND_FASTCALL  ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10734: {
1.1.1.2   misho    10735:        USE_OPLINE
1.1       misho    10736:        zend_free_op free_op1;
1.1.1.2   misho    10737:        zval **var_ptr, *retval;
1.1       misho    10738: 
1.1.1.2   misho    10739:        SAVE_OPLINE();
                   10740:        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10741: 
                   10742:        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    10743:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   10744:        }
1.1.1.2   misho    10745:        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   10746:                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
1.1       misho    10747:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10748:                CHECK_EXCEPTION();
1.1       misho    10749:                ZEND_VM_NEXT_OPCODE();
                   10750:        }
                   10751: 
1.1.1.2   misho    10752:        retval = &EX_T(opline->result.var).tmp_var;
                   10753:        ZVAL_COPY_VALUE(retval, *var_ptr);
                   10754:        zendi_zval_copy_ctor(*retval);
1.1       misho    10755: 
                   10756:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   10757: 
1.1.1.2   misho    10758:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   10759:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    10760:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   10761:                /* proxy object */
                   10762:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   10763:                Z_ADDREF_P(val);
1.1.1.2   misho    10764:                fast_decrement_function(val);
1.1       misho    10765:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   10766:                zval_ptr_dtor(&val);
                   10767:        } else {
1.1.1.2   misho    10768:                fast_decrement_function(*var_ptr);
1.1       misho    10769:        }
                   10770: 
                   10771:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10772:        CHECK_EXCEPTION();
1.1       misho    10773:        ZEND_VM_NEXT_OPCODE();
                   10774: }
                   10775: 
                   10776: static int ZEND_FASTCALL  ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10777: {
1.1.1.2   misho    10778:        USE_OPLINE
1.1       misho    10779:        zend_free_op free_op1;
1.1.1.2   misho    10780:        zval *z;
                   10781: 
                   10782:        SAVE_OPLINE();
                   10783:        z = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    10784: 
1.1.1.3   misho    10785:        if (IS_VAR == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
                   10786:                INIT_PZVAL(z);
1.1       misho    10787:        }
1.1.1.3   misho    10788:        zend_print_variable(z);
1.1       misho    10789: 
                   10790:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    10791:        CHECK_EXCEPTION();
1.1       misho    10792:        ZEND_VM_NEXT_OPCODE();
                   10793: }
                   10794: 
                   10795: static int ZEND_FASTCALL  ZEND_PRINT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10796: {
1.1.1.2   misho    10797:        USE_OPLINE
1.1       misho    10798: 
1.1.1.2   misho    10799:        ZVAL_LONG(&EX_T(opline->result.var).tmp_var, 1);
1.1       misho    10800:        return ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   10801: }
                   10802: 
                   10803: static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10804: {
1.1.1.2   misho    10805:        USE_OPLINE
1.1       misho    10806:        zend_free_op free_op1;
1.1.1.2   misho    10807:        zval *val;
1.1       misho    10808:        int ret;
                   10809: 
1.1.1.2   misho    10810:        SAVE_OPLINE();
                   10811:        val = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10812: 
                   10813:        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    10814:                ret = Z_LVAL_P(val);
                   10815:        } else {
                   10816:                ret = i_zend_is_true(val);
                   10817:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10818:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    10819:                        HANDLE_EXCEPTION();
1.1       misho    10820:                }
                   10821:        }
                   10822:        if (!ret) {
                   10823: #if DEBUG_ZEND>=2
1.1.1.2   misho    10824:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    10825: #endif
1.1.1.2   misho    10826:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    10827:                ZEND_VM_CONTINUE();
                   10828:        }
                   10829: 
                   10830:        ZEND_VM_NEXT_OPCODE();
                   10831: }
                   10832: 
                   10833: static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10834: {
1.1.1.2   misho    10835:        USE_OPLINE
1.1       misho    10836:        zend_free_op free_op1;
1.1.1.2   misho    10837:        zval *val;
1.1       misho    10838:        int ret;
                   10839: 
1.1.1.2   misho    10840:        SAVE_OPLINE();
                   10841:        val = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10842: 
                   10843:        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    10844:                ret = Z_LVAL_P(val);
                   10845:        } else {
                   10846:                ret = i_zend_is_true(val);
                   10847:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10848:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    10849:                        HANDLE_EXCEPTION();
1.1       misho    10850:                }
                   10851:        }
                   10852:        if (ret) {
                   10853: #if DEBUG_ZEND>=2
1.1.1.2   misho    10854:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    10855: #endif
1.1.1.2   misho    10856:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    10857:                ZEND_VM_CONTINUE();
                   10858:        }
                   10859: 
                   10860:        ZEND_VM_NEXT_OPCODE();
                   10861: }
                   10862: 
                   10863: static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10864: {
1.1.1.2   misho    10865:        USE_OPLINE
1.1       misho    10866:        zend_free_op free_op1;
1.1.1.2   misho    10867:        zval *val;
1.1       misho    10868:        int retval;
                   10869: 
1.1.1.2   misho    10870:        SAVE_OPLINE();
                   10871:        val = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10872: 
                   10873:        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    10874:                retval = Z_LVAL_P(val);
                   10875:        } else {
                   10876:                retval = i_zend_is_true(val);
                   10877:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10878:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    10879:                        HANDLE_EXCEPTION();
1.1       misho    10880:                }
                   10881:        }
                   10882:        if (EXPECTED(retval != 0)) {
                   10883: #if DEBUG_ZEND>=2
                   10884:                printf("Conditional jmp on true to %d\n", opline->extended_value);
                   10885: #endif
                   10886:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   10887:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   10888:        } else {
                   10889: #if DEBUG_ZEND>=2
1.1.1.2   misho    10890:                printf("Conditional jmp on false to %d\n", opline->op2.opline_num);
1.1       misho    10891: #endif
1.1.1.2   misho    10892:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
1.1       misho    10893:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   10894:        }
                   10895: }
                   10896: 
                   10897: static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10898: {
1.1.1.2   misho    10899:        USE_OPLINE
1.1       misho    10900:        zend_free_op free_op1;
1.1.1.2   misho    10901:        zval *val;
1.1       misho    10902:        int retval;
                   10903: 
1.1.1.2   misho    10904:        SAVE_OPLINE();
                   10905:        val = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10906: 
                   10907:        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    10908:                retval = Z_LVAL_P(val);
                   10909:        } else {
                   10910:                retval = i_zend_is_true(val);
                   10911:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10912:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    10913:                        HANDLE_EXCEPTION();
1.1       misho    10914:                }
                   10915:        }
1.1.1.2   misho    10916:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   10917:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    10918:        if (!retval) {
                   10919: #if DEBUG_ZEND>=2
1.1.1.2   misho    10920:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    10921: #endif
1.1.1.2   misho    10922:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    10923:                ZEND_VM_CONTINUE();
                   10924:        }
                   10925:        ZEND_VM_NEXT_OPCODE();
                   10926: }
                   10927: 
                   10928: static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10929: {
1.1.1.2   misho    10930:        USE_OPLINE
1.1       misho    10931:        zend_free_op free_op1;
1.1.1.2   misho    10932:        zval *val;
1.1       misho    10933:        int retval;
                   10934: 
1.1.1.2   misho    10935:        SAVE_OPLINE();
                   10936:        val = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10937: 
                   10938:        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    10939:                retval = Z_LVAL_P(val);
                   10940:        } else {
                   10941:                retval = i_zend_is_true(val);
                   10942:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10943:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    10944:                        HANDLE_EXCEPTION();
1.1       misho    10945:                }
                   10946:        }
1.1.1.2   misho    10947:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   10948:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    10949:        if (retval) {
                   10950: #if DEBUG_ZEND>=2
1.1.1.2   misho    10951:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    10952: #endif
1.1.1.2   misho    10953:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    10954:                ZEND_VM_CONTINUE();
                   10955:        }
                   10956:        ZEND_VM_NEXT_OPCODE();
                   10957: }
                   10958: 
1.1.1.2   misho    10959: static int ZEND_FASTCALL  ZEND_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10960: {
                   10961:        USE_OPLINE
                   10962: 
                   10963:        SAVE_OPLINE();
                   10964:        if (IS_VAR == IS_TMP_VAR) {
                   10965:                zendi_zval_dtor(EX_T(opline->op1.var).tmp_var);
                   10966:        } else {
                   10967:                zval_ptr_dtor(&EX_T(opline->op1.var).var.ptr);
                   10968:        }
                   10969:        CHECK_EXCEPTION();
                   10970:        ZEND_VM_NEXT_OPCODE();
                   10971: }
                   10972: 
1.1       misho    10973: static int ZEND_FASTCALL  ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   10974: {
1.1.1.2   misho    10975:        USE_OPLINE
                   10976:        zval *retval_ptr;
                   10977:        zend_free_op free_op1;
                   10978: 
                   10979:        SAVE_OPLINE();
                   10980:        retval_ptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   10981: 
                   10982:        if (!EG(return_value_ptr_ptr)) {
                   10983:                if (IS_VAR == IS_TMP_VAR) {
                   10984:                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   10985:                }
                   10986:        } else if (!0) { /* Not a temp var */
                   10987:                if (IS_VAR == IS_CONST ||
                   10988:                    (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) {
                   10989:                        zval *ret;
                   10990: 
                   10991:                        ALLOC_ZVAL(ret);
                   10992:                        INIT_PZVAL_COPY(ret, retval_ptr);
                   10993:                        zval_copy_ctor(ret);
                   10994:                        *EG(return_value_ptr_ptr) = ret;
                   10995:                } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
                   10996:                           retval_ptr == &EG(uninitialized_zval)) {
                   10997:                        zval *ret;
                   10998: 
                   10999:                        ALLOC_INIT_ZVAL(ret);
                   11000:                        *EG(return_value_ptr_ptr) = ret;
                   11001:                } else {
                   11002:                        *EG(return_value_ptr_ptr) = retval_ptr;
                   11003:                        Z_ADDREF_P(retval_ptr);
                   11004:                }
                   11005:        } else {
                   11006:                zval *ret;
                   11007: 
                   11008:                ALLOC_ZVAL(ret);
                   11009:                INIT_PZVAL_COPY(ret, retval_ptr);
                   11010:                *EG(return_value_ptr_ptr) = ret;
                   11011:        }
                   11012:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11013:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11014: }
                   11015: 
                   11016: static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11017: {
                   11018:        USE_OPLINE
1.1       misho    11019:        zval *retval_ptr;
                   11020:        zval **retval_ptr_ptr;
                   11021:        zend_free_op free_op1;
                   11022: 
1.1.1.2   misho    11023:        SAVE_OPLINE();
1.1       misho    11024: 
1.1.1.2   misho    11025:        do {
1.1       misho    11026:                if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
                   11027:                        /* Not supposed to happen, but we'll allow it */
                   11028:                        zend_error(E_NOTICE, "Only variable references should be returned by reference");
1.1.1.2   misho    11029: 
                   11030:                        retval_ptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11031:                        if (!EG(return_value_ptr_ptr)) {
                   11032:                                if (IS_VAR == IS_TMP_VAR) {
                   11033:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11034:                                }
                   11035:                        } else if (!0) { /* Not a temp var */
                   11036:                                zval *ret;
                   11037: 
                   11038:                                ALLOC_ZVAL(ret);
                   11039:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   11040:                                zval_copy_ctor(ret);
                   11041:                                *EG(return_value_ptr_ptr) = ret;
                   11042:                        } else {
                   11043:                                zval *ret;
                   11044: 
                   11045:                                ALLOC_ZVAL(ret);
                   11046:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   11047:                                *EG(return_value_ptr_ptr) = ret;
                   11048:                        }
                   11049:                        break;
1.1       misho    11050:                }
                   11051: 
1.1.1.2   misho    11052:                retval_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11053: 
1.1.1.2   misho    11054:                if (IS_VAR == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
1.1       misho    11055:                        zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
                   11056:                }
                   11057: 
                   11058:                if (IS_VAR == IS_VAR && !Z_ISREF_PP(retval_ptr_ptr)) {
                   11059:                        if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
1.1.1.2   misho    11060:                            EX_T(opline->op1.var).var.fcall_returned_reference) {
                   11061:                        } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
1.1       misho    11062:                                zend_error(E_NOTICE, "Only variable references should be returned by reference");
1.1.1.2   misho    11063:                                if (EG(return_value_ptr_ptr)) {
1.1.1.4   misho    11064:                                        zval *ret;
                   11065: 
                   11066:                                        ALLOC_ZVAL(ret);
                   11067:                                        INIT_PZVAL_COPY(ret, *retval_ptr_ptr);
                   11068:                                        zval_copy_ctor(ret);
                   11069:                                        *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    11070:                                }
                   11071:                                break;
1.1       misho    11072:                        }
                   11073:                }
                   11074: 
                   11075:                if (EG(return_value_ptr_ptr)) {
                   11076:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
                   11077:                        Z_ADDREF_PP(retval_ptr_ptr);
                   11078: 
1.1.1.2   misho    11079:                        *EG(return_value_ptr_ptr) = *retval_ptr_ptr;
1.1       misho    11080:                }
1.1.1.2   misho    11081:        } while (0);
1.1       misho    11082: 
                   11083:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11084:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11085: }
                   11086: 
                   11087: static int ZEND_FASTCALL  ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11088: {
1.1.1.2   misho    11089:        USE_OPLINE
1.1       misho    11090:        zval *value;
                   11091:        zval *exception;
                   11092:        zend_free_op free_op1;
                   11093: 
1.1.1.2   misho    11094:        SAVE_OPLINE();
                   11095:        value = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11096: 
1.1.1.2   misho    11097:        if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
1.1       misho    11098:                zend_error_noreturn(E_ERROR, "Can only throw objects");
                   11099:        }
                   11100:        zend_exception_save(TSRMLS_C);
                   11101:        /* Not sure if a complete copy is what we want here */
                   11102:        ALLOC_ZVAL(exception);
                   11103:        INIT_PZVAL_COPY(exception, value);
                   11104:        if (!0) {
                   11105:                zval_copy_ctor(exception);
                   11106:        }
                   11107: 
                   11108:        zend_throw_exception_object(exception TSRMLS_CC);
                   11109:        zend_exception_restore(TSRMLS_C);
                   11110:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11111:        HANDLE_EXCEPTION();
1.1       misho    11112: }
                   11113: 
                   11114: static int ZEND_FASTCALL zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
                   11115: {
1.1.1.2   misho    11116:        USE_OPLINE
1.1       misho    11117:        zval *varptr;
                   11118:        zend_free_op free_op1;
1.1.1.2   misho    11119:        varptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11120: 
                   11121:        if (varptr == &EG(uninitialized_zval)) {
                   11122:                ALLOC_ZVAL(varptr);
                   11123:                INIT_ZVAL(*varptr);
                   11124:                Z_SET_REFCOUNT_P(varptr, 0);
                   11125:        } else if (PZVAL_IS_REF(varptr)) {
                   11126:                zval *original_var = varptr;
                   11127: 
                   11128:                ALLOC_ZVAL(varptr);
1.1.1.2   misho    11129:                ZVAL_COPY_VALUE(varptr, original_var);
1.1       misho    11130:                Z_UNSET_ISREF_P(varptr);
                   11131:                Z_SET_REFCOUNT_P(varptr, 0);
                   11132:                zval_copy_ctor(varptr);
                   11133:        }
                   11134:        Z_ADDREF_P(varptr);
                   11135:        zend_vm_stack_push(varptr TSRMLS_CC);
                   11136:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};  /* for string offsets */
                   11137: 
1.1.1.2   misho    11138:        CHECK_EXCEPTION();
1.1       misho    11139:        ZEND_VM_NEXT_OPCODE();
                   11140: }
                   11141: 
                   11142: static int ZEND_FASTCALL  ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11143: {
1.1.1.2   misho    11144:        USE_OPLINE
1.1       misho    11145:        zend_free_op free_op1;
                   11146:        zval *varptr;
                   11147: 
1.1.1.2   misho    11148:        SAVE_OPLINE();
1.1       misho    11149:        if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
                   11150:                if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) {
                   11151:                        return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11152:                }
1.1.1.2   misho    11153:        } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    11154:                return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11155:        }
                   11156: 
                   11157:        if (IS_VAR == IS_VAR &&
                   11158:                (opline->extended_value & ZEND_ARG_SEND_FUNCTION) &&
1.1.1.2   misho    11159:                EX_T(opline->op1.var).var.fcall_returned_reference &&
                   11160:                EX_T(opline->op1.var).var.ptr) {
                   11161:                varptr = EX_T(opline->op1.var).var.ptr;
1.1       misho    11162:                PZVAL_UNLOCK_EX(varptr, &free_op1, 0);
                   11163:        } else {
1.1.1.2   misho    11164:                varptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11165:        }
                   11166:        if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
1.1.1.2   misho    11167:             EX_T(opline->op1.var).var.fcall_returned_reference) &&
1.1       misho    11168:            varptr != &EG(uninitialized_zval) &&
                   11169:            (PZVAL_IS_REF(varptr) ||
                   11170:             (Z_REFCOUNT_P(varptr) == 1 && (IS_VAR == IS_CV || free_op1.var)))) {
                   11171:                Z_SET_ISREF_P(varptr);
                   11172:                Z_ADDREF_P(varptr);
                   11173:                zend_vm_stack_push(varptr TSRMLS_CC);
                   11174:        } else {
                   11175:                zval *valptr;
                   11176: 
                   11177:                if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
                   11178:                        !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
1.1.1.2   misho    11179:                        !ARG_MAY_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    11180:                        zend_error(E_STRICT, "Only variables should be passed by reference");
                   11181:                }
                   11182:                ALLOC_ZVAL(valptr);
                   11183:                INIT_PZVAL_COPY(valptr, varptr);
                   11184:                if (!0) {
                   11185:                        zval_copy_ctor(valptr);
                   11186:                }
                   11187:                zend_vm_stack_push(valptr TSRMLS_CC);
                   11188:        }
                   11189:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11190:        CHECK_EXCEPTION();
1.1       misho    11191:        ZEND_VM_NEXT_OPCODE();
                   11192: }
                   11193: 
                   11194: static int ZEND_FASTCALL  ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11195: {
1.1.1.2   misho    11196:        USE_OPLINE
1.1       misho    11197:        zend_free_op free_op1;
                   11198:        zval **varptr_ptr;
                   11199:        zval *varptr;
                   11200: 
1.1.1.2   misho    11201:        SAVE_OPLINE();
                   11202:        varptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11203: 
                   11204:        if (IS_VAR == IS_VAR && UNEXPECTED(varptr_ptr == NULL)) {
1.1       misho    11205:                zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
                   11206:        }
                   11207: 
1.1.1.2   misho    11208:        if (IS_VAR == IS_VAR && UNEXPECTED(*varptr_ptr == &EG(error_zval))) {
1.1       misho    11209:                ALLOC_INIT_ZVAL(varptr);
                   11210:                zend_vm_stack_push(varptr TSRMLS_CC);
1.1.1.2   misho    11211:                CHECK_EXCEPTION();
1.1       misho    11212:                ZEND_VM_NEXT_OPCODE();
                   11213:        }
                   11214: 
1.1.1.3   misho    11215:        if (opline->extended_value == ZEND_DO_FCALL_BY_NAME &&
                   11216:            EX(function_state).function->type == ZEND_INTERNAL_FUNCTION &&
                   11217:            !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    11218:                return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11219:        }
                   11220: 
                   11221:        SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
                   11222:        varptr = *varptr_ptr;
                   11223:        Z_ADDREF_P(varptr);
                   11224:        zend_vm_stack_push(varptr TSRMLS_CC);
                   11225: 
                   11226:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11227:        CHECK_EXCEPTION();
1.1       misho    11228:        ZEND_VM_NEXT_OPCODE();
                   11229: }
                   11230: 
                   11231: static int ZEND_FASTCALL  ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11232: {
1.1.1.2   misho    11233:        USE_OPLINE
1.1       misho    11234: 
                   11235:        if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME)
1.1.1.2   misho    11236:                && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    11237:                return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11238:        }
1.1.1.2   misho    11239:        SAVE_OPLINE();
1.1       misho    11240:        return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   11241: }
                   11242: 
                   11243: static int ZEND_FASTCALL  ZEND_BOOL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11244: {
1.1.1.2   misho    11245:        USE_OPLINE
1.1       misho    11246:        zend_free_op free_op1;
1.1.1.2   misho    11247:        zval *retval = &EX_T(opline->result.var).tmp_var;
1.1       misho    11248: 
1.1.1.2   misho    11249:        SAVE_OPLINE();
1.1       misho    11250:        /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
1.1.1.2   misho    11251:        ZVAL_BOOL(retval, i_zend_is_true(_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC)));
1.1       misho    11252:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11253: 
1.1.1.2   misho    11254:        CHECK_EXCEPTION();
1.1       misho    11255:        ZEND_VM_NEXT_OPCODE();
                   11256: }
                   11257: 
                   11258: static int ZEND_FASTCALL  ZEND_SWITCH_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11259: {
1.1.1.2   misho    11260:        USE_OPLINE
1.1       misho    11261: 
1.1.1.2   misho    11262:        SAVE_OPLINE();
                   11263:        zval_ptr_dtor(&EX_T(opline->op1.var).var.ptr);
                   11264:        CHECK_EXCEPTION();
1.1       misho    11265:        ZEND_VM_NEXT_OPCODE();
                   11266: }
                   11267: 
                   11268: static int ZEND_FASTCALL  ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11269: {
1.1.1.2   misho    11270:        USE_OPLINE
1.1       misho    11271:        zend_free_op free_op1;
1.1.1.2   misho    11272:        zval *obj;
1.1       misho    11273:        zend_class_entry *ce;
                   11274:        zend_function *clone;
                   11275:        zend_object_clone_obj_t clone_call;
                   11276: 
1.1.1.2   misho    11277:        SAVE_OPLINE();
                   11278:        obj = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11279: 
1.1       misho    11280:        if (IS_VAR == IS_CONST ||
1.1.1.2   misho    11281:            UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT)) {
1.1       misho    11282:                zend_error_noreturn(E_ERROR, "__clone method called on non-object");
                   11283:        }
                   11284: 
                   11285:        ce = Z_OBJCE_P(obj);
                   11286:        clone = ce ? ce->clone : NULL;
                   11287:        clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
1.1.1.2   misho    11288:        if (UNEXPECTED(clone_call == NULL)) {
1.1       misho    11289:                if (ce) {
                   11290:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
                   11291:                } else {
                   11292:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
                   11293:                }
                   11294:        }
                   11295: 
                   11296:        if (ce && clone) {
                   11297:                if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
                   11298:                        /* Ensure that if we're calling a private function, we're allowed to do so.
                   11299:                         */
1.1.1.2   misho    11300:                        if (UNEXPECTED(ce != EG(scope))) {
1.1       misho    11301:                                zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   11302:                        }
                   11303:                } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
                   11304:                        /* Ensure that if we're calling a protected function, we're allowed to do so.
                   11305:                         */
1.1.1.3   misho    11306:                        if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
1.1       misho    11307:                                zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   11308:                        }
                   11309:                }
                   11310:        }
                   11311: 
1.1.1.2   misho    11312:        if (EXPECTED(EG(exception) == NULL)) {
                   11313:                zval *retval;
                   11314: 
                   11315:                ALLOC_ZVAL(retval);
                   11316:                Z_OBJVAL_P(retval) = clone_call(obj TSRMLS_CC);
                   11317:                Z_TYPE_P(retval) = IS_OBJECT;
                   11318:                Z_SET_REFCOUNT_P(retval, 1);
                   11319:                Z_SET_ISREF_P(retval);
                   11320:                if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
                   11321:                        zval_ptr_dtor(&retval);
                   11322:                } else {
                   11323:                        AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    11324:                }
                   11325:        }
                   11326:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11327:        CHECK_EXCEPTION();
1.1       misho    11328:        ZEND_VM_NEXT_OPCODE();
                   11329: }
                   11330: 
                   11331: static int ZEND_FASTCALL  ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11332: {
1.1.1.2   misho    11333:        USE_OPLINE
1.1       misho    11334:        zend_free_op free_op1;
1.1.1.2   misho    11335:        zval *expr;
                   11336:        zval *result = &EX_T(opline->result.var).tmp_var;
                   11337: 
                   11338:        SAVE_OPLINE();
                   11339:        expr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11340: 
                   11341:        if (opline->extended_value != IS_STRING) {
1.1.1.2   misho    11342:                ZVAL_COPY_VALUE(result, expr);
1.1       misho    11343:                if (!0) {
                   11344:                        zendi_zval_copy_ctor(*result);
                   11345:                }
                   11346:        }
                   11347:        switch (opline->extended_value) {
                   11348:                case IS_NULL:
                   11349:                        convert_to_null(result);
                   11350:                        break;
                   11351:                case IS_BOOL:
                   11352:                        convert_to_boolean(result);
                   11353:                        break;
                   11354:                case IS_LONG:
                   11355:                        convert_to_long(result);
                   11356:                        break;
                   11357:                case IS_DOUBLE:
                   11358:                        convert_to_double(result);
                   11359:                        break;
                   11360:                case IS_STRING: {
                   11361:                        zval var_copy;
                   11362:                        int use_copy;
                   11363: 
                   11364:                        zend_make_printable_zval(expr, &var_copy, &use_copy);
                   11365:                        if (use_copy) {
1.1.1.2   misho    11366:                                ZVAL_COPY_VALUE(result, &var_copy);
1.1       misho    11367:                                if (0) {
                   11368:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11369:                                }
                   11370:                        } else {
1.1.1.2   misho    11371:                                ZVAL_COPY_VALUE(result, expr);
1.1       misho    11372:                                if (!0) {
                   11373:                                        zendi_zval_copy_ctor(*result);
                   11374:                                }
                   11375:                        }
                   11376:                        break;
                   11377:                }
                   11378:                case IS_ARRAY:
                   11379:                        convert_to_array(result);
                   11380:                        break;
                   11381:                case IS_OBJECT:
                   11382:                        convert_to_object(result);
                   11383:                        break;
                   11384:        }
                   11385:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11386:        CHECK_EXCEPTION();
1.1       misho    11387:        ZEND_VM_NEXT_OPCODE();
                   11388: }
                   11389: 
                   11390: static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11391: {
1.1.1.2   misho    11392:        USE_OPLINE
1.1       misho    11393:        zend_op_array *new_op_array=NULL;
                   11394:        zend_free_op free_op1;
1.1.1.2   misho    11395:        zval *inc_filename;
                   11396:     zval *tmp_inc_filename = NULL;
1.1       misho    11397:        zend_bool failure_retval=0;
                   11398: 
1.1.1.2   misho    11399:        SAVE_OPLINE();
                   11400:        inc_filename = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11401: 
1.1       misho    11402:        if (inc_filename->type!=IS_STRING) {
1.1.1.2   misho    11403:                MAKE_STD_ZVAL(tmp_inc_filename);
                   11404:                ZVAL_COPY_VALUE(tmp_inc_filename, inc_filename);
                   11405:                zval_copy_ctor(tmp_inc_filename);
                   11406:                convert_to_string(tmp_inc_filename);
                   11407:                inc_filename = tmp_inc_filename;
1.1       misho    11408:        }
                   11409: 
1.1.1.2   misho    11410:        if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
                   11411:                if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
1.1       misho    11412:                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   11413:                } else {
                   11414:                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   11415:                }
                   11416:        } else {
1.1.1.2   misho    11417:                switch (opline->extended_value) {
1.1       misho    11418:                        case ZEND_INCLUDE_ONCE:
                   11419:                        case ZEND_REQUIRE_ONCE: {
                   11420:                                        zend_file_handle file_handle;
                   11421:                                        char *resolved_path;
                   11422: 
                   11423:                                        resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
                   11424:                                        if (resolved_path) {
                   11425:                                                failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
                   11426:                                        } else {
                   11427:                                                resolved_path = Z_STRVAL_P(inc_filename);
                   11428:                                        }
                   11429: 
                   11430:                                        if (failure_retval) {
                   11431:                                                /* do nothing, file already included */
                   11432:                                        } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
                   11433: 
                   11434:                                                if (!file_handle.opened_path) {
                   11435:                                                        file_handle.opened_path = estrdup(resolved_path);
                   11436:                                                }
                   11437: 
                   11438:                                                if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
1.1.1.2   misho    11439:                                                        new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
1.1       misho    11440:                                                        zend_destroy_file_handle(&file_handle TSRMLS_CC);
                   11441:                                                } else {
                   11442:                                                        zend_file_handle_dtor(&file_handle TSRMLS_CC);
                   11443:                                                        failure_retval=1;
                   11444:                                                }
                   11445:                                        } else {
1.1.1.2   misho    11446:                                                if (opline->extended_value == ZEND_INCLUDE_ONCE) {
1.1       misho    11447:                                                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   11448:                                                } else {
                   11449:                                                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   11450:                                                }
                   11451:                                        }
                   11452:                                        if (resolved_path != Z_STRVAL_P(inc_filename)) {
                   11453:                                                efree(resolved_path);
                   11454:                                        }
                   11455:                                }
                   11456:                                break;
                   11457:                        case ZEND_INCLUDE:
                   11458:                        case ZEND_REQUIRE:
1.1.1.2   misho    11459:                                new_op_array = compile_filename(opline->extended_value, inc_filename TSRMLS_CC);
1.1       misho    11460:                                break;
                   11461:                        case ZEND_EVAL: {
                   11462:                                        char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
                   11463: 
                   11464:                                        new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
                   11465:                                        efree(eval_desc);
                   11466:                                }
                   11467:                                break;
                   11468:                        EMPTY_SWITCH_DEFAULT_CASE()
                   11469:                }
                   11470:        }
1.1.1.2   misho    11471:        if (tmp_inc_filename) {
                   11472:                zval_ptr_dtor(&tmp_inc_filename);
1.1       misho    11473:        }
                   11474:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11475:        if (UNEXPECTED(EG(exception) != NULL)) {
                   11476:                HANDLE_EXCEPTION();
                   11477:        } else if (EXPECTED(new_op_array != NULL)) {
1.1       misho    11478:                EX(original_return_value) = EG(return_value_ptr_ptr);
                   11479:                EG(active_op_array) = new_op_array;
1.1.1.2   misho    11480:                if (RETURN_VALUE_USED(opline)) {
                   11481:                        EX_T(opline->result.var).var.ptr = NULL;
                   11482:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   11483:                        EG(return_value_ptr_ptr) = EX_T(opline->result.var).var.ptr_ptr;
                   11484:                } else {
                   11485:                        EG(return_value_ptr_ptr) = NULL;
                   11486:                }
1.1       misho    11487: 
                   11488:                EX(current_object) = EX(object);
                   11489: 
                   11490:                EX(function_state).function = (zend_function *) new_op_array;
                   11491:                EX(object) = NULL;
                   11492: 
                   11493:                if (!EG(active_symbol_table)) {
                   11494:                        zend_rebuild_symbol_table(TSRMLS_C);
                   11495:                }
                   11496: 
1.1.1.2   misho    11497:                if (EXPECTED(zend_execute == execute)) {
1.1       misho    11498:                        ZEND_VM_ENTER();
                   11499:                } else {
                   11500:                        zend_execute(new_op_array TSRMLS_CC);
                   11501:                }
                   11502: 
1.1.1.2   misho    11503:                EX(function_state).function = (zend_function *) EX(op_array);
                   11504:                EX(object) = EX(current_object);
1.1       misho    11505: 
1.1.1.2   misho    11506:                EG(opline_ptr) = &EX(opline);
                   11507:                EG(active_op_array) = EX(op_array);
                   11508:                EG(return_value_ptr_ptr) = EX(original_return_value);
                   11509:                destroy_op_array(new_op_array TSRMLS_CC);
                   11510:                efree(new_op_array);
                   11511:                if (UNEXPECTED(EG(exception) != NULL)) {
                   11512:                        zend_throw_exception_internal(NULL TSRMLS_CC);
                   11513:                        HANDLE_EXCEPTION();
                   11514:                } else if (RETURN_VALUE_USED(opline)) {
                   11515:                        if (!EX_T(opline->result.var).var.ptr) { /* there was no return statement */
                   11516:                                zval *retval;
1.1       misho    11517: 
1.1.1.2   misho    11518:                                ALLOC_ZVAL(retval);
                   11519:                                ZVAL_BOOL(retval, 1);
                   11520:                                INIT_PZVAL(retval);
                   11521:                                EX_T(opline->result.var).var.ptr = retval;
                   11522:                        }
1.1       misho    11523:                }
                   11524: 
1.1.1.2   misho    11525:        } else if (RETURN_VALUE_USED(opline)) {
                   11526:                zval *retval;
                   11527: 
                   11528:                ALLOC_ZVAL(retval);
                   11529:                ZVAL_BOOL(retval, failure_retval);
                   11530:                INIT_PZVAL(retval);
                   11531:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    11532:        }
                   11533:        ZEND_VM_NEXT_OPCODE();
                   11534: }
                   11535: 
                   11536: static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11537: {
1.1.1.2   misho    11538:        USE_OPLINE
1.1       misho    11539:        zend_free_op free_op1;
                   11540:        zval *array_ptr, **array_ptr_ptr;
                   11541:        HashTable *fe_ht;
                   11542:        zend_object_iterator *iter = NULL;
                   11543:        zend_class_entry *ce = NULL;
                   11544:        zend_bool is_empty = 0;
                   11545: 
1.1.1.2   misho    11546:        SAVE_OPLINE();
                   11547: 
                   11548:        if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
                   11549:            (opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
                   11550:                array_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11551:                if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
1.1.1.2   misho    11552:                        MAKE_STD_ZVAL(array_ptr);
                   11553:                        ZVAL_NULL(array_ptr);
1.1       misho    11554:                } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
                   11555:                        if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
                   11556:                                zend_error(E_WARNING, "foreach() cannot iterate over objects without PHP class");
1.1.1.2   misho    11557:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11558:                        }
                   11559: 
                   11560:                        ce = Z_OBJCE_PP(array_ptr_ptr);
                   11561:                        if (!ce || ce->get_iterator == NULL) {
                   11562:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   11563:                                Z_ADDREF_PP(array_ptr_ptr);
                   11564:                        }
                   11565:                        array_ptr = *array_ptr_ptr;
                   11566:                } else {
                   11567:                        if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
                   11568:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   11569:                                if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
                   11570:                                        Z_SET_ISREF_PP(array_ptr_ptr);
                   11571:                                }
                   11572:                        }
                   11573:                        array_ptr = *array_ptr_ptr;
                   11574:                        Z_ADDREF_P(array_ptr);
                   11575:                }
                   11576:        } else {
1.1.1.2   misho    11577:                array_ptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11578:                if (0) { /* IS_TMP_VAR */
                   11579:                        zval *tmp;
                   11580: 
                   11581:                        ALLOC_ZVAL(tmp);
                   11582:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   11583:                        array_ptr = tmp;
                   11584:                        if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   11585:                                ce = Z_OBJCE_P(array_ptr);
                   11586:                                if (ce && ce->get_iterator) {
                   11587:                                        Z_DELREF_P(array_ptr);
                   11588:                                }
                   11589:                        }
                   11590:                } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   11591:                        ce = Z_OBJCE_P(array_ptr);
                   11592:                        if (!ce || !ce->get_iterator) {
                   11593:                                Z_ADDREF_P(array_ptr);
                   11594:                        }
                   11595:                } else if (IS_VAR == IS_CONST ||
                   11596:                           ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
                   11597:                            !Z_ISREF_P(array_ptr) &&
                   11598:                            Z_REFCOUNT_P(array_ptr) > 1)) {
                   11599:                        zval *tmp;
                   11600: 
                   11601:                        ALLOC_ZVAL(tmp);
                   11602:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   11603:                        zval_copy_ctor(tmp);
                   11604:                        array_ptr = tmp;
                   11605:                } else {
                   11606:                        Z_ADDREF_P(array_ptr);
                   11607:                }
                   11608:        }
                   11609: 
                   11610:        if (ce && ce->get_iterator) {
                   11611:                iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
                   11612: 
1.1.1.2   misho    11613:                if (iter && EXPECTED(EG(exception) == NULL)) {
1.1       misho    11614:                        array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
                   11615:                } else {
1.1.1.2   misho    11616:                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    11617:                        if (!EG(exception)) {
                   11618:                                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
                   11619:                        }
                   11620:                        zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho    11621:                        HANDLE_EXCEPTION();
1.1       misho    11622:                }
                   11623:        }
                   11624: 
1.1.1.2   misho    11625:        EX_T(opline->result.var).fe.ptr = array_ptr;
1.1       misho    11626: 
                   11627:        if (iter) {
                   11628:                iter->index = 0;
                   11629:                if (iter->funcs->rewind) {
                   11630:                        iter->funcs->rewind(iter TSRMLS_CC);
1.1.1.2   misho    11631:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11632:                                zval_ptr_dtor(&array_ptr);
1.1.1.2   misho    11633:                                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11634:                                HANDLE_EXCEPTION();
1.1       misho    11635:                        }
                   11636:                }
                   11637:                is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
1.1.1.2   misho    11638:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11639:                        zval_ptr_dtor(&array_ptr);
1.1.1.2   misho    11640:                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11641:                        HANDLE_EXCEPTION();
1.1       misho    11642:                }
                   11643:                iter->index = -1; /* will be set to 0 before using next handler */
                   11644:        } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
                   11645:                zend_hash_internal_pointer_reset(fe_ht);
                   11646:                if (ce) {
                   11647:                        zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
                   11648:                        while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
                   11649:                                char *str_key;
                   11650:                                uint str_key_len;
                   11651:                                ulong int_key;
                   11652:                                zend_uchar key_type;
                   11653: 
                   11654:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
                   11655:                                if (key_type != HASH_KEY_NON_EXISTANT &&
                   11656:                                        (key_type == HASH_KEY_IS_LONG ||
                   11657:                                     zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
                   11658:                                        break;
                   11659:                                }
                   11660:                                zend_hash_move_forward(fe_ht);
                   11661:                        }
                   11662:                }
                   11663:                is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
1.1.1.2   misho    11664:                zend_hash_get_pointer(fe_ht, &EX_T(opline->result.var).fe.fe_pos);
1.1       misho    11665:        } else {
                   11666:                zend_error(E_WARNING, "Invalid argument supplied for foreach()");
                   11667:                is_empty = 1;
                   11668:        }
                   11669: 
1.1.1.2   misho    11670:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    11671:        if (is_empty) {
1.1.1.2   misho    11672:                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11673:        } else {
1.1.1.2   misho    11674:                CHECK_EXCEPTION();
1.1       misho    11675:                ZEND_VM_NEXT_OPCODE();
                   11676:        }
                   11677: }
                   11678: 
                   11679: static int ZEND_FASTCALL  ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11680: {
1.1.1.2   misho    11681:        USE_OPLINE
1.1       misho    11682: 
1.1.1.2   misho    11683:        zval *array = EX_T(opline->op1.var).fe.ptr;
1.1       misho    11684:        zval **value;
                   11685:        char *str_key;
                   11686:        uint str_key_len;
                   11687:        ulong int_key;
                   11688:        HashTable *fe_ht;
                   11689:        zend_object_iterator *iter = NULL;
                   11690:        int key_type = 0;
                   11691:        zend_bool use_key = (zend_bool)(opline->extended_value & ZEND_FE_FETCH_WITH_KEY);
                   11692: 
1.1.1.2   misho    11693:        SAVE_OPLINE();
                   11694: 
1.1       misho    11695:        switch (zend_iterator_unwrap(array, &iter TSRMLS_CC)) {
                   11696:                default:
                   11697:                case ZEND_ITER_INVALID:
                   11698:                        zend_error(E_WARNING, "Invalid argument supplied for foreach()");
1.1.1.2   misho    11699:                        ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11700: 
                   11701:                case ZEND_ITER_PLAIN_OBJECT: {
1.1.1.2   misho    11702:                        const char *class_name, *prop_name;
1.1       misho    11703:                        zend_object *zobj = zend_objects_get_address(array TSRMLS_CC);
                   11704: 
1.1.1.2   misho    11705:                        fe_ht = Z_OBJPROP_P(array);
                   11706:                        zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
1.1       misho    11707:                        do {
                   11708:                                if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
                   11709:                                        /* reached end of iteration */
1.1.1.2   misho    11710:                                        ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11711:                                }
                   11712:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
                   11713: 
                   11714:                                zend_hash_move_forward(fe_ht);
                   11715:                        } while (key_type == HASH_KEY_NON_EXISTANT ||
                   11716:                                 (key_type != HASH_KEY_IS_LONG &&
                   11717:                                  zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS));
1.1.1.2   misho    11718:                        zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
1.1       misho    11719:                        if (use_key && key_type != HASH_KEY_IS_LONG) {
                   11720:                                zend_unmangle_property_name(str_key, str_key_len-1, &class_name, &prop_name);
                   11721:                                str_key_len = strlen(prop_name);
                   11722:                                str_key = estrndup(prop_name, str_key_len);
                   11723:                                str_key_len++;
                   11724:                        }
                   11725:                        break;
                   11726:                }
                   11727: 
                   11728:                case ZEND_ITER_PLAIN_ARRAY:
1.1.1.2   misho    11729:                        fe_ht = Z_ARRVAL_P(array);
                   11730:                        zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
1.1       misho    11731:                        if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
                   11732:                                /* reached end of iteration */
1.1.1.2   misho    11733:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11734:                        }
                   11735:                        if (use_key) {
                   11736:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL);
                   11737:                        }
                   11738:                        zend_hash_move_forward(fe_ht);
1.1.1.2   misho    11739:                        zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
1.1       misho    11740:                        break;
                   11741: 
                   11742:                case ZEND_ITER_OBJECT:
                   11743:                        /* !iter happens from exception */
                   11744:                        if (iter && ++iter->index > 0) {
                   11745:                                /* This could cause an endless loop if index becomes zero again.
                   11746:                                 * In case that ever happens we need an additional flag. */
                   11747:                                iter->funcs->move_forward(iter TSRMLS_CC);
1.1.1.2   misho    11748:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11749:                                        zval_ptr_dtor(&array);
1.1.1.2   misho    11750:                                        HANDLE_EXCEPTION();
1.1       misho    11751:                                }
                   11752:                        }
                   11753:                        /* If index is zero we come from FE_RESET and checked valid() already. */
                   11754:                        if (!iter || (iter->index > 0 && iter->funcs->valid(iter TSRMLS_CC) == FAILURE)) {
                   11755:                                /* reached end of iteration */
1.1.1.2   misho    11756:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11757:                                        zval_ptr_dtor(&array);
1.1.1.2   misho    11758:                                        HANDLE_EXCEPTION();
1.1       misho    11759:                                }
1.1.1.2   misho    11760:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11761:                        }
                   11762:                        iter->funcs->get_current_data(iter, &value TSRMLS_CC);
1.1.1.2   misho    11763:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11764:                                zval_ptr_dtor(&array);
1.1.1.2   misho    11765:                                HANDLE_EXCEPTION();
1.1       misho    11766:                        }
                   11767:                        if (!value) {
                   11768:                                /* failure in get_current_data */
1.1.1.2   misho    11769:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    11770:                        }
                   11771:                        if (use_key) {
                   11772:                                if (iter->funcs->get_current_key) {
                   11773:                                        key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC);
1.1.1.2   misho    11774:                                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    11775:                                                zval_ptr_dtor(&array);
1.1.1.2   misho    11776:                                                HANDLE_EXCEPTION();
1.1       misho    11777:                                        }
                   11778:                                } else {
                   11779:                                        key_type = HASH_KEY_IS_LONG;
                   11780:                                        int_key = iter->index;
                   11781:                                }
                   11782:                        }
                   11783:                        break;
                   11784:        }
                   11785: 
                   11786:        if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
                   11787:                SEPARATE_ZVAL_IF_NOT_REF(value);
                   11788:                Z_SET_ISREF_PP(value);
1.1.1.2   misho    11789:                EX_T(opline->result.var).var.ptr_ptr = value;
1.1       misho    11790:                Z_ADDREF_PP(value);
                   11791:        } else {
                   11792:                PZVAL_LOCK(*value);
1.1.1.2   misho    11793:                AI_SET_PTR(&EX_T(opline->result.var), *value);
1.1       misho    11794:        }
                   11795: 
                   11796:        if (use_key) {
1.1.1.2   misho    11797:                zval *key = &EX_T((opline+1)->result.var).tmp_var;
1.1       misho    11798: 
                   11799:                switch (key_type) {
                   11800:                        case HASH_KEY_IS_STRING:
1.1.1.2   misho    11801:                                Z_STRVAL_P(key) = (char*)str_key;
1.1       misho    11802:                                Z_STRLEN_P(key) = str_key_len-1;
                   11803:                                Z_TYPE_P(key) = IS_STRING;
                   11804:                                break;
                   11805:                        case HASH_KEY_IS_LONG:
                   11806:                                Z_LVAL_P(key) = int_key;
                   11807:                                Z_TYPE_P(key) = IS_LONG;
                   11808:                                break;
                   11809:                        default:
                   11810:                        case HASH_KEY_NON_EXISTANT:
                   11811:                                ZVAL_NULL(key);
                   11812:                                break;
                   11813:                }
                   11814:        }
                   11815: 
1.1.1.2   misho    11816:        CHECK_EXCEPTION();
1.1       misho    11817:        ZEND_VM_INC_OPCODE();
                   11818:        ZEND_VM_NEXT_OPCODE();
                   11819: }
                   11820: 
                   11821: static int ZEND_FASTCALL  ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11822: {
                   11823: #if 0 || (IS_VAR != IS_UNUSED)
1.1.1.2   misho    11824:        USE_OPLINE
                   11825: 
                   11826:        SAVE_OPLINE();
1.1       misho    11827:        if (IS_VAR != IS_UNUSED) {
                   11828:                zend_free_op free_op1;
1.1.1.2   misho    11829:                zval *ptr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11830: 
                   11831:                if (Z_TYPE_P(ptr) == IS_LONG) {
                   11832:                        EG(exit_status) = Z_LVAL_P(ptr);
                   11833:                } else {
                   11834:                        zend_print_variable(ptr);
                   11835:                }
                   11836:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11837:        }
                   11838: #endif
                   11839:        zend_bailout();
1.1.1.2   misho    11840:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
1.1       misho    11841: }
                   11842: 
                   11843: static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11844: {
1.1.1.2   misho    11845:        USE_OPLINE
                   11846:        zend_free_op free_op1;
                   11847:        zval *value;
                   11848: 
                   11849:        SAVE_OPLINE();
                   11850:        value = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11851: 
                   11852:        if (i_zend_is_true(value)) {
                   11853:                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   11854:                if (!0) {
                   11855:                        zendi_zval_copy_ctor(EX_T(opline->result.var).tmp_var);
                   11856:                }
                   11857:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11858: #if DEBUG_ZEND>=2
                   11859:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   11860: #endif
                   11861:                ZEND_VM_JMP(opline->op2.jmp_addr);
                   11862:        }
                   11863: 
                   11864:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11865:        CHECK_EXCEPTION();
                   11866:        ZEND_VM_NEXT_OPCODE();
                   11867: }
                   11868: 
                   11869: static int ZEND_FASTCALL  ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11870: {
                   11871:        USE_OPLINE
1.1       misho    11872:        zend_free_op free_op1;
1.1.1.2   misho    11873:        zval *value, *ret;
                   11874: 
                   11875:        SAVE_OPLINE();
                   11876:        value = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    11877: 
                   11878:        if (i_zend_is_true(value)) {
1.1.1.2   misho    11879:                if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   11880:                        Z_ADDREF_P(value);
                   11881:                        EX_T(opline->result.var).var.ptr = value;
                   11882:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   11883:                } else {
                   11884:                        ALLOC_ZVAL(ret);
                   11885:                        INIT_PZVAL_COPY(ret, value);
                   11886:                        EX_T(opline->result.var).var.ptr = ret;
                   11887:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   11888:                        if (!0) {
                   11889:                                zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   11890:                        }
                   11891:                }
1.1       misho    11892:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11893: #if DEBUG_ZEND>=2
1.1.1.2   misho    11894:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    11895: #endif
1.1.1.2   misho    11896:                ZEND_VM_JMP(opline->op2.jmp_addr);
1.1       misho    11897:        }
                   11898: 
                   11899:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11900:        CHECK_EXCEPTION();
1.1       misho    11901:        ZEND_VM_NEXT_OPCODE();
                   11902: }
                   11903: 
                   11904: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11905: {
1.1.1.2   misho    11906:        USE_OPLINE
1.1       misho    11907:        zend_free_op free_op1;
1.1.1.2   misho    11908:        zval *value;
1.1       misho    11909: 
1.1.1.2   misho    11910:        SAVE_OPLINE();
                   11911:        value = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11912: 
                   11913:        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
1.1       misho    11914:        if (!0) {
1.1.1.2   misho    11915:                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   11916:        }
                   11917:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11918:        CHECK_EXCEPTION();
                   11919:        ZEND_VM_NEXT_OPCODE();
                   11920: }
                   11921: 
                   11922: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11923: {
                   11924:        USE_OPLINE
                   11925:        zend_free_op free_op1;
                   11926:        zval *value, *ret;
                   11927: 
                   11928:        SAVE_OPLINE();
                   11929:        value = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11930: 
                   11931:        if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   11932:                Z_ADDREF_P(value);
                   11933:                EX_T(opline->result.var).var.ptr = value;
                   11934:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   11935:        } else {
                   11936:                ALLOC_ZVAL(ret);
                   11937:                INIT_PZVAL_COPY(ret, value);
                   11938:                EX_T(opline->result.var).var.ptr = ret;
                   11939:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   11940:                if (!0) {
                   11941:                        zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   11942:                }
1.1       misho    11943:        }
1.1.1.2   misho    11944: 
1.1       misho    11945:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11946:        CHECK_EXCEPTION();
1.1       misho    11947:        ZEND_VM_NEXT_OPCODE();
                   11948: }
                   11949: 
                   11950: static int ZEND_FASTCALL  ZEND_INSTANCEOF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11951: {
1.1.1.2   misho    11952:        USE_OPLINE
1.1       misho    11953:        zend_free_op free_op1;
1.1.1.2   misho    11954:        zval *expr;
1.1       misho    11955:        zend_bool result;
                   11956: 
1.1.1.2   misho    11957:        SAVE_OPLINE();
                   11958:        expr = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   11959: 
1.1       misho    11960:        if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
1.1.1.2   misho    11961:                result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.var).class_entry TSRMLS_CC);
1.1       misho    11962:        } else {
                   11963:                result = 0;
                   11964:        }
1.1.1.2   misho    11965:        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, result);
1.1       misho    11966:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    11967:        CHECK_EXCEPTION();
1.1       misho    11968:        ZEND_VM_NEXT_OPCODE();
                   11969: }
                   11970: 
                   11971: static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11972: {
1.1.1.2   misho    11973:        USE_OPLINE
1.1       misho    11974:        zend_free_op free_op1;
                   11975: 
1.1.1.2   misho    11976:        SAVE_OPLINE();
                   11977:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   11978:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   11979:                opline->op2.zv TSRMLS_CC);
1.1       misho    11980:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11981: 
1.1.1.2   misho    11982:        CHECK_EXCEPTION();
1.1       misho    11983:        ZEND_VM_NEXT_OPCODE();
                   11984: }
                   11985: 
                   11986: static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   11987: {
1.1.1.2   misho    11988:        USE_OPLINE
1.1       misho    11989:        zend_free_op free_op1;
                   11990: 
1.1.1.2   misho    11991:        SAVE_OPLINE();
                   11992:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   11993:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   11994:                opline->op2.zv TSRMLS_CC);
1.1       misho    11995:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   11996: 
1.1.1.2   misho    11997:        CHECK_EXCEPTION();
1.1       misho    11998:        ZEND_VM_NEXT_OPCODE();
                   11999: }
                   12000: 
                   12001: static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12002: {
1.1.1.2   misho    12003:        USE_OPLINE
1.1       misho    12004:        zend_free_op free_op1;
                   12005: 
1.1.1.2   misho    12006:        SAVE_OPLINE();
                   12007:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   12008:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12009:                opline->op2.zv TSRMLS_CC);
1.1       misho    12010:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12011: 
1.1.1.2   misho    12012:        CHECK_EXCEPTION();
1.1       misho    12013:        ZEND_VM_NEXT_OPCODE();
                   12014: }
                   12015: 
                   12016: static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12017: {
1.1.1.2   misho    12018:        USE_OPLINE
1.1       misho    12019:        zend_free_op free_op1;
                   12020: 
1.1.1.2   misho    12021:        SAVE_OPLINE();
                   12022:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   12023:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12024:                opline->op2.zv TSRMLS_CC);
1.1       misho    12025:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12026: 
1.1.1.2   misho    12027:        CHECK_EXCEPTION();
1.1       misho    12028:        ZEND_VM_NEXT_OPCODE();
                   12029: }
                   12030: 
                   12031: static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12032: {
1.1.1.2   misho    12033:        USE_OPLINE
1.1       misho    12034:        zend_free_op free_op1;
                   12035: 
1.1.1.2   misho    12036:        SAVE_OPLINE();
                   12037:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   12038:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12039:                opline->op2.zv TSRMLS_CC);
1.1       misho    12040:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12041: 
1.1.1.2   misho    12042:        CHECK_EXCEPTION();
1.1       misho    12043:        ZEND_VM_NEXT_OPCODE();
                   12044: }
                   12045: 
                   12046: static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12047: {
1.1.1.2   misho    12048:        USE_OPLINE
1.1       misho    12049:        zend_free_op free_op1;
                   12050: 
1.1.1.2   misho    12051:        SAVE_OPLINE();
                   12052:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   12053:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12054:                opline->op2.zv TSRMLS_CC);
1.1       misho    12055:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12056: 
1.1.1.2   misho    12057:        CHECK_EXCEPTION();
1.1       misho    12058:        ZEND_VM_NEXT_OPCODE();
                   12059: }
                   12060: 
                   12061: static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12062: {
1.1.1.2   misho    12063:        USE_OPLINE
1.1       misho    12064:        zend_free_op free_op1;
                   12065: 
1.1.1.2   misho    12066:        SAVE_OPLINE();
                   12067:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   12068:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12069:                opline->op2.zv TSRMLS_CC);
1.1       misho    12070:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12071: 
1.1.1.2   misho    12072:        CHECK_EXCEPTION();
1.1       misho    12073:        ZEND_VM_NEXT_OPCODE();
                   12074: }
                   12075: 
                   12076: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12077: {
1.1.1.2   misho    12078:        USE_OPLINE
1.1       misho    12079:        zend_free_op free_op1;
                   12080: 
1.1.1.2   misho    12081:        SAVE_OPLINE();
                   12082:        concat_function(&EX_T(opline->result.var).tmp_var,
                   12083:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12084:                opline->op2.zv TSRMLS_CC);
1.1       misho    12085:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12086: 
1.1.1.2   misho    12087:        CHECK_EXCEPTION();
1.1       misho    12088:        ZEND_VM_NEXT_OPCODE();
                   12089: }
                   12090: 
                   12091: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12092: {
1.1.1.2   misho    12093:        USE_OPLINE
1.1       misho    12094:        zend_free_op free_op1;
                   12095: 
1.1.1.2   misho    12096:        SAVE_OPLINE();
                   12097:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   12098:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12099:                opline->op2.zv TSRMLS_CC);
1.1       misho    12100:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12101: 
1.1.1.2   misho    12102:        CHECK_EXCEPTION();
1.1       misho    12103:        ZEND_VM_NEXT_OPCODE();
                   12104: }
                   12105: 
                   12106: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12107: {
1.1.1.2   misho    12108:        USE_OPLINE
1.1       misho    12109:        zend_free_op free_op1;
1.1.1.2   misho    12110:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    12111: 
1.1.1.2   misho    12112:        SAVE_OPLINE();
1.1       misho    12113:        is_identical_function(result,
1.1.1.2   misho    12114:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12115:                opline->op2.zv TSRMLS_CC);
1.1       misho    12116:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   12117:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12118: 
1.1.1.2   misho    12119:        CHECK_EXCEPTION();
1.1       misho    12120:        ZEND_VM_NEXT_OPCODE();
                   12121: }
                   12122: 
                   12123: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12124: {
1.1.1.2   misho    12125:        USE_OPLINE
1.1       misho    12126:        zend_free_op free_op1;
1.1.1.2   misho    12127:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    12128: 
1.1.1.2   misho    12129:        SAVE_OPLINE();
                   12130:        ZVAL_BOOL(result, fast_equal_function(result,
                   12131:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12132:                opline->op2.zv TSRMLS_CC));
1.1       misho    12133:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12134: 
1.1.1.2   misho    12135:        CHECK_EXCEPTION();
1.1       misho    12136:        ZEND_VM_NEXT_OPCODE();
                   12137: }
                   12138: 
                   12139: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12140: {
1.1.1.2   misho    12141:        USE_OPLINE
1.1       misho    12142:        zend_free_op free_op1;
1.1.1.2   misho    12143:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    12144: 
1.1.1.2   misho    12145:        SAVE_OPLINE();
                   12146:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   12147:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12148:                opline->op2.zv TSRMLS_CC));
1.1       misho    12149:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12150: 
1.1.1.2   misho    12151:        CHECK_EXCEPTION();
1.1       misho    12152:        ZEND_VM_NEXT_OPCODE();
                   12153: }
                   12154: 
                   12155: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12156: {
1.1.1.2   misho    12157:        USE_OPLINE
1.1       misho    12158:        zend_free_op free_op1;
1.1.1.2   misho    12159:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    12160: 
1.1.1.2   misho    12161:        SAVE_OPLINE();
                   12162:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   12163:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12164:                opline->op2.zv TSRMLS_CC));
1.1       misho    12165:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12166: 
1.1.1.2   misho    12167:        CHECK_EXCEPTION();
1.1       misho    12168:        ZEND_VM_NEXT_OPCODE();
                   12169: }
                   12170: 
                   12171: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12172: {
1.1.1.2   misho    12173:        USE_OPLINE
1.1       misho    12174:        zend_free_op free_op1;
1.1.1.2   misho    12175:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    12176: 
1.1.1.2   misho    12177:        SAVE_OPLINE();
                   12178:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   12179:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12180:                opline->op2.zv TSRMLS_CC));
1.1       misho    12181:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12182: 
1.1.1.2   misho    12183:        CHECK_EXCEPTION();
1.1       misho    12184:        ZEND_VM_NEXT_OPCODE();
                   12185: }
                   12186: 
                   12187: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12188: {
1.1.1.2   misho    12189:        USE_OPLINE
1.1       misho    12190:        zend_free_op free_op1;
                   12191: 
1.1.1.2   misho    12192:        SAVE_OPLINE();
                   12193:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   12194:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12195:                opline->op2.zv TSRMLS_CC);
1.1       misho    12196:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12197: 
1.1.1.2   misho    12198:        CHECK_EXCEPTION();
1.1       misho    12199:        ZEND_VM_NEXT_OPCODE();
                   12200: }
                   12201: 
                   12202: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12203: {
1.1.1.2   misho    12204:        USE_OPLINE
1.1       misho    12205:        zend_free_op free_op1;
                   12206: 
1.1.1.2   misho    12207:        SAVE_OPLINE();
                   12208:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   12209:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12210:                opline->op2.zv TSRMLS_CC);
1.1       misho    12211:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12212: 
1.1.1.2   misho    12213:        CHECK_EXCEPTION();
1.1       misho    12214:        ZEND_VM_NEXT_OPCODE();
                   12215: }
                   12216: 
                   12217: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12218: {
1.1.1.2   misho    12219:        USE_OPLINE
1.1       misho    12220:        zend_free_op free_op1;
                   12221: 
1.1.1.2   misho    12222:        SAVE_OPLINE();
                   12223:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   12224:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12225:                opline->op2.zv TSRMLS_CC);
1.1       misho    12226:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12227: 
1.1.1.2   misho    12228:        CHECK_EXCEPTION();
1.1       misho    12229:        ZEND_VM_NEXT_OPCODE();
                   12230: }
                   12231: 
                   12232: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12233: {
1.1.1.2   misho    12234:        USE_OPLINE
1.1       misho    12235:        zend_free_op free_op1;
                   12236: 
1.1.1.2   misho    12237:        SAVE_OPLINE();
                   12238:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   12239:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   12240:                opline->op2.zv TSRMLS_CC);
1.1       misho    12241:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12242: 
1.1.1.2   misho    12243:        CHECK_EXCEPTION();
1.1       misho    12244:        ZEND_VM_NEXT_OPCODE();
                   12245: }
                   12246: 
                   12247: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   12248: {
1.1.1.2   misho    12249:        USE_OPLINE
1.1       misho    12250:        zend_free_op free_op1, free_op_data1;
1.1.1.2   misho    12251:        zval **object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    12252:        zval *object;
1.1.1.2   misho    12253:        zval *property = opline->op2.zv;
                   12254:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    12255:        int have_get_ptr = 0;
                   12256: 
1.1.1.2   misho    12257:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    12258:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   12259:        }
                   12260: 
                   12261:        make_real_object(object_ptr TSRMLS_CC);
                   12262:        object = *object_ptr;
                   12263: 
1.1.1.2   misho    12264:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    12265:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   12266: 
                   12267:                FREE_OP(free_op_data1);
                   12268: 
1.1.1.2   misho    12269:                if (RETURN_VALUE_USED(opline)) {
                   12270:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   12271:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   12272:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    12273:                }
                   12274:        } else {
                   12275:                /* here we are sure we are dealing with an object */
                   12276:                if (0) {
                   12277:                        MAKE_REAL_ZVAL_PTR(property);
                   12278:                }
                   12279: 
                   12280:                /* here property is a string */
                   12281:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   12282:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    12283:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12284:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   12285:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   12286: 
                   12287:                                have_get_ptr = 1;
                   12288:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    12289:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    12290:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    12291:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   12292:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    12293:                                }
                   12294:                        }
                   12295:                }
                   12296: 
                   12297:                if (!have_get_ptr) {
                   12298:                        zval *z = NULL;
                   12299: 
                   12300:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   12301:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    12302:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12303:                                }
                   12304:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   12305:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   12306:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   12307:                                }
                   12308:                        }
                   12309:                        if (z) {
                   12310:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   12311:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   12312: 
                   12313:                                        if (Z_REFCOUNT_P(z) == 0) {
                   12314:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   12315:                                                zval_dtor(z);
                   12316:                                                FREE_ZVAL(z);
                   12317:                                        }
                   12318:                                        z = value;
                   12319:                                }
                   12320:                                Z_ADDREF_P(z);
                   12321:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   12322:                                binary_op(z, z, value TSRMLS_CC);
                   12323:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    12324:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12325:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   12326:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   12327:                                }
1.1.1.2   misho    12328:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    12329:                                        PZVAL_LOCK(z);
1.1.1.2   misho    12330:                                        EX_T(opline->result.var).var.ptr = z;
                   12331:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    12332:                                }
                   12333:                                zval_ptr_dtor(&z);
                   12334:                        } else {
                   12335:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    12336:                                if (RETURN_VALUE_USED(opline)) {
                   12337:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   12338:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   12339:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    12340:                                }
                   12341:                        }
                   12342:                }
                   12343: 
                   12344:                if (0) {
                   12345:                        zval_ptr_dtor(&property);
                   12346:                } else {
                   12347: 
                   12348:                }
                   12349:                FREE_OP(free_op_data1);
                   12350:        }
                   12351: 
                   12352:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12353:        /* assign_obj has two opcodes! */
1.1.1.2   misho    12354:        CHECK_EXCEPTION();
1.1       misho    12355:        ZEND_VM_INC_OPCODE();
                   12356:        ZEND_VM_NEXT_OPCODE();
                   12357: }
                   12358: 
                   12359: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   12360: {
1.1.1.2   misho    12361:        USE_OPLINE
1.1       misho    12362:        zend_free_op free_op1, free_op_data2, free_op_data1;
                   12363:        zval **var_ptr;
                   12364:        zval *value;
                   12365: 
1.1.1.2   misho    12366:        SAVE_OPLINE();
1.1       misho    12367:        switch (opline->extended_value) {
                   12368:                case ZEND_ASSIGN_OBJ:
                   12369:                        return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12370:                        break;
                   12371:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    12372:                                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    12373: 
1.1.1.2   misho    12374:                                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    12375:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    12376:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    12377:                                        if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
                   12378:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   12379:                                        }
                   12380:                                        return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12381:                                } else {
1.1.1.2   misho    12382:                                        zval *dim = opline->op2.zv;
1.1       misho    12383: 
1.1.1.2   misho    12384:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
                   12385:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   12386:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    12387:                                }
                   12388:                        }
                   12389:                        break;
                   12390:                default:
1.1.1.2   misho    12391:                        value = opline->op2.zv;
                   12392:                        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    12393:                        /* do nothing */
                   12394:                        break;
                   12395:        }
                   12396: 
1.1.1.2   misho    12397:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    12398:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   12399:        }
                   12400: 
1.1.1.2   misho    12401:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   12402:                if (RETURN_VALUE_USED(opline)) {
                   12403:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   12404:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    12405:                }
                   12406: 
                   12407:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12408:                CHECK_EXCEPTION();
                   12409:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   12410:                        ZEND_VM_INC_OPCODE();
                   12411:                }
1.1       misho    12412:                ZEND_VM_NEXT_OPCODE();
                   12413:        }
                   12414: 
                   12415:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   12416: 
1.1.1.2   misho    12417:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   12418:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    12419:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   12420:                /* proxy object */
                   12421:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   12422:                Z_ADDREF_P(objval);
                   12423:                binary_op(objval, objval, value TSRMLS_CC);
                   12424:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   12425:                zval_ptr_dtor(&objval);
                   12426:        } else {
                   12427:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   12428:        }
                   12429: 
1.1.1.2   misho    12430:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    12431:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    12432:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    12433:        }
                   12434: 
                   12435:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   12436:                FREE_OP(free_op_data1);
                   12437:                FREE_OP_VAR_PTR(free_op_data2);
1.1.1.2   misho    12438:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12439:                CHECK_EXCEPTION();
                   12440:                ZEND_VM_INC_OPCODE();
                   12441:        } else {
                   12442:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12443:                CHECK_EXCEPTION();
1.1       misho    12444:        }
                   12445:        ZEND_VM_NEXT_OPCODE();
                   12446: }
                   12447: 
                   12448: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12449: {
                   12450:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12451: }
                   12452: 
                   12453: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12454: {
                   12455:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12456: }
                   12457: 
                   12458: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12459: {
                   12460:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12461: }
                   12462: 
                   12463: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12464: {
                   12465:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12466: }
                   12467: 
                   12468: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12469: {
                   12470:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12471: }
                   12472: 
                   12473: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12474: {
                   12475:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12476: }
                   12477: 
                   12478: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12479: {
                   12480:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12481: }
                   12482: 
                   12483: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12484: {
                   12485:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12486: }
                   12487: 
                   12488: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12489: {
                   12490:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12491: }
                   12492: 
                   12493: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12494: {
                   12495:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12496: }
                   12497: 
                   12498: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12499: {
                   12500:        return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12501: }
                   12502: 
                   12503: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   12504: {
1.1.1.2   misho    12505:        USE_OPLINE
1.1       misho    12506:        zend_free_op free_op1;
1.1.1.2   misho    12507:        zval **object_ptr;
1.1       misho    12508:        zval *object;
1.1.1.2   misho    12509:        zval *property;
                   12510:        zval **retval;
1.1       misho    12511:        int have_get_ptr = 0;
                   12512: 
1.1.1.2   misho    12513:        SAVE_OPLINE();
                   12514:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   12515:        property = opline->op2.zv;
                   12516:        retval = &EX_T(opline->result.var).var.ptr;
                   12517: 
                   12518:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    12519:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   12520:        }
                   12521: 
                   12522:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   12523:        object = *object_ptr;
                   12524: 
1.1.1.2   misho    12525:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    12526:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   12527: 
1.1.1.2   misho    12528:                if (RETURN_VALUE_USED(opline)) {
                   12529:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   12530:                        *retval = &EG(uninitialized_zval);
1.1       misho    12531:                }
                   12532:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12533:                CHECK_EXCEPTION();
1.1       misho    12534:                ZEND_VM_NEXT_OPCODE();
                   12535:        }
                   12536: 
                   12537:        /* here we are sure we are dealing with an object */
                   12538: 
                   12539:        if (0) {
                   12540:                MAKE_REAL_ZVAL_PTR(property);
                   12541:        }
                   12542: 
                   12543:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    12544:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12545:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   12546:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   12547: 
                   12548:                        have_get_ptr = 1;
                   12549:                        incdec_op(*zptr);
1.1.1.2   misho    12550:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    12551:                                *retval = *zptr;
                   12552:                                PZVAL_LOCK(*retval);
                   12553:                        }
                   12554:                }
                   12555:        }
                   12556: 
                   12557:        if (!have_get_ptr) {
                   12558:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    12559:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12560: 
1.1.1.2   misho    12561:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    12562:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   12563: 
                   12564:                                if (Z_REFCOUNT_P(z) == 0) {
                   12565:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   12566:                                        zval_dtor(z);
                   12567:                                        FREE_ZVAL(z);
                   12568:                                }
                   12569:                                z = value;
                   12570:                        }
                   12571:                        Z_ADDREF_P(z);
                   12572:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   12573:                        incdec_op(z);
                   12574:                        *retval = z;
1.1.1.2   misho    12575:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   12576:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    12577:                        zval_ptr_dtor(&z);
                   12578:                } else {
                   12579:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    12580:                        if (RETURN_VALUE_USED(opline)) {
                   12581:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   12582:                                *retval = &EG(uninitialized_zval);
1.1       misho    12583:                        }
                   12584:                }
                   12585:        }
                   12586: 
                   12587:        if (0) {
                   12588:                zval_ptr_dtor(&property);
                   12589:        } else {
                   12590: 
                   12591:        }
                   12592:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12593:        CHECK_EXCEPTION();
1.1       misho    12594:        ZEND_VM_NEXT_OPCODE();
                   12595: }
                   12596: 
                   12597: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12598: {
                   12599:        return zend_pre_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12600: }
                   12601: 
                   12602: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12603: {
                   12604:        return zend_pre_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12605: }
                   12606: 
                   12607: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   12608: {
1.1.1.2   misho    12609:        USE_OPLINE
1.1       misho    12610:        zend_free_op free_op1;
1.1.1.2   misho    12611:        zval **object_ptr;
1.1       misho    12612:        zval *object;
1.1.1.2   misho    12613:        zval *property;
                   12614:        zval *retval;
1.1       misho    12615:        int have_get_ptr = 0;
                   12616: 
1.1.1.2   misho    12617:        SAVE_OPLINE();
                   12618:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   12619:        property = opline->op2.zv;
                   12620:        retval = &EX_T(opline->result.var).tmp_var;
                   12621: 
                   12622:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    12623:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   12624:        }
                   12625: 
                   12626:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   12627:        object = *object_ptr;
                   12628: 
1.1.1.2   misho    12629:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    12630:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   12631: 
1.1.1.2   misho    12632:                ZVAL_NULL(retval);
1.1       misho    12633:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12634:                CHECK_EXCEPTION();
1.1       misho    12635:                ZEND_VM_NEXT_OPCODE();
                   12636:        }
                   12637: 
                   12638:        /* here we are sure we are dealing with an object */
                   12639: 
                   12640:        if (0) {
                   12641:                MAKE_REAL_ZVAL_PTR(property);
                   12642:        }
                   12643: 
                   12644:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    12645:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12646:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   12647:                        have_get_ptr = 1;
                   12648:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   12649: 
1.1.1.2   misho    12650:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    12651:                        zendi_zval_copy_ctor(*retval);
                   12652: 
                   12653:                        incdec_op(*zptr);
                   12654: 
                   12655:                }
                   12656:        }
                   12657: 
                   12658:        if (!have_get_ptr) {
                   12659:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    12660:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12661:                        zval *z_copy;
                   12662: 
1.1.1.2   misho    12663:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    12664:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   12665: 
                   12666:                                if (Z_REFCOUNT_P(z) == 0) {
                   12667:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   12668:                                        zval_dtor(z);
                   12669:                                        FREE_ZVAL(z);
                   12670:                                }
                   12671:                                z = value;
                   12672:                        }
1.1.1.2   misho    12673:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    12674:                        zendi_zval_copy_ctor(*retval);
                   12675:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    12676:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    12677:                        zendi_zval_copy_ctor(*z_copy);
                   12678:                        incdec_op(z_copy);
                   12679:                        Z_ADDREF_P(z);
1.1.1.2   misho    12680:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    12681:                        zval_ptr_dtor(&z_copy);
                   12682:                        zval_ptr_dtor(&z);
                   12683:                } else {
                   12684:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    12685:                        ZVAL_NULL(retval);
                   12686:                }
                   12687:        }
                   12688: 
                   12689:        if (0) {
                   12690:                zval_ptr_dtor(&property);
                   12691:        } else {
                   12692: 
                   12693:        }
                   12694:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12695:        CHECK_EXCEPTION();
                   12696:        ZEND_VM_NEXT_OPCODE();
                   12697: }
                   12698: 
                   12699: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12700: {
                   12701:        return zend_post_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12702: }
                   12703: 
                   12704: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12705: {
                   12706:        return zend_post_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12707: }
                   12708: 
                   12709: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
                   12710: {
                   12711:        USE_OPLINE
                   12712:        zend_free_op free_op1;
                   12713:        zval *varname;
                   12714:        zval **retval;
                   12715:        zval tmp_varname;
                   12716:        HashTable *target_symbol_table;
                   12717:        ulong hash_value;
                   12718: 
                   12719:        SAVE_OPLINE();
                   12720:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   12721: 
                   12722:        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   12723:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   12724:                zval_copy_ctor(&tmp_varname);
                   12725:                Z_SET_REFCOUNT(tmp_varname, 1);
                   12726:                Z_UNSET_ISREF(tmp_varname);
                   12727:                convert_to_string(&tmp_varname);
                   12728:                varname = &tmp_varname;
                   12729:        }
                   12730: 
                   12731:        if (IS_CONST != IS_UNUSED) {
                   12732:                zend_class_entry *ce;
                   12733: 
                   12734:                if (IS_CONST == IS_CONST) {
                   12735:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   12736:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   12737:                        } else {
                   12738:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   12739:                                if (UNEXPECTED(ce == NULL)) {
                   12740:                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   12741:                                                zval_dtor(&tmp_varname);
                   12742:                                        }
                   12743:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12744:                                        CHECK_EXCEPTION();
                   12745:                                        ZEND_VM_NEXT_OPCODE();
                   12746:                                }
                   12747:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   12748:                        }
                   12749:                } else {
                   12750:                        ce = EX_T(opline->op2.var).class_entry;
                   12751:                }
                   12752:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   12753:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12754:        } else {
                   12755:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   12756: /*
                   12757:                if (!target_symbol_table) {
                   12758:                        CHECK_EXCEPTION();
                   12759:                        ZEND_VM_NEXT_OPCODE();
                   12760:                }
                   12761: */
                   12762:                if (IS_VAR == IS_CONST) {
                   12763:                        hash_value = Z_HASH_P(varname);
                   12764:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   12765:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   12766:                } else {
                   12767:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   12768:                }
                   12769: 
                   12770:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   12771:                        switch (type) {
                   12772:                                case BP_VAR_R:
                   12773:                                case BP_VAR_UNSET:
                   12774:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   12775:                                        /* break missing intentionally */
                   12776:                                case BP_VAR_IS:
                   12777:                                        retval = &EG(uninitialized_zval_ptr);
                   12778:                                        break;
                   12779:                                case BP_VAR_RW:
                   12780:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   12781:                                        /* break missing intentionally */
                   12782:                                case BP_VAR_W:
                   12783:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   12784:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   12785:                                        break;
                   12786:                                EMPTY_SWITCH_DEFAULT_CASE()
                   12787:                        }
                   12788:                }
                   12789:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   12790:                        case ZEND_FETCH_GLOBAL:
                   12791:                                if (IS_VAR != IS_TMP_VAR) {
                   12792:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12793:                                }
                   12794:                                break;
                   12795:                        case ZEND_FETCH_LOCAL:
                   12796:                                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12797:                                break;
                   12798:                        case ZEND_FETCH_STATIC:
                   12799:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   12800:                                break;
                   12801:                        case ZEND_FETCH_GLOBAL_LOCK:
                   12802:                                if (IS_VAR == IS_VAR && !free_op1.var) {
                   12803:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   12804:                                }
                   12805:                                break;
                   12806:                }
                   12807:        }
                   12808: 
                   12809: 
                   12810:        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   12811:                zval_dtor(&tmp_varname);
                   12812:        }
                   12813:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   12814:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   12815:        }
                   12816:        PZVAL_LOCK(*retval);
                   12817:        switch (type) {
                   12818:                case BP_VAR_R:
                   12819:                case BP_VAR_IS:
                   12820:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   12821:                        break;
                   12822:                case BP_VAR_UNSET: {
                   12823:                        zend_free_op free_res;
                   12824: 
                   12825:                        PZVAL_UNLOCK(*retval, &free_res);
                   12826:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   12827:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   12828:                        }
                   12829:                        PZVAL_LOCK(*retval);
                   12830:                        FREE_OP_VAR_PTR(free_res);
1.1       misho    12831:                }
1.1.1.2   misho    12832:                /* break missing intentionally */
                   12833:                default:
                   12834:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   12835:                        break;
1.1       misho    12836:        }
1.1.1.2   misho    12837:        CHECK_EXCEPTION();
                   12838:        ZEND_VM_NEXT_OPCODE();
                   12839: }
                   12840: 
                   12841: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12842: {
                   12843:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12844: }
1.1       misho    12845: 
1.1.1.2   misho    12846: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12847: {
                   12848:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12849: }
1.1       misho    12850: 
1.1.1.2   misho    12851: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12852: {
                   12853:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    12854: }
                   12855: 
1.1.1.2   misho    12856: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    12857: {
1.1.1.2   misho    12858:        USE_OPLINE
                   12859: 
                   12860:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    12861: }
                   12862: 
1.1.1.2   misho    12863: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    12864: {
1.1.1.2   misho    12865:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   12866: }
                   12867: 
                   12868: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12869: {
                   12870:        return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    12871: }
                   12872: 
                   12873: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12874: {
1.1.1.2   misho    12875:        USE_OPLINE
1.1       misho    12876:        zend_free_op free_op1;
1.1.1.5 ! misho    12877:        zval *container;
1.1       misho    12878: 
1.1.1.2   misho    12879:        SAVE_OPLINE();
                   12880: 
1.1.1.5 ! misho    12881:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          12882:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    12883:        }
1.1.1.5 ! misho    12884:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    12885:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
1.1       misho    12886: 
                   12887:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12888:        CHECK_EXCEPTION();
1.1       misho    12889:        ZEND_VM_NEXT_OPCODE();
                   12890: }
                   12891: 
                   12892: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12893: {
1.1.1.2   misho    12894:        USE_OPLINE
1.1       misho    12895:        zend_free_op free_op1;
1.1.1.2   misho    12896:        zval **container;
                   12897: 
                   12898:        SAVE_OPLINE();
                   12899:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    12900: 
1.1.1.2   misho    12901:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    12902:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   12903:        }
1.1.1.2   misho    12904:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
1.1       misho    12905: 
1.1.1.2   misho    12906:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   12907:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    12908:        }
                   12909:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   12910: 
                   12911:        /* We are going to assign the result by reference */
1.1.1.2   misho    12912:        if (UNEXPECTED(opline->extended_value != 0)) {
                   12913:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   12914: 
                   12915:                if (retval_ptr) {
                   12916:                        Z_DELREF_PP(retval_ptr);
                   12917:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   12918:                        Z_ADDREF_PP(retval_ptr);
                   12919:                }
1.1       misho    12920:        }
                   12921: 
1.1.1.2   misho    12922:        CHECK_EXCEPTION();
1.1       misho    12923:        ZEND_VM_NEXT_OPCODE();
                   12924: }
                   12925: 
                   12926: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12927: {
1.1.1.2   misho    12928:        USE_OPLINE
1.1       misho    12929:        zend_free_op free_op1;
1.1.1.2   misho    12930:        zval **container;
1.1       misho    12931: 
1.1.1.2   misho    12932:        SAVE_OPLINE();
                   12933:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   12934: 
                   12935:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    12936:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   12937:        }
1.1.1.2   misho    12938:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_RW TSRMLS_CC);
1.1       misho    12939: 
1.1.1.2   misho    12940:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   12941:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    12942:        }
                   12943:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12944:        CHECK_EXCEPTION();
1.1       misho    12945:        ZEND_VM_NEXT_OPCODE();
                   12946: }
                   12947: 
                   12948: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12949: {
1.1.1.2   misho    12950:        USE_OPLINE
1.1       misho    12951:        zend_free_op free_op1;
1.1.1.5 ! misho    12952:        zval *container;
1.1       misho    12953: 
1.1.1.2   misho    12954:        SAVE_OPLINE();
1.1.1.5 ! misho    12955:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    12956:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_IS TSRMLS_CC);
1.1       misho    12957: 
                   12958:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    12959:        CHECK_EXCEPTION();
1.1       misho    12960:        ZEND_VM_NEXT_OPCODE();
                   12961: }
                   12962: 
                   12963: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12964: {
1.1.1.2   misho    12965:        USE_OPLINE
1.1       misho    12966:        zend_free_op free_op1;
                   12967: 
1.1.1.2   misho    12968:        SAVE_OPLINE();
                   12969: 
                   12970:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    12971:                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
        !          12972: 
1.1.1.2   misho    12973:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    12974:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   12975:                }
1.1.1.2   misho    12976:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
                   12977:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   12978:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    12979:                }
1.1.1.5 ! misho    12980: 
        !          12981:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    12982:        } else {
1.1.1.5 ! misho    12983:                zval *container;
        !          12984: 
1.1       misho    12985:                if (IS_CONST == IS_UNUSED) {
                   12986:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   12987:                }
1.1.1.5 ! misho    12988:                container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    12989:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
1.1       misho    12990: 
1.1.1.5 ! misho    12991:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        !          12992:        }
1.1.1.2   misho    12993:        CHECK_EXCEPTION();
1.1       misho    12994:        ZEND_VM_NEXT_OPCODE();
                   12995: }
                   12996: 
                   12997: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   12998: {
1.1.1.2   misho    12999:        USE_OPLINE
1.1       misho    13000:        zend_free_op free_op1;
1.1.1.2   misho    13001:        zval **container;
                   13002: 
                   13003:        SAVE_OPLINE();
                   13004:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13005: 
                   13006:        if (IS_VAR == IS_CV) {
                   13007:                if (container != &EG(uninitialized_zval_ptr)) {
                   13008:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   13009:                }
                   13010:        }
1.1.1.2   misho    13011:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    13012:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   13013:        }
1.1.1.2   misho    13014:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    13015: 
1.1.1.2   misho    13016:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   13017:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    13018:        }
                   13019:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    13020:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    13021:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   13022:        } else {
                   13023:                zend_free_op free_res;
1.1.1.2   misho    13024:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    13025: 
1.1.1.2   misho    13026:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   13027:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   13028:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    13029:                }
1.1.1.2   misho    13030:                PZVAL_LOCK(*retval_ptr);
1.1       misho    13031:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    13032:                CHECK_EXCEPTION();
                   13033:                ZEND_VM_NEXT_OPCODE();
1.1       misho    13034:        }
                   13035: }
                   13036: 
1.1.1.2   misho    13037: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_CONST(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    13038: {
1.1.1.2   misho    13039:        USE_OPLINE
1.1       misho    13040:        zend_free_op free_op1;
1.1.1.2   misho    13041:        zval *container;
1.1       misho    13042: 
1.1.1.2   misho    13043:        zval *offset;
1.1       misho    13044: 
1.1.1.2   misho    13045:        SAVE_OPLINE();
                   13046:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13047:        offset  = opline->op2.zv;
                   13048: 
                   13049:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   13050:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   13051:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   13052:                PZVAL_LOCK(&EG(uninitialized_zval));
                   13053:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    13054: 
                   13055:        } else {
                   13056:                zval *retval;
                   13057: 
                   13058:                if (0) {
                   13059:                        MAKE_REAL_ZVAL_PTR(offset);
                   13060:                }
                   13061: 
                   13062:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    13063:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    13064: 
1.1.1.2   misho    13065:                PZVAL_LOCK(retval);
                   13066:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    13067: 
                   13068:                if (0) {
                   13069:                        zval_ptr_dtor(&offset);
                   13070:                } else {
                   13071: 
                   13072:                }
                   13073:        }
                   13074: 
                   13075:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    13076:        CHECK_EXCEPTION();
1.1       misho    13077:        ZEND_VM_NEXT_OPCODE();
                   13078: }
                   13079: 
                   13080: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13081: {
1.1.1.2   misho    13082:        return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    13083: }
                   13084: 
                   13085: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13086: {
1.1.1.2   misho    13087:        USE_OPLINE
1.1       misho    13088:        zend_free_op free_op1;
1.1.1.2   misho    13089:        zval *property;
1.1       misho    13090:        zval **container;
                   13091: 
1.1.1.2   misho    13092:        SAVE_OPLINE();
                   13093:        property = opline->op2.zv;
                   13094: 
1.1       misho    13095:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    13096:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   13097:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    13098:        }
                   13099: 
                   13100:        if (0) {
                   13101:                MAKE_REAL_ZVAL_PTR(property);
                   13102:        }
1.1.1.2   misho    13103:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13104:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    13105:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   13106:        }
1.1.1.2   misho    13107: 
                   13108:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    13109:        if (0) {
                   13110:                zval_ptr_dtor(&property);
                   13111:        } else {
                   13112: 
                   13113:        }
1.1.1.2   misho    13114:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   13115:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    13116:        }
                   13117:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13118: 
                   13119:        /* We are going to assign the result by reference */
                   13120:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    13121:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   13122: 
                   13123:                Z_DELREF_PP(retval_ptr);
                   13124:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   13125:                Z_ADDREF_PP(retval_ptr);
                   13126:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   13127:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    13128:        }
                   13129: 
1.1.1.2   misho    13130:        CHECK_EXCEPTION();
1.1       misho    13131:        ZEND_VM_NEXT_OPCODE();
                   13132: }
                   13133: 
                   13134: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13135: {
1.1.1.2   misho    13136:        USE_OPLINE
1.1       misho    13137:        zend_free_op free_op1;
1.1.1.2   misho    13138:        zval *property;
                   13139:        zval **container;
                   13140: 
                   13141:        SAVE_OPLINE();
                   13142:        property = opline->op2.zv;
                   13143:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13144: 
                   13145:        if (0) {
                   13146:                MAKE_REAL_ZVAL_PTR(property);
                   13147:        }
1.1.1.2   misho    13148:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    13149:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   13150:        }
1.1.1.2   misho    13151:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    13152:        if (0) {
                   13153:                zval_ptr_dtor(&property);
                   13154:        } else {
                   13155: 
                   13156:        }
1.1.1.2   misho    13157:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   13158:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    13159:        }
                   13160:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    13161:        CHECK_EXCEPTION();
1.1       misho    13162:        ZEND_VM_NEXT_OPCODE();
                   13163: }
                   13164: 
                   13165: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13166: {
1.1.1.2   misho    13167:        USE_OPLINE
                   13168:        zend_free_op free_op1;
                   13169:        zval *container;
                   13170: 
                   13171:        zval *offset;
                   13172: 
                   13173:        SAVE_OPLINE();
                   13174:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13175:        offset  = opline->op2.zv;
                   13176: 
                   13177:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   13178:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   13179:                PZVAL_LOCK(&EG(uninitialized_zval));
                   13180:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   13181: 
                   13182:        } else {
                   13183:                zval *retval;
                   13184: 
                   13185:                if (0) {
                   13186:                        MAKE_REAL_ZVAL_PTR(offset);
                   13187:                }
                   13188: 
                   13189:                /* here we are sure we are dealing with an object */
                   13190:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   13191: 
                   13192:                PZVAL_LOCK(retval);
                   13193:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   13194: 
                   13195:                if (0) {
                   13196:                        zval_ptr_dtor(&offset);
                   13197:                } else {
                   13198: 
                   13199:                }
                   13200:        }
                   13201: 
                   13202:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13203:        CHECK_EXCEPTION();
                   13204:        ZEND_VM_NEXT_OPCODE();
1.1       misho    13205: }
                   13206: 
                   13207: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13208: {
1.1.1.2   misho    13209:        USE_OPLINE
1.1       misho    13210: 
1.1.1.2   misho    13211:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    13212:                /* Behave like FETCH_OBJ_W */
                   13213:                zend_free_op free_op1;
1.1.1.2   misho    13214:                zval *property;
                   13215:                zval **container;
                   13216: 
                   13217:                SAVE_OPLINE();
                   13218:                property = opline->op2.zv;
                   13219:                container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13220: 
                   13221:                if (0) {
                   13222:                        MAKE_REAL_ZVAL_PTR(property);
                   13223:                }
1.1.1.2   misho    13224:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    13225:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   13226:                }
1.1.1.2   misho    13227:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    13228:                if (0) {
                   13229:                        zval_ptr_dtor(&property);
                   13230:                } else {
                   13231: 
                   13232:                }
1.1.1.2   misho    13233:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   13234:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    13235:                }
                   13236:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    13237:                CHECK_EXCEPTION();
1.1       misho    13238:                ZEND_VM_NEXT_OPCODE();
                   13239:        } else {
1.1.1.2   misho    13240:                return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    13241:        }
                   13242: }
                   13243: 
                   13244: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13245: {
1.1.1.2   misho    13246:        USE_OPLINE
1.1       misho    13247:        zend_free_op free_op1, free_res;
1.1.1.2   misho    13248:        zval **container;
                   13249:        zval *property;
                   13250: 
                   13251:        SAVE_OPLINE();
                   13252:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13253:        property = opline->op2.zv;
1.1       misho    13254: 
                   13255:        if (IS_VAR == IS_CV) {
                   13256:                if (container != &EG(uninitialized_zval_ptr)) {
                   13257:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   13258:                }
                   13259:        }
                   13260:        if (0) {
                   13261:                MAKE_REAL_ZVAL_PTR(property);
                   13262:        }
1.1.1.2   misho    13263:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    13264:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   13265:        }
1.1.1.2   misho    13266:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    13267:        if (0) {
                   13268:                zval_ptr_dtor(&property);
                   13269:        } else {
                   13270: 
                   13271:        }
1.1.1.2   misho    13272:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   13273:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    13274:        }
                   13275:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13276: 
1.1.1.2   misho    13277:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   13278:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   13279:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    13280:        }
1.1.1.2   misho    13281:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    13282:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    13283:        CHECK_EXCEPTION();
1.1       misho    13284:        ZEND_VM_NEXT_OPCODE();
                   13285: }
                   13286: 
                   13287: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13288: {
1.1.1.2   misho    13289:        USE_OPLINE
1.1       misho    13290:        zend_free_op free_op1;
1.1.1.2   misho    13291:        zval **object_ptr;
                   13292:        zval *property_name;
                   13293: 
                   13294:        SAVE_OPLINE();
                   13295:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13296:        property_name = opline->op2.zv;
1.1       misho    13297: 
                   13298:        if (0) {
                   13299:                MAKE_REAL_ZVAL_PTR(property_name);
                   13300:        }
1.1.1.2   misho    13301:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    13302:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   13303:        }
1.1.1.2   misho    13304:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    13305:        if (0) {
                   13306:                zval_ptr_dtor(&property_name);
                   13307:        } else {
                   13308: 
                   13309:        }
                   13310:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13311:        /* assign_obj has two opcodes! */
1.1.1.2   misho    13312:        CHECK_EXCEPTION();
1.1       misho    13313:        ZEND_VM_INC_OPCODE();
                   13314:        ZEND_VM_NEXT_OPCODE();
                   13315: }
                   13316: 
                   13317: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13318: {
1.1.1.2   misho    13319:        USE_OPLINE
1.1       misho    13320:        zend_free_op free_op1;
1.1.1.2   misho    13321:        zval **object_ptr;
1.1       misho    13322: 
1.1.1.2   misho    13323:        SAVE_OPLINE();
                   13324:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13325: 
                   13326:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    13327:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   13328:        }
                   13329:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   13330: 
1.1.1.2   misho    13331:                zval *property_name = opline->op2.zv;
1.1       misho    13332: 
                   13333:                if (0) {
                   13334:                        MAKE_REAL_ZVAL_PTR(property_name);
                   13335:                }
1.1.1.2   misho    13336:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    13337:                if (0) {
                   13338:                        zval_ptr_dtor(&property_name);
                   13339:                } else {
                   13340: 
                   13341:                }
                   13342:        } else {
                   13343:                zend_free_op free_op_data1, free_op_data2;
                   13344:                zval *value;
1.1.1.2   misho    13345:                zval *dim = opline->op2.zv;
1.1       misho    13346:                zval **variable_ptr_ptr;
                   13347: 
1.1.1.2   misho    13348:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_CONST, BP_VAR_W TSRMLS_CC);
                   13349: 
                   13350:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   13351:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   13352:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   13353:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   13354:                                if (RETURN_VALUE_USED(opline)) {
                   13355:                                        zval *retval;
1.1       misho    13356: 
1.1.1.2   misho    13357:                                        ALLOC_ZVAL(retval);
                   13358:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   13359:                                        INIT_PZVAL(retval);
                   13360:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   13361:                                }
                   13362:                        } else if (RETURN_VALUE_USED(opline)) {
                   13363:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   13364:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   13365:                        }
                   13366:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   13367:                        if (IS_TMP_FREE(free_op_data1)) {
                   13368:                                zval_dtor(value);
                   13369:                        }
                   13370:                        if (RETURN_VALUE_USED(opline)) {
                   13371:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   13372:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   13373:                        }
                   13374:                } else {
                   13375:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   13376:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13377:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   13378:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13379:                        } else {
                   13380:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13381:                        }
                   13382:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    13383:                                PZVAL_LOCK(value);
1.1.1.2   misho    13384:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    13385:                        }
                   13386:                }
                   13387:                FREE_OP_VAR_PTR(free_op_data2);
                   13388:                FREE_OP_IF_VAR(free_op_data1);
                   13389:        }
                   13390:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13391:        /* assign_dim has two opcodes! */
1.1.1.2   misho    13392:        CHECK_EXCEPTION();
1.1       misho    13393:        ZEND_VM_INC_OPCODE();
                   13394:        ZEND_VM_NEXT_OPCODE();
                   13395: }
                   13396: 
                   13397: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13398: {
1.1.1.2   misho    13399:        USE_OPLINE
1.1       misho    13400:        zend_free_op free_op1;
1.1.1.2   misho    13401:        zval *value;
                   13402:        zval **variable_ptr_ptr;
1.1       misho    13403: 
1.1.1.2   misho    13404:        SAVE_OPLINE();
                   13405:        value = opline->op2.zv;
                   13406:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13407: 
                   13408:        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   13409:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_CONST TSRMLS_CC)) {
                   13410:                        if (RETURN_VALUE_USED(opline)) {
                   13411:                                zval *retval;
                   13412: 
                   13413:                                ALLOC_ZVAL(retval);
                   13414:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   13415:                                INIT_PZVAL(retval);
                   13416:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   13417:                        }
                   13418:                } else if (RETURN_VALUE_USED(opline)) {
                   13419:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   13420:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   13421:                }
                   13422:        } else if (IS_VAR == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   13423:                if (0) {
                   13424:                        zval_dtor(value);
                   13425:                }
                   13426:                if (RETURN_VALUE_USED(opline)) {
                   13427:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   13428:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   13429:                }
                   13430:        } else {
                   13431:                if (IS_CONST == IS_TMP_VAR) {
                   13432:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13433:                } else if (IS_CONST == IS_CONST) {
                   13434:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13435:                } else {
                   13436:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   13437:                }
                   13438:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    13439:                        PZVAL_LOCK(value);
1.1.1.2   misho    13440:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    13441:                }
                   13442:        }
                   13443: 
                   13444:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13445: 
                   13446:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   13447: 
1.1.1.2   misho    13448:        CHECK_EXCEPTION();
1.1       misho    13449:        ZEND_VM_NEXT_OPCODE();
                   13450: }
                   13451: 
                   13452: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13453: {
1.1.1.2   misho    13454:        USE_OPLINE
1.1       misho    13455:        zval *function_name;
                   13456:        char *function_name_strval;
                   13457:        int function_name_strlen;
                   13458:        zend_free_op free_op1;
                   13459: 
1.1.1.2   misho    13460:        SAVE_OPLINE();
1.1       misho    13461:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   13462: 
1.1.1.2   misho    13463:        function_name = opline->op2.zv;
1.1       misho    13464: 
1.1.1.2   misho    13465:        if (IS_CONST != IS_CONST &&
                   13466:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    13467:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   13468:        }
                   13469: 
                   13470:        function_name_strval = Z_STRVAL_P(function_name);
                   13471:        function_name_strlen = Z_STRLEN_P(function_name);
                   13472: 
1.1.1.2   misho    13473:        EX(object) = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13474: 
1.1.1.2   misho    13475:        if (EXPECTED(EX(object) != NULL) &&
                   13476:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   13477:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    13478: 
1.1.1.2   misho    13479:                if (IS_CONST != IS_CONST ||
                   13480:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   13481:                    zval *object = EX(object);
                   13482: 
                   13483:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   13484:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   13485:                        }
                   13486: 
                   13487:                        /* First, locate the function. */
                   13488:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   13489:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   13490:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   13491:                        }
                   13492:                        if (IS_CONST == IS_CONST &&
                   13493:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   13494:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   13495:                            EXPECTED(EX(object) == object)) {
                   13496:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   13497:                        }
1.1       misho    13498:                }
                   13499:        } else {
                   13500:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   13501:        }
                   13502: 
                   13503:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   13504:                EX(object) = NULL;
                   13505:        } else {
                   13506:                if (!PZVAL_IS_REF(EX(object))) {
                   13507:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   13508:                } else {
                   13509:                        zval *this_ptr;
                   13510:                        ALLOC_ZVAL(this_ptr);
                   13511:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   13512:                        zval_copy_ctor(this_ptr);
                   13513:                        EX(object) = this_ptr;
                   13514:                }
                   13515:        }
                   13516: 
                   13517:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13518: 
1.1.1.2   misho    13519:        CHECK_EXCEPTION();
1.1       misho    13520:        ZEND_VM_NEXT_OPCODE();
                   13521: }
                   13522: 
                   13523: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13524: {
1.1.1.2   misho    13525:        USE_OPLINE
1.1       misho    13526:        zval *function_name;
                   13527:        zend_class_entry *ce;
                   13528: 
1.1.1.2   misho    13529:        SAVE_OPLINE();
1.1       misho    13530:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   13531: 
                   13532:        if (IS_VAR == IS_CONST) {
                   13533:                /* no function found. try a static method in class */
1.1.1.2   misho    13534:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   13535:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   13536:                } else {
                   13537:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    13538:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   13539:                                HANDLE_EXCEPTION();
                   13540:                        }
1.1.1.2   misho    13541:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    13542:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    13543:                        }
                   13544:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    13545:                }
                   13546:                EX(called_scope) = ce;
                   13547:        } else {
1.1.1.2   misho    13548:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    13549: 
1.1.1.2   misho    13550:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    13551:                        EX(called_scope) = EG(called_scope);
                   13552:                } else {
                   13553:                        EX(called_scope) = ce;
                   13554:                }
                   13555:        }
1.1.1.2   misho    13556: 
                   13557:        if (IS_VAR == IS_CONST &&
                   13558:            IS_CONST == IS_CONST &&
                   13559:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   13560:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   13561:        } else if (IS_VAR != IS_CONST &&
                   13562:                   IS_CONST == IS_CONST &&
                   13563:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   13564:                /* do nothing */
                   13565:        } else if (IS_CONST != IS_UNUSED) {
1.1       misho    13566:                char *function_name_strval = NULL;
                   13567:                int function_name_strlen = 0;
                   13568: 
                   13569: 
                   13570:                if (IS_CONST == IS_CONST) {
1.1.1.2   misho    13571:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   13572:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    13573:                } else {
1.1.1.2   misho    13574:                        function_name = opline->op2.zv;
1.1       misho    13575: 
1.1.1.2   misho    13576:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    13577:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   13578:                        } else {
                   13579:                                function_name_strval = Z_STRVAL_P(function_name);
                   13580:                                function_name_strlen = Z_STRLEN_P(function_name);
                   13581:                        }
                   13582:                }
                   13583: 
                   13584:                if (function_name_strval) {
                   13585:                        if (ce->get_static_method) {
                   13586:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   13587:                        } else {
1.1.1.2   misho    13588:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    13589:                        }
1.1.1.2   misho    13590:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    13591:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   13592:                        }
1.1.1.2   misho    13593:                        if (IS_CONST == IS_CONST &&
                   13594:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   13595:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   13596:                                if (IS_VAR == IS_CONST) {
                   13597:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   13598:                                } else {
                   13599:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   13600:                                }
                   13601:                        }
1.1       misho    13602:                }
                   13603:                if (IS_CONST != IS_CONST) {
                   13604: 
                   13605:                }
                   13606:        } else {
1.1.1.2   misho    13607:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    13608:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   13609:                }
                   13610:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    13611:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    13612:                }
                   13613:                EX(fbc) = ce->constructor;
                   13614:        }
                   13615: 
                   13616:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   13617:                EX(object) = NULL;
                   13618:        } else {
                   13619:                if (EG(This) &&
                   13620:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   13621:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   13622:                    /* We are calling method of the other (incompatible) class,
                   13623:                       but passing $this. This is done for compatibility with php-4. */
                   13624:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    13625:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    13626:                        } else {
                   13627:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    13628:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    13629:                        }
                   13630:                }
                   13631:                if ((EX(object) = EG(This))) {
                   13632:                        Z_ADDREF_P(EX(object));
                   13633:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   13634:                }
                   13635:        }
                   13636: 
1.1.1.2   misho    13637:        CHECK_EXCEPTION();
1.1       misho    13638:        ZEND_VM_NEXT_OPCODE();
                   13639: }
                   13640: 
                   13641: static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13642: {
1.1.1.2   misho    13643:        USE_OPLINE
1.1       misho    13644:        zend_free_op free_op1;
                   13645: 
1.1.1.2   misho    13646:        SAVE_OPLINE();
1.1       misho    13647:        if (IS_VAR==IS_VAR) {
1.1.1.2   misho    13648:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    13649:        }
1.1.1.2   misho    13650:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   13651:                                 _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   13652:                                 opline->op2.zv TSRMLS_CC);
                   13653: 
                   13654:        CHECK_EXCEPTION();
1.1       misho    13655:        ZEND_VM_NEXT_OPCODE();
                   13656: }
                   13657: 
                   13658: static int ZEND_FASTCALL  ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13659: {
1.1.1.2   misho    13660:        USE_OPLINE
1.1       misho    13661: 
1.1.1.2   misho    13662:        SAVE_OPLINE();
1.1       misho    13663:        if (IS_VAR == IS_UNUSED) {
1.1.1.2   misho    13664:                zend_constant *c;
                   13665:                zval *retval;
                   13666: 
                   13667:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   13668:                        c = CACHED_PTR(opline->op2.literal->cache_slot);
                   13669:                } else if ((c = zend_quick_get_constant(opline->op2.literal + 1, opline->extended_value TSRMLS_CC)) == NULL) {
1.1       misho    13670:                        if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
1.1.1.2   misho    13671:                                char *actual = (char *)zend_memrchr(Z_STRVAL_P(opline->op2.zv), '\\', Z_STRLEN_P(opline->op2.zv));
1.1       misho    13672:                                if(!actual) {
1.1.1.2   misho    13673:                                        actual = Z_STRVAL_P(opline->op2.zv);
1.1       misho    13674:                                } else {
                   13675:                                        actual++;
                   13676:                                }
                   13677:                                /* non-qualified constant - allow text substitution */
                   13678:                                zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual);
1.1.1.2   misho    13679:                                ZVAL_STRINGL(&EX_T(opline->result.var).tmp_var, actual, Z_STRLEN_P(opline->op2.zv)-(actual - Z_STRVAL_P(opline->op2.zv)), 1);
                   13680:                                CHECK_EXCEPTION();
                   13681:                                ZEND_VM_NEXT_OPCODE();
1.1       misho    13682:                        } else {
1.1.1.2   misho    13683:                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    13684:                        }
1.1.1.2   misho    13685:                } else {
                   13686:                        CACHE_PTR(opline->op2.literal->cache_slot, c);
1.1       misho    13687:                }
1.1.1.2   misho    13688:                retval = &EX_T(opline->result.var).tmp_var;
                   13689:                ZVAL_COPY_VALUE(retval, &c->value);
                   13690:                zval_copy_ctor(retval);
                   13691:                CHECK_EXCEPTION();
1.1       misho    13692:                ZEND_VM_NEXT_OPCODE();
                   13693:        } else {
                   13694:                /* class constant */
                   13695:                zend_class_entry *ce;
                   13696:                zval **value;
                   13697: 
                   13698:                if (IS_VAR == IS_CONST) {
1.1.1.2   misho    13699:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   13700:                                value = CACHED_PTR(opline->op2.literal->cache_slot);
                   13701:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   13702:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   13703:                                CHECK_EXCEPTION();
                   13704:                                ZEND_VM_NEXT_OPCODE();
                   13705:                        } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   13706:                                ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   13707:                        } else {
                   13708:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    13709:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   13710:                                        HANDLE_EXCEPTION();
                   13711:                                }
1.1.1.2   misho    13712:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    13713:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    13714:                                }
                   13715:                                CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    13716:                        }
                   13717:                } else {
1.1.1.2   misho    13718:                        ce = EX_T(opline->op1.var).class_entry;
                   13719:                        if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
                   13720:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   13721:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   13722:                                CHECK_EXCEPTION();
                   13723:                                ZEND_VM_NEXT_OPCODE();
                   13724:                        }
1.1       misho    13725:                }
                   13726: 
1.1.1.2   misho    13727:                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
1.1       misho    13728:                        if (Z_TYPE_PP(value) == IS_CONSTANT_ARRAY ||
                   13729:                            (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT) {
                   13730:                                zend_class_entry *old_scope = EG(scope);
                   13731: 
                   13732:                                EG(scope) = ce;
                   13733:                                zval_update_constant(value, (void *) 1 TSRMLS_CC);
                   13734:                                EG(scope) = old_scope;
                   13735:                        }
1.1.1.2   misho    13736:                        if (IS_VAR == IS_CONST) {
                   13737:                                CACHE_PTR(opline->op2.literal->cache_slot, value);
                   13738:                        } else {
                   13739:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, value);
                   13740:                        }
                   13741:                        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   13742:                        zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    13743:                } else {
1.1.1.2   misho    13744:                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    13745:                }
                   13746: 
1.1.1.2   misho    13747:                CHECK_EXCEPTION();
1.1       misho    13748:                ZEND_VM_NEXT_OPCODE();
                   13749:        }
                   13750: }
                   13751: 
                   13752: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13753: {
1.1.1.2   misho    13754:        USE_OPLINE
1.1       misho    13755:        zend_free_op free_op1;
                   13756:        zval *expr_ptr;
                   13757: 
1.1.1.2   misho    13758:        SAVE_OPLINE();
                   13759:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   13760:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13761: 
1.1.1.2   misho    13762:                if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   13763:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   13764:                }
                   13765:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    13766:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    13767:                Z_ADDREF_P(expr_ptr);
1.1       misho    13768:        } else {
1.1.1.2   misho    13769:                expr_ptr=_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13770:                if (0) { /* temporary variable */
                   13771:                        zval *new_expr;
1.1       misho    13772: 
1.1.1.2   misho    13773:                        ALLOC_ZVAL(new_expr);
                   13774:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   13775:                        expr_ptr = new_expr;
                   13776:                } else if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    13777:                        zval *new_expr;
                   13778: 
                   13779:                        ALLOC_ZVAL(new_expr);
                   13780:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   13781:                        expr_ptr = new_expr;
                   13782:                        zendi_zval_copy_ctor(*expr_ptr);
                   13783:                } else {
                   13784:                        Z_ADDREF_P(expr_ptr);
                   13785:                }
                   13786:        }
1.1.1.2   misho    13787: 
                   13788:        if (IS_CONST != IS_UNUSED) {
                   13789: 
                   13790:                zval *offset = opline->op2.zv;
                   13791:                ulong hval;
                   13792: 
1.1       misho    13793:                switch (Z_TYPE_P(offset)) {
                   13794:                        case IS_DOUBLE:
1.1.1.2   misho    13795:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   13796:                                goto num_index;
1.1       misho    13797:                        case IS_LONG:
                   13798:                        case IS_BOOL:
1.1.1.2   misho    13799:                                hval = Z_LVAL_P(offset);
                   13800: num_index:
                   13801:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    13802:                                break;
                   13803:                        case IS_STRING:
1.1.1.2   misho    13804:                                if (IS_CONST == IS_CONST) {
                   13805:                                        hval = Z_HASH_P(offset);
                   13806:                                } else {
                   13807:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   13808:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   13809:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   13810:                                        } else {
                   13811:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   13812:                                        }
                   13813:                                }
                   13814:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    13815:                                break;
                   13816:                        case IS_NULL:
1.1.1.2   misho    13817:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    13818:                                break;
                   13819:                        default:
                   13820:                                zend_error(E_WARNING, "Illegal offset type");
                   13821:                                zval_ptr_dtor(&expr_ptr);
                   13822:                                /* do nothing */
                   13823:                                break;
                   13824:                }
                   13825: 
                   13826:        } else {
1.1.1.2   misho    13827:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    13828:        }
1.1.1.2   misho    13829:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
1.1       misho    13830:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13831:        } else {
                   13832:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13833:        }
1.1.1.2   misho    13834:        CHECK_EXCEPTION();
1.1       misho    13835:        ZEND_VM_NEXT_OPCODE();
                   13836: }
                   13837: 
                   13838: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13839: {
1.1.1.2   misho    13840:        USE_OPLINE
1.1       misho    13841: 
1.1.1.2   misho    13842:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    13843:        if (IS_VAR == IS_UNUSED) {
                   13844:                ZEND_VM_NEXT_OPCODE();
                   13845: #if 0 || IS_VAR != IS_UNUSED
                   13846:        } else {
                   13847:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   13848: #endif
                   13849:        }
                   13850: }
                   13851: 
1.1.1.2   misho    13852: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13853: {
                   13854:        USE_OPLINE
                   13855:        zval tmp, *varname;
                   13856:        HashTable *target_symbol_table;
                   13857:        zend_free_op free_op1;
                   13858: 
                   13859:        SAVE_OPLINE();
                   13860:        if (IS_VAR == IS_CV &&
                   13861:            IS_CONST == IS_UNUSED &&
                   13862:            (opline->extended_value & ZEND_QUICK_SET)) {
                   13863:                if (EG(active_symbol_table)) {
                   13864:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   13865: 
                   13866:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   13867:                        EX_CV(opline->op1.var) = NULL;
                   13868:                } else if (EX_CV(opline->op1.var)) {
                   13869:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   13870:                        EX_CV(opline->op1.var) = NULL;
                   13871:                }
                   13872:                CHECK_EXCEPTION();
                   13873:                ZEND_VM_NEXT_OPCODE();
                   13874:        }
                   13875: 
                   13876:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   13877: 
                   13878:        if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   13879:                ZVAL_COPY_VALUE(&tmp, varname);
                   13880:                zval_copy_ctor(&tmp);
                   13881:                convert_to_string(&tmp);
                   13882:                varname = &tmp;
                   13883:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   13884:                Z_ADDREF_P(varname);
                   13885:        }
                   13886: 
                   13887:        if (IS_CONST != IS_UNUSED) {
                   13888:                zend_class_entry *ce;
                   13889: 
                   13890:                if (IS_CONST == IS_CONST) {
                   13891:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   13892:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   13893:                        } else {
                   13894:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    13895:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    13896:                                        if (IS_VAR != IS_CONST && varname == &tmp) {
                   13897:                                                zval_dtor(&tmp);
                   13898:                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   13899:                                                zval_ptr_dtor(&varname);
                   13900:                                        }
                   13901:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.4   misho    13902:                                        HANDLE_EXCEPTION();
                   13903:                                }
                   13904:                                if (UNEXPECTED(ce == NULL)) {
                   13905:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    13906:                                }
                   13907:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   13908:                        }
                   13909:                } else {
                   13910:                        ce = EX_T(opline->op2.var).class_entry;
                   13911:                }
                   13912:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   13913:        } else {
                   13914:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   13915: 
                   13916:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   13917:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   13918:        }
                   13919: 
                   13920:        if (IS_VAR != IS_CONST && varname == &tmp) {
                   13921:                zval_dtor(&tmp);
                   13922:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   13923:                zval_ptr_dtor(&varname);
                   13924:        }
                   13925:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   13926:        CHECK_EXCEPTION();
                   13927:        ZEND_VM_NEXT_OPCODE();
                   13928: }
                   13929: 
1.1       misho    13930: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   13931: {
1.1.1.2   misho    13932:        USE_OPLINE
1.1       misho    13933:        zend_free_op free_op1;
1.1.1.2   misho    13934:        zval **container;
1.1       misho    13935:        zval *offset;
1.1.1.2   misho    13936:        ulong hval;
1.1       misho    13937: 
1.1.1.2   misho    13938:        SAVE_OPLINE();
                   13939:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    13940:        if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   13941:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   13942:        }
1.1.1.2   misho    13943:        offset = opline->op2.zv;
1.1       misho    13944: 
                   13945:        if (IS_VAR != IS_VAR || container) {
                   13946:                switch (Z_TYPE_PP(container)) {
                   13947:                        case IS_ARRAY: {
                   13948:                                HashTable *ht = Z_ARRVAL_PP(container);
                   13949: 
                   13950:                                switch (Z_TYPE_P(offset)) {
                   13951:                                        case IS_DOUBLE:
1.1.1.2   misho    13952:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    13953:                                                zend_hash_index_del(ht, hval);
                   13954:                                                break;
1.1       misho    13955:                                        case IS_RESOURCE:
                   13956:                                        case IS_BOOL:
                   13957:                                        case IS_LONG:
1.1.1.2   misho    13958:                                                hval = Z_LVAL_P(offset);
                   13959:                                                zend_hash_index_del(ht, hval);
1.1       misho    13960:                                                break;
                   13961:                                        case IS_STRING:
                   13962:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   13963:                                                        Z_ADDREF_P(offset);
                   13964:                                                }
1.1.1.2   misho    13965:                                                if (IS_CONST == IS_CONST) {
                   13966:                                                        hval = Z_HASH_P(offset);
                   13967:                                                } else {
                   13968:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   13969:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   13970:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   13971:                                                        } else {
                   13972:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    13973:                                                        }
                   13974:                                                }
1.1.1.2   misho    13975:                                                if (ht == &EG(symbol_table)) {
                   13976:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   13977:                                                } else {
                   13978:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   13979:                                                }
                   13980:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   13981:                                                        zval_ptr_dtor(&offset);
                   13982:                                                }
                   13983:                                                break;
                   13984: num_index_dim:
                   13985:                                                zend_hash_index_del(ht, hval);
1.1       misho    13986:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   13987:                                                        zval_ptr_dtor(&offset);
                   13988:                                                }
                   13989:                                                break;
                   13990:                                        case IS_NULL:
                   13991:                                                zend_hash_del(ht, "", sizeof(""));
                   13992:                                                break;
                   13993:                                        default:
                   13994:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   13995:                                                break;
                   13996:                                }
                   13997: 
                   13998:                                break;
                   13999:                        }
                   14000:                        case IS_OBJECT:
1.1.1.2   misho    14001:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    14002:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   14003:                                }
                   14004:                                if (0) {
                   14005:                                        MAKE_REAL_ZVAL_PTR(offset);
                   14006:                                }
                   14007:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   14008:                                if (0) {
                   14009:                                        zval_ptr_dtor(&offset);
                   14010:                                } else {
                   14011: 
                   14012:                                }
                   14013:                                break;
                   14014:                        case IS_STRING:
                   14015:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   14016:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   14017:                        default:
                   14018: 
                   14019:                                break;
                   14020:                }
                   14021:        } else {
                   14022: 
                   14023:        }
                   14024:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14025: 
1.1.1.2   misho    14026:        CHECK_EXCEPTION();
1.1       misho    14027:        ZEND_VM_NEXT_OPCODE();
                   14028: }
                   14029: 
                   14030: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14031: {
1.1.1.2   misho    14032:        USE_OPLINE
1.1       misho    14033:        zend_free_op free_op1;
1.1.1.2   misho    14034:        zval **container;
                   14035:        zval *offset;
                   14036: 
                   14037:        SAVE_OPLINE();
                   14038:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   14039:        offset = opline->op2.zv;
1.1       misho    14040: 
                   14041:        if (IS_VAR != IS_VAR || container) {
                   14042:                if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   14043:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   14044:                }
1.1.1.2   misho    14045:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   14046:                        if (0) {
                   14047:                                MAKE_REAL_ZVAL_PTR(offset);
                   14048:                        }
                   14049:                        if (Z_OBJ_HT_P(*container)->unset_property) {
                   14050:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   14051:                        } else {
                   14052:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   14053:                        }
                   14054:                        if (0) {
                   14055:                                zval_ptr_dtor(&offset);
                   14056:                        } else {
                   14057: 
                   14058:                        }
                   14059:                } else {
                   14060: 
                   14061:                }
                   14062:        } else {
                   14063: 
                   14064:        }
                   14065:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14066: 
                   14067:        CHECK_EXCEPTION();
                   14068:        ZEND_VM_NEXT_OPCODE();
                   14069: }
                   14070: 
                   14071: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14072: {
                   14073:        USE_OPLINE
                   14074:        zval **value;
                   14075:        zend_bool isset = 1;
                   14076: 
                   14077:        SAVE_OPLINE();
                   14078:        if (IS_VAR == IS_CV &&
                   14079:            IS_CONST == IS_UNUSED &&
                   14080:            (opline->extended_value & ZEND_QUICK_SET)) {
                   14081:                if (EX_CV(opline->op1.var)) {
                   14082:                        value = EX_CV(opline->op1.var);
                   14083:                } else if (EG(active_symbol_table)) {
                   14084:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   14085: 
                   14086:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   14087:                                isset = 0;
                   14088:                        }
                   14089:                } else {
                   14090:                        isset = 0;
                   14091:                }
                   14092:        } else {
                   14093:                HashTable *target_symbol_table;
                   14094:                zend_free_op free_op1;
                   14095:                zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   14096: 
                   14097:                if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   14098:                        ZVAL_COPY_VALUE(&tmp, varname);
                   14099:                        zval_copy_ctor(&tmp);
                   14100:                        convert_to_string(&tmp);
                   14101:                        varname = &tmp;
                   14102:                }
                   14103: 
                   14104:                if (IS_CONST != IS_UNUSED) {
                   14105:                        zend_class_entry *ce;
                   14106: 
                   14107:                        if (IS_CONST == IS_CONST) {
                   14108:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   14109:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   14110:                                } else {
                   14111:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   14112:                                        if (UNEXPECTED(ce == NULL)) {
                   14113:                                                CHECK_EXCEPTION();
                   14114:                                                ZEND_VM_NEXT_OPCODE();
                   14115:                                        }
                   14116:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   14117:                                }
1.1       misho    14118:                        } else {
1.1.1.2   misho    14119:                                ce = EX_T(opline->op2.var).class_entry;
1.1       misho    14120:                        }
1.1.1.2   misho    14121:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   14122:                        if (!value) {
                   14123:                                isset = 0;
1.1       misho    14124:                        }
                   14125:                } else {
1.1.1.2   misho    14126:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   14127:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   14128:                                isset = 0;
                   14129:                        }
                   14130:                }
1.1       misho    14131: 
1.1.1.2   misho    14132:                if (IS_VAR != IS_CONST && varname == &tmp) {
                   14133:                        zval_dtor(&tmp);
1.1       misho    14134:                }
1.1.1.2   misho    14135:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14136:        }
1.1       misho    14137: 
1.1.1.2   misho    14138:        if (opline->extended_value & ZEND_ISSET) {
                   14139:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   14140:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   14141:                } else {
                   14142:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   14143:                }
                   14144:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   14145:                if (!isset || !i_zend_is_true(*value)) {
                   14146:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   14147:                } else {
                   14148:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   14149:                }
1.1       misho    14150:        }
                   14151: 
1.1.1.2   misho    14152:        CHECK_EXCEPTION();
1.1       misho    14153:        ZEND_VM_NEXT_OPCODE();
                   14154: }
                   14155: 
                   14156: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   14157: {
1.1.1.2   misho    14158:        USE_OPLINE
1.1       misho    14159:        zend_free_op free_op1;
1.1.1.2   misho    14160:        zval **container;
1.1       misho    14161:        zval **value = NULL;
                   14162:        int result = 0;
1.1.1.2   misho    14163:        ulong hval;
                   14164:        zval *offset;
1.1       misho    14165: 
1.1.1.2   misho    14166:        SAVE_OPLINE();
                   14167:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    14168: 
1.1.1.2   misho    14169:        offset = opline->op2.zv;
1.1       misho    14170: 
1.1.1.2   misho    14171:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   14172:                HashTable *ht;
                   14173:                int isset = 0;
1.1       misho    14174: 
1.1.1.2   misho    14175:                ht = Z_ARRVAL_PP(container);
1.1       misho    14176: 
1.1.1.2   misho    14177:                switch (Z_TYPE_P(offset)) {
                   14178:                        case IS_DOUBLE:
                   14179:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   14180:                                goto num_index_prop;
                   14181:                        case IS_RESOURCE:
                   14182:                        case IS_BOOL:
                   14183:                        case IS_LONG:
                   14184:                                hval = Z_LVAL_P(offset);
                   14185: num_index_prop:
                   14186:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   14187:                                        isset = 1;
                   14188:                                }
                   14189:                                break;
                   14190:                        case IS_STRING:
                   14191:                                if (IS_CONST == IS_CONST) {
                   14192:                                        hval = Z_HASH_P(offset);
                   14193:                                } else {
                   14194:                                        if (!prop_dim) {
                   14195:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    14196:                                        }
1.1.1.2   misho    14197:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   14198:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    14199:                                        } else {
1.1.1.2   misho    14200:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    14201:                                        }
                   14202:                                }
1.1.1.2   misho    14203:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   14204:                                        isset = 1;
1.1       misho    14205:                                }
1.1.1.2   misho    14206:                                break;
                   14207:                        case IS_NULL:
                   14208:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   14209:                                        isset = 1;
                   14210:                                }
                   14211:                                break;
                   14212:                        default:
                   14213:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   14214:                                break;
                   14215:                }
                   14216: 
                   14217:                if (opline->extended_value & ZEND_ISSET) {
                   14218:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   14219:                                result = 0;
                   14220:                        } else {
                   14221:                                result = isset;
1.1       misho    14222:                        }
1.1.1.2   misho    14223:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   14224:                        if (!isset || !i_zend_is_true(*value)) {
                   14225:                                result = 0;
1.1       misho    14226:                        } else {
1.1.1.2   misho    14227:                                result = 1;
                   14228:                        }
                   14229:                }
1.1       misho    14230: 
1.1.1.2   misho    14231:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   14232:                if (0) {
                   14233:                        MAKE_REAL_ZVAL_PTR(offset);
                   14234:                }
                   14235:                if (prop_dim) {
                   14236:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   14237:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   14238:                        } else {
                   14239:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   14240:                                result = 0;
                   14241:                        }
                   14242:                } else {
                   14243:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   14244:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   14245:                        } else {
                   14246:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   14247:                                result = 0;
1.1       misho    14248:                        }
1.1.1.2   misho    14249:                }
                   14250:                if (0) {
                   14251:                        zval_ptr_dtor(&offset);
                   14252:                } else {
                   14253: 
                   14254:                }
                   14255:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   14256:                zval tmp;
1.1       misho    14257: 
1.1.1.2   misho    14258:                if (Z_TYPE_P(offset) != IS_LONG) {
                   14259:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   14260:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   14261:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   14262:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    14263:                                zval_copy_ctor(&tmp);
                   14264:                                convert_to_long(&tmp);
                   14265:                                offset = &tmp;
1.1.1.2   misho    14266:                        } else {
                   14267:                                /* can not be converted to proper offset, return "not set" */
                   14268:                                result = 0;
1.1       misho    14269:                        }
1.1.1.2   misho    14270:                }
                   14271:                if (Z_TYPE_P(offset) == IS_LONG) {
                   14272:                        if (opline->extended_value & ZEND_ISSET) {
                   14273:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   14274:                                        result = 1;
                   14275:                                }
                   14276:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   14277:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   14278:                                        result = 1;
1.1       misho    14279:                                }
                   14280:                        }
1.1.1.2   misho    14281:                }
1.1       misho    14282: 
1.1.1.2   misho    14283:        } else {
1.1       misho    14284: 
                   14285:        }
                   14286: 
1.1.1.2   misho    14287:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   14288:        if (opline->extended_value & ZEND_ISSET) {
                   14289:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   14290:        } else {
                   14291:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    14292:        }
                   14293: 
                   14294:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14295: 
1.1.1.2   misho    14296:        CHECK_EXCEPTION();
1.1       misho    14297:        ZEND_VM_NEXT_OPCODE();
                   14298: }
                   14299: 
                   14300: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14301: {
                   14302:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14303: }
                   14304: 
                   14305: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14306: {
                   14307:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14308: }
                   14309: 
                   14310: static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14311: {
1.1.1.2   misho    14312:        USE_OPLINE
1.1       misho    14313:        zend_free_op free_op1, free_op2;
                   14314: 
1.1.1.2   misho    14315:        SAVE_OPLINE();
                   14316:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   14317:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14318:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14319:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14320:        zval_dtor(free_op2.var);
1.1.1.2   misho    14321:        CHECK_EXCEPTION();
1.1       misho    14322:        ZEND_VM_NEXT_OPCODE();
                   14323: }
                   14324: 
                   14325: static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14326: {
1.1.1.2   misho    14327:        USE_OPLINE
1.1       misho    14328:        zend_free_op free_op1, free_op2;
                   14329: 
1.1.1.2   misho    14330:        SAVE_OPLINE();
                   14331:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   14332:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14333:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14334:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14335:        zval_dtor(free_op2.var);
1.1.1.2   misho    14336:        CHECK_EXCEPTION();
1.1       misho    14337:        ZEND_VM_NEXT_OPCODE();
                   14338: }
                   14339: 
                   14340: static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14341: {
1.1.1.2   misho    14342:        USE_OPLINE
1.1       misho    14343:        zend_free_op free_op1, free_op2;
                   14344: 
1.1.1.2   misho    14345:        SAVE_OPLINE();
                   14346:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   14347:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14348:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14349:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14350:        zval_dtor(free_op2.var);
1.1.1.2   misho    14351:        CHECK_EXCEPTION();
1.1       misho    14352:        ZEND_VM_NEXT_OPCODE();
                   14353: }
                   14354: 
                   14355: static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14356: {
1.1.1.2   misho    14357:        USE_OPLINE
1.1       misho    14358:        zend_free_op free_op1, free_op2;
                   14359: 
1.1.1.2   misho    14360:        SAVE_OPLINE();
                   14361:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   14362:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14363:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14364:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14365:        zval_dtor(free_op2.var);
1.1.1.2   misho    14366:        CHECK_EXCEPTION();
1.1       misho    14367:        ZEND_VM_NEXT_OPCODE();
                   14368: }
                   14369: 
                   14370: static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14371: {
1.1.1.2   misho    14372:        USE_OPLINE
1.1       misho    14373:        zend_free_op free_op1, free_op2;
                   14374: 
1.1.1.2   misho    14375:        SAVE_OPLINE();
                   14376:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   14377:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14378:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14379:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14380:        zval_dtor(free_op2.var);
1.1.1.2   misho    14381:        CHECK_EXCEPTION();
1.1       misho    14382:        ZEND_VM_NEXT_OPCODE();
                   14383: }
                   14384: 
                   14385: static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14386: {
1.1.1.2   misho    14387:        USE_OPLINE
1.1       misho    14388:        zend_free_op free_op1, free_op2;
                   14389: 
1.1.1.2   misho    14390:        SAVE_OPLINE();
                   14391:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   14392:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14393:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14394:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14395:        zval_dtor(free_op2.var);
1.1.1.2   misho    14396:        CHECK_EXCEPTION();
1.1       misho    14397:        ZEND_VM_NEXT_OPCODE();
                   14398: }
                   14399: 
                   14400: static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14401: {
1.1.1.2   misho    14402:        USE_OPLINE
1.1       misho    14403:        zend_free_op free_op1, free_op2;
                   14404: 
1.1.1.2   misho    14405:        SAVE_OPLINE();
                   14406:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   14407:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14408:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14409:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14410:        zval_dtor(free_op2.var);
1.1.1.2   misho    14411:        CHECK_EXCEPTION();
1.1       misho    14412:        ZEND_VM_NEXT_OPCODE();
                   14413: }
                   14414: 
                   14415: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14416: {
1.1.1.2   misho    14417:        USE_OPLINE
1.1       misho    14418:        zend_free_op free_op1, free_op2;
                   14419: 
1.1.1.2   misho    14420:        SAVE_OPLINE();
                   14421:        concat_function(&EX_T(opline->result.var).tmp_var,
                   14422:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14423:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14424:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14425:        zval_dtor(free_op2.var);
1.1.1.2   misho    14426:        CHECK_EXCEPTION();
1.1       misho    14427:        ZEND_VM_NEXT_OPCODE();
                   14428: }
                   14429: 
                   14430: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14431: {
1.1.1.2   misho    14432:        USE_OPLINE
1.1       misho    14433:        zend_free_op free_op1, free_op2;
                   14434: 
1.1.1.2   misho    14435:        SAVE_OPLINE();
                   14436:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   14437:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14438:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14439:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14440:        zval_dtor(free_op2.var);
1.1.1.2   misho    14441:        CHECK_EXCEPTION();
1.1       misho    14442:        ZEND_VM_NEXT_OPCODE();
                   14443: }
                   14444: 
                   14445: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14446: {
1.1.1.2   misho    14447:        USE_OPLINE
1.1       misho    14448:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14449:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    14450: 
1.1.1.2   misho    14451:        SAVE_OPLINE();
1.1       misho    14452:        is_identical_function(result,
1.1.1.2   misho    14453:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14454:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14455:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   14456:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14457:        zval_dtor(free_op2.var);
1.1.1.2   misho    14458:        CHECK_EXCEPTION();
1.1       misho    14459:        ZEND_VM_NEXT_OPCODE();
                   14460: }
                   14461: 
                   14462: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14463: {
1.1.1.2   misho    14464:        USE_OPLINE
1.1       misho    14465:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14466:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    14467: 
1.1.1.2   misho    14468:        SAVE_OPLINE();
                   14469:        ZVAL_BOOL(result, fast_equal_function(result,
                   14470:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14471:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    14472:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14473:        zval_dtor(free_op2.var);
1.1.1.2   misho    14474:        CHECK_EXCEPTION();
1.1       misho    14475:        ZEND_VM_NEXT_OPCODE();
                   14476: }
                   14477: 
                   14478: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14479: {
1.1.1.2   misho    14480:        USE_OPLINE
1.1       misho    14481:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14482:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    14483: 
1.1.1.2   misho    14484:        SAVE_OPLINE();
                   14485:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   14486:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14487:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    14488:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14489:        zval_dtor(free_op2.var);
1.1.1.2   misho    14490:        CHECK_EXCEPTION();
1.1       misho    14491:        ZEND_VM_NEXT_OPCODE();
                   14492: }
                   14493: 
                   14494: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14495: {
1.1.1.2   misho    14496:        USE_OPLINE
1.1       misho    14497:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14498:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    14499: 
1.1.1.2   misho    14500:        SAVE_OPLINE();
                   14501:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   14502:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14503:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    14504:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14505:        zval_dtor(free_op2.var);
1.1.1.2   misho    14506:        CHECK_EXCEPTION();
1.1       misho    14507:        ZEND_VM_NEXT_OPCODE();
                   14508: }
                   14509: 
                   14510: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14511: {
1.1.1.2   misho    14512:        USE_OPLINE
1.1       misho    14513:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14514:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    14515: 
1.1.1.2   misho    14516:        SAVE_OPLINE();
                   14517:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   14518:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14519:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    14520:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14521:        zval_dtor(free_op2.var);
1.1.1.2   misho    14522:        CHECK_EXCEPTION();
1.1       misho    14523:        ZEND_VM_NEXT_OPCODE();
                   14524: }
                   14525: 
                   14526: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14527: {
1.1.1.2   misho    14528:        USE_OPLINE
1.1       misho    14529:        zend_free_op free_op1, free_op2;
                   14530: 
1.1.1.2   misho    14531:        SAVE_OPLINE();
                   14532:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   14533:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14534:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14535:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14536:        zval_dtor(free_op2.var);
1.1.1.2   misho    14537:        CHECK_EXCEPTION();
1.1       misho    14538:        ZEND_VM_NEXT_OPCODE();
                   14539: }
                   14540: 
                   14541: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14542: {
1.1.1.2   misho    14543:        USE_OPLINE
1.1       misho    14544:        zend_free_op free_op1, free_op2;
                   14545: 
1.1.1.2   misho    14546:        SAVE_OPLINE();
                   14547:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   14548:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14549:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14550:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14551:        zval_dtor(free_op2.var);
1.1.1.2   misho    14552:        CHECK_EXCEPTION();
1.1       misho    14553:        ZEND_VM_NEXT_OPCODE();
                   14554: }
                   14555: 
                   14556: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14557: {
1.1.1.2   misho    14558:        USE_OPLINE
1.1       misho    14559:        zend_free_op free_op1, free_op2;
                   14560: 
1.1.1.2   misho    14561:        SAVE_OPLINE();
                   14562:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   14563:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14564:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14565:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14566:        zval_dtor(free_op2.var);
1.1.1.2   misho    14567:        CHECK_EXCEPTION();
1.1       misho    14568:        ZEND_VM_NEXT_OPCODE();
                   14569: }
                   14570: 
                   14571: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14572: {
1.1.1.2   misho    14573:        USE_OPLINE
1.1       misho    14574:        zend_free_op free_op1, free_op2;
                   14575: 
1.1.1.2   misho    14576:        SAVE_OPLINE();
                   14577:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   14578:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   14579:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    14580:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14581:        zval_dtor(free_op2.var);
1.1.1.2   misho    14582:        CHECK_EXCEPTION();
1.1       misho    14583:        ZEND_VM_NEXT_OPCODE();
                   14584: }
                   14585: 
                   14586: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   14587: {
1.1.1.2   misho    14588:        USE_OPLINE
1.1       misho    14589:        zend_free_op free_op1, free_op2, free_op_data1;
1.1.1.2   misho    14590:        zval **object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    14591:        zval *object;
1.1.1.2   misho    14592:        zval *property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   14593:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    14594:        int have_get_ptr = 0;
                   14595: 
1.1.1.2   misho    14596:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    14597:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   14598:        }
                   14599: 
                   14600:        make_real_object(object_ptr TSRMLS_CC);
                   14601:        object = *object_ptr;
                   14602: 
1.1.1.2   misho    14603:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    14604:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   14605:                zval_dtor(free_op2.var);
                   14606:                FREE_OP(free_op_data1);
                   14607: 
1.1.1.2   misho    14608:                if (RETURN_VALUE_USED(opline)) {
                   14609:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   14610:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   14611:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    14612:                }
                   14613:        } else {
                   14614:                /* here we are sure we are dealing with an object */
                   14615:                if (1) {
                   14616:                        MAKE_REAL_ZVAL_PTR(property);
                   14617:                }
                   14618: 
                   14619:                /* here property is a string */
                   14620:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   14621:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    14622:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14623:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   14624:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   14625: 
                   14626:                                have_get_ptr = 1;
                   14627:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    14628:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    14629:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    14630:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   14631:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    14632:                                }
                   14633:                        }
                   14634:                }
                   14635: 
                   14636:                if (!have_get_ptr) {
                   14637:                        zval *z = NULL;
                   14638: 
                   14639:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   14640:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    14641:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14642:                                }
                   14643:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   14644:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   14645:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   14646:                                }
                   14647:                        }
                   14648:                        if (z) {
                   14649:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   14650:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   14651: 
                   14652:                                        if (Z_REFCOUNT_P(z) == 0) {
                   14653:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   14654:                                                zval_dtor(z);
                   14655:                                                FREE_ZVAL(z);
                   14656:                                        }
                   14657:                                        z = value;
                   14658:                                }
                   14659:                                Z_ADDREF_P(z);
                   14660:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   14661:                                binary_op(z, z, value TSRMLS_CC);
                   14662:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    14663:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14664:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   14665:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   14666:                                }
1.1.1.2   misho    14667:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    14668:                                        PZVAL_LOCK(z);
1.1.1.2   misho    14669:                                        EX_T(opline->result.var).var.ptr = z;
                   14670:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    14671:                                }
                   14672:                                zval_ptr_dtor(&z);
                   14673:                        } else {
                   14674:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    14675:                                if (RETURN_VALUE_USED(opline)) {
                   14676:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   14677:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   14678:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    14679:                                }
                   14680:                        }
                   14681:                }
                   14682: 
                   14683:                if (1) {
                   14684:                        zval_ptr_dtor(&property);
                   14685:                } else {
                   14686:                        zval_dtor(free_op2.var);
                   14687:                }
                   14688:                FREE_OP(free_op_data1);
                   14689:        }
                   14690: 
                   14691:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14692:        /* assign_obj has two opcodes! */
1.1.1.2   misho    14693:        CHECK_EXCEPTION();
1.1       misho    14694:        ZEND_VM_INC_OPCODE();
                   14695:        ZEND_VM_NEXT_OPCODE();
                   14696: }
                   14697: 
                   14698: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   14699: {
1.1.1.2   misho    14700:        USE_OPLINE
1.1       misho    14701:        zend_free_op free_op1, free_op2, free_op_data2, free_op_data1;
                   14702:        zval **var_ptr;
                   14703:        zval *value;
                   14704: 
1.1.1.2   misho    14705:        SAVE_OPLINE();
1.1       misho    14706:        switch (opline->extended_value) {
                   14707:                case ZEND_ASSIGN_OBJ:
                   14708:                        return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14709:                        break;
                   14710:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    14711:                                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    14712: 
1.1.1.2   misho    14713:                                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    14714:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    14715:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    14716:                                        if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
                   14717:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   14718:                                        }
                   14719:                                        return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14720:                                } else {
1.1.1.2   misho    14721:                                        zval *dim = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    14722: 
1.1.1.2   misho    14723:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
                   14724:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   14725:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    14726:                                }
                   14727:                        }
                   14728:                        break;
                   14729:                default:
1.1.1.2   misho    14730:                        value = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   14731:                        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    14732:                        /* do nothing */
                   14733:                        break;
                   14734:        }
                   14735: 
1.1.1.2   misho    14736:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    14737:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   14738:        }
                   14739: 
1.1.1.2   misho    14740:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   14741:                if (RETURN_VALUE_USED(opline)) {
                   14742:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   14743:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    14744:                }
                   14745:                zval_dtor(free_op2.var);
                   14746:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    14747:                CHECK_EXCEPTION();
                   14748:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   14749:                        ZEND_VM_INC_OPCODE();
                   14750:                }
1.1       misho    14751:                ZEND_VM_NEXT_OPCODE();
                   14752:        }
                   14753: 
                   14754:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   14755: 
1.1.1.2   misho    14756:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   14757:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    14758:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   14759:                /* proxy object */
                   14760:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   14761:                Z_ADDREF_P(objval);
                   14762:                binary_op(objval, objval, value TSRMLS_CC);
                   14763:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   14764:                zval_ptr_dtor(&objval);
                   14765:        } else {
                   14766:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   14767:        }
                   14768: 
1.1.1.2   misho    14769:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    14770:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    14771:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    14772:        }
                   14773:        zval_dtor(free_op2.var);
                   14774: 
                   14775:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   14776:                FREE_OP(free_op_data1);
                   14777:                FREE_OP_VAR_PTR(free_op_data2);
1.1.1.2   misho    14778:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14779:                CHECK_EXCEPTION();
                   14780:                ZEND_VM_INC_OPCODE();
                   14781:        } else {
                   14782:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   14783:                CHECK_EXCEPTION();
1.1       misho    14784:        }
                   14785:        ZEND_VM_NEXT_OPCODE();
                   14786: }
                   14787: 
                   14788: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14789: {
                   14790:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14791: }
                   14792: 
                   14793: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14794: {
                   14795:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14796: }
                   14797: 
                   14798: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14799: {
                   14800:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14801: }
                   14802: 
                   14803: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14804: {
                   14805:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14806: }
                   14807: 
                   14808: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14809: {
                   14810:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14811: }
                   14812: 
                   14813: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14814: {
                   14815:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14816: }
                   14817: 
                   14818: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14819: {
                   14820:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14821: }
                   14822: 
                   14823: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14824: {
                   14825:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14826: }
                   14827: 
                   14828: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14829: {
                   14830:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14831: }
                   14832: 
                   14833: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14834: {
                   14835:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14836: }
                   14837: 
                   14838: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14839: {
                   14840:        return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14841: }
                   14842: 
                   14843: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   14844: {
1.1.1.2   misho    14845:        USE_OPLINE
1.1       misho    14846:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14847:        zval **object_ptr;
1.1       misho    14848:        zval *object;
1.1.1.2   misho    14849:        zval *property;
                   14850:        zval **retval;
1.1       misho    14851:        int have_get_ptr = 0;
                   14852: 
1.1.1.2   misho    14853:        SAVE_OPLINE();
                   14854:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   14855:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   14856:        retval = &EX_T(opline->result.var).var.ptr;
                   14857: 
                   14858:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    14859:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   14860:        }
                   14861: 
                   14862:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   14863:        object = *object_ptr;
                   14864: 
1.1.1.2   misho    14865:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    14866:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   14867:                zval_dtor(free_op2.var);
1.1.1.2   misho    14868:                if (RETURN_VALUE_USED(opline)) {
                   14869:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   14870:                        *retval = &EG(uninitialized_zval);
1.1       misho    14871:                }
                   14872:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    14873:                CHECK_EXCEPTION();
1.1       misho    14874:                ZEND_VM_NEXT_OPCODE();
                   14875:        }
                   14876: 
                   14877:        /* here we are sure we are dealing with an object */
                   14878: 
                   14879:        if (1) {
                   14880:                MAKE_REAL_ZVAL_PTR(property);
                   14881:        }
                   14882: 
                   14883:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    14884:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14885:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   14886:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   14887: 
                   14888:                        have_get_ptr = 1;
                   14889:                        incdec_op(*zptr);
1.1.1.2   misho    14890:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    14891:                                *retval = *zptr;
                   14892:                                PZVAL_LOCK(*retval);
                   14893:                        }
                   14894:                }
                   14895:        }
                   14896: 
                   14897:        if (!have_get_ptr) {
                   14898:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    14899:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14900: 
1.1.1.2   misho    14901:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    14902:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   14903: 
                   14904:                                if (Z_REFCOUNT_P(z) == 0) {
                   14905:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   14906:                                        zval_dtor(z);
                   14907:                                        FREE_ZVAL(z);
                   14908:                                }
                   14909:                                z = value;
                   14910:                        }
                   14911:                        Z_ADDREF_P(z);
                   14912:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   14913:                        incdec_op(z);
                   14914:                        *retval = z;
1.1.1.2   misho    14915:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   14916:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    14917:                        zval_ptr_dtor(&z);
                   14918:                } else {
                   14919:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    14920:                        if (RETURN_VALUE_USED(opline)) {
                   14921:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   14922:                                *retval = &EG(uninitialized_zval);
1.1       misho    14923:                        }
                   14924:                }
                   14925:        }
                   14926: 
                   14927:        if (1) {
                   14928:                zval_ptr_dtor(&property);
                   14929:        } else {
                   14930:                zval_dtor(free_op2.var);
                   14931:        }
                   14932:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    14933:        CHECK_EXCEPTION();
1.1       misho    14934:        ZEND_VM_NEXT_OPCODE();
                   14935: }
                   14936: 
                   14937: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14938: {
                   14939:        return zend_pre_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14940: }
                   14941: 
                   14942: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   14943: {
                   14944:        return zend_pre_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   14945: }
                   14946: 
                   14947: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   14948: {
1.1.1.2   misho    14949:        USE_OPLINE
1.1       misho    14950:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    14951:        zval **object_ptr;
1.1       misho    14952:        zval *object;
1.1.1.2   misho    14953:        zval *property;
                   14954:        zval *retval;
1.1       misho    14955:        int have_get_ptr = 0;
                   14956: 
1.1.1.2   misho    14957:        SAVE_OPLINE();
                   14958:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   14959:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   14960:        retval = &EX_T(opline->result.var).tmp_var;
                   14961: 
                   14962:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    14963:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   14964:        }
                   14965: 
                   14966:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   14967:        object = *object_ptr;
                   14968: 
1.1.1.2   misho    14969:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    14970:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   14971:                zval_dtor(free_op2.var);
1.1.1.2   misho    14972:                ZVAL_NULL(retval);
1.1       misho    14973:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    14974:                CHECK_EXCEPTION();
1.1       misho    14975:                ZEND_VM_NEXT_OPCODE();
                   14976:        }
                   14977: 
                   14978:        /* here we are sure we are dealing with an object */
                   14979: 
                   14980:        if (1) {
                   14981:                MAKE_REAL_ZVAL_PTR(property);
                   14982:        }
                   14983: 
                   14984:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    14985:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    14986:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   14987:                        have_get_ptr = 1;
                   14988:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   14989: 
1.1.1.2   misho    14990:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    14991:                        zendi_zval_copy_ctor(*retval);
                   14992: 
                   14993:                        incdec_op(*zptr);
                   14994: 
                   14995:                }
                   14996:        }
                   14997: 
                   14998:        if (!have_get_ptr) {
                   14999:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    15000:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    15001:                        zval *z_copy;
                   15002: 
1.1.1.2   misho    15003:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    15004:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   15005: 
                   15006:                                if (Z_REFCOUNT_P(z) == 0) {
                   15007:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   15008:                                        zval_dtor(z);
                   15009:                                        FREE_ZVAL(z);
                   15010:                                }
                   15011:                                z = value;
                   15012:                        }
1.1.1.2   misho    15013:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    15014:                        zendi_zval_copy_ctor(*retval);
                   15015:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    15016:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    15017:                        zendi_zval_copy_ctor(*z_copy);
                   15018:                        incdec_op(z_copy);
                   15019:                        Z_ADDREF_P(z);
1.1.1.2   misho    15020:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    15021:                        zval_ptr_dtor(&z_copy);
                   15022:                        zval_ptr_dtor(&z);
                   15023:                } else {
                   15024:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    15025:                        ZVAL_NULL(retval);
1.1       misho    15026:                }
                   15027:        }
                   15028: 
                   15029:        if (1) {
                   15030:                zval_ptr_dtor(&property);
                   15031:        } else {
                   15032:                zval_dtor(free_op2.var);
                   15033:        }
                   15034:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15035:        CHECK_EXCEPTION();
1.1       misho    15036:        ZEND_VM_NEXT_OPCODE();
                   15037: }
                   15038: 
                   15039: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15040: {
                   15041:        return zend_post_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   15042: }
                   15043: 
                   15044: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15045: {
                   15046:        return zend_post_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   15047: }
                   15048: 
                   15049: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15050: {
1.1.1.2   misho    15051:        USE_OPLINE
1.1       misho    15052:        zend_free_op free_op1, free_op2;
1.1.1.5 ! misho    15053:        zval *container;
1.1       misho    15054: 
1.1.1.2   misho    15055:        SAVE_OPLINE();
                   15056: 
1.1.1.5 ! misho    15057:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          15058:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    15059:        }
1.1.1.5 ! misho    15060:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    15061:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
1.1       misho    15062:        zval_dtor(free_op2.var);
                   15063:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15064:        CHECK_EXCEPTION();
1.1       misho    15065:        ZEND_VM_NEXT_OPCODE();
                   15066: }
                   15067: 
                   15068: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15069: {
1.1.1.2   misho    15070:        USE_OPLINE
1.1       misho    15071:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15072:        zval **container;
                   15073: 
                   15074:        SAVE_OPLINE();
                   15075:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15076: 
1.1.1.2   misho    15077:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15078:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15079:        }
1.1.1.2   misho    15080:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    15081:        zval_dtor(free_op2.var);
1.1.1.2   misho    15082:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15083:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15084:        }
                   15085:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15086: 
                   15087:        /* We are going to assign the result by reference */
1.1.1.2   misho    15088:        if (UNEXPECTED(opline->extended_value != 0)) {
                   15089:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   15090: 
                   15091:                if (retval_ptr) {
                   15092:                        Z_DELREF_PP(retval_ptr);
                   15093:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   15094:                        Z_ADDREF_PP(retval_ptr);
                   15095:                }
1.1       misho    15096:        }
                   15097: 
1.1.1.2   misho    15098:        CHECK_EXCEPTION();
1.1       misho    15099:        ZEND_VM_NEXT_OPCODE();
                   15100: }
                   15101: 
                   15102: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15103: {
1.1.1.2   misho    15104:        USE_OPLINE
1.1       misho    15105:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15106:        zval **container;
1.1       misho    15107: 
1.1.1.2   misho    15108:        SAVE_OPLINE();
                   15109:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15110: 
                   15111:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15112:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15113:        }
1.1.1.2   misho    15114:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
1.1       misho    15115:        zval_dtor(free_op2.var);
1.1.1.2   misho    15116:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15117:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15118:        }
                   15119:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15120:        CHECK_EXCEPTION();
1.1       misho    15121:        ZEND_VM_NEXT_OPCODE();
                   15122: }
                   15123: 
                   15124: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15125: {
1.1.1.2   misho    15126:        USE_OPLINE
1.1       misho    15127:        zend_free_op free_op1, free_op2;
1.1.1.5 ! misho    15128:        zval *container;
1.1       misho    15129: 
1.1.1.2   misho    15130:        SAVE_OPLINE();
1.1.1.5 ! misho    15131:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    15132:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
1.1       misho    15133:        zval_dtor(free_op2.var);
                   15134:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15135:        CHECK_EXCEPTION();
1.1       misho    15136:        ZEND_VM_NEXT_OPCODE();
                   15137: }
                   15138: 
                   15139: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15140: {
1.1.1.2   misho    15141:        USE_OPLINE
1.1       misho    15142:        zend_free_op free_op1, free_op2;
                   15143: 
1.1.1.2   misho    15144:        SAVE_OPLINE();
                   15145: 
                   15146:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    15147:                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
        !          15148: 
1.1.1.2   misho    15149:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15150:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15151:                }
1.1.1.2   misho    15152:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
                   15153:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15154:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15155:                }
1.1.1.5 ! misho    15156:                zval_dtor(free_op2.var);
        !          15157:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    15158:        } else {
1.1.1.5 ! misho    15159:                zval *container;
        !          15160: 
1.1       misho    15161:                if (IS_TMP_VAR == IS_UNUSED) {
                   15162:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   15163:                }
1.1.1.5 ! misho    15164:                container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    15165:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
1.1.1.5 ! misho    15166:                zval_dtor(free_op2.var);
        !          15167:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    15168:        }
1.1.1.2   misho    15169:        CHECK_EXCEPTION();
1.1       misho    15170:        ZEND_VM_NEXT_OPCODE();
                   15171: }
                   15172: 
                   15173: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15174: {
1.1.1.2   misho    15175:        USE_OPLINE
1.1       misho    15176:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15177:        zval **container;
                   15178: 
                   15179:        SAVE_OPLINE();
                   15180:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15181: 
                   15182:        if (IS_VAR == IS_CV) {
                   15183:                if (container != &EG(uninitialized_zval_ptr)) {
                   15184:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   15185:                }
                   15186:        }
1.1.1.2   misho    15187:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15188:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15189:        }
1.1.1.2   misho    15190:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    15191:        zval_dtor(free_op2.var);
1.1.1.2   misho    15192:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15193:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15194:        }
                   15195:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15196:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    15197:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   15198:        } else {
                   15199:                zend_free_op free_res;
1.1.1.2   misho    15200:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    15201: 
1.1.1.2   misho    15202:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   15203:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   15204:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    15205:                }
1.1.1.2   misho    15206:                PZVAL_LOCK(*retval_ptr);
1.1       misho    15207:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    15208:                CHECK_EXCEPTION();
                   15209:                ZEND_VM_NEXT_OPCODE();
1.1       misho    15210:        }
                   15211: }
                   15212: 
1.1.1.2   misho    15213: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_TMP(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    15214: {
1.1.1.2   misho    15215:        USE_OPLINE
1.1       misho    15216:        zend_free_op free_op1;
1.1.1.2   misho    15217:        zval *container;
1.1       misho    15218:        zend_free_op free_op2;
1.1.1.2   misho    15219:        zval *offset;
1.1       misho    15220: 
1.1.1.2   misho    15221:        SAVE_OPLINE();
                   15222:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15223:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15224: 
                   15225:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   15226:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   15227:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   15228:                PZVAL_LOCK(&EG(uninitialized_zval));
                   15229:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    15230:                zval_dtor(free_op2.var);
                   15231:        } else {
                   15232:                zval *retval;
                   15233: 
                   15234:                if (1) {
                   15235:                        MAKE_REAL_ZVAL_PTR(offset);
                   15236:                }
                   15237: 
                   15238:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    15239:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    15240: 
1.1.1.2   misho    15241:                PZVAL_LOCK(retval);
                   15242:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    15243: 
                   15244:                if (1) {
                   15245:                        zval_ptr_dtor(&offset);
                   15246:                } else {
                   15247:                        zval_dtor(free_op2.var);
                   15248:                }
                   15249:        }
                   15250: 
                   15251:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15252:        CHECK_EXCEPTION();
1.1       misho    15253:        ZEND_VM_NEXT_OPCODE();
                   15254: }
                   15255: 
                   15256: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15257: {
1.1.1.2   misho    15258:        return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    15259: }
                   15260: 
                   15261: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15262: {
1.1.1.2   misho    15263:        USE_OPLINE
1.1       misho    15264:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15265:        zval *property;
1.1       misho    15266:        zval **container;
                   15267: 
1.1.1.2   misho    15268:        SAVE_OPLINE();
                   15269:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15270: 
1.1       misho    15271:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    15272:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   15273:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    15274:        }
                   15275: 
                   15276:        if (1) {
                   15277:                MAKE_REAL_ZVAL_PTR(property);
                   15278:        }
1.1.1.2   misho    15279:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15280:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15281:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   15282:        }
1.1.1.2   misho    15283: 
                   15284:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    15285:        if (1) {
                   15286:                zval_ptr_dtor(&property);
                   15287:        } else {
                   15288:                zval_dtor(free_op2.var);
                   15289:        }
1.1.1.2   misho    15290:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15291:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15292:        }
                   15293:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15294: 
                   15295:        /* We are going to assign the result by reference */
                   15296:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    15297:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   15298: 
                   15299:                Z_DELREF_PP(retval_ptr);
                   15300:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   15301:                Z_ADDREF_PP(retval_ptr);
                   15302:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   15303:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    15304:        }
                   15305: 
1.1.1.2   misho    15306:        CHECK_EXCEPTION();
1.1       misho    15307:        ZEND_VM_NEXT_OPCODE();
                   15308: }
                   15309: 
                   15310: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15311: {
1.1.1.2   misho    15312:        USE_OPLINE
1.1       misho    15313:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15314:        zval *property;
                   15315:        zval **container;
                   15316: 
                   15317:        SAVE_OPLINE();
                   15318:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15319:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15320: 
                   15321:        if (1) {
                   15322:                MAKE_REAL_ZVAL_PTR(property);
                   15323:        }
1.1.1.2   misho    15324:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15325:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   15326:        }
1.1.1.2   misho    15327:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    15328:        if (1) {
                   15329:                zval_ptr_dtor(&property);
                   15330:        } else {
                   15331:                zval_dtor(free_op2.var);
                   15332:        }
1.1.1.2   misho    15333:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15334:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15335:        }
                   15336:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15337:        CHECK_EXCEPTION();
1.1       misho    15338:        ZEND_VM_NEXT_OPCODE();
                   15339: }
                   15340: 
                   15341: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15342: {
1.1.1.2   misho    15343:        USE_OPLINE
                   15344:        zend_free_op free_op1;
                   15345:        zval *container;
                   15346:        zend_free_op free_op2;
                   15347:        zval *offset;
                   15348: 
                   15349:        SAVE_OPLINE();
                   15350:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15351:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15352: 
                   15353:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   15354:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   15355:                PZVAL_LOCK(&EG(uninitialized_zval));
                   15356:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   15357:                zval_dtor(free_op2.var);
                   15358:        } else {
                   15359:                zval *retval;
                   15360: 
                   15361:                if (1) {
                   15362:                        MAKE_REAL_ZVAL_PTR(offset);
                   15363:                }
                   15364: 
                   15365:                /* here we are sure we are dealing with an object */
                   15366:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   15367: 
                   15368:                PZVAL_LOCK(retval);
                   15369:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   15370: 
                   15371:                if (1) {
                   15372:                        zval_ptr_dtor(&offset);
                   15373:                } else {
                   15374:                        zval_dtor(free_op2.var);
                   15375:                }
                   15376:        }
                   15377: 
                   15378:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15379:        CHECK_EXCEPTION();
                   15380:        ZEND_VM_NEXT_OPCODE();
1.1       misho    15381: }
                   15382: 
                   15383: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15384: {
1.1.1.2   misho    15385:        USE_OPLINE
1.1       misho    15386: 
1.1.1.2   misho    15387:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    15388:                /* Behave like FETCH_OBJ_W */
                   15389:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    15390:                zval *property;
                   15391:                zval **container;
                   15392: 
                   15393:                SAVE_OPLINE();
                   15394:                property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15395:                container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15396: 
                   15397:                if (1) {
                   15398:                        MAKE_REAL_ZVAL_PTR(property);
                   15399:                }
1.1.1.2   misho    15400:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15401:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   15402:                }
1.1.1.2   misho    15403:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    15404:                if (1) {
                   15405:                        zval_ptr_dtor(&property);
                   15406:                } else {
                   15407:                        zval_dtor(free_op2.var);
                   15408:                }
1.1.1.2   misho    15409:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15410:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15411:                }
                   15412:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    15413:                CHECK_EXCEPTION();
1.1       misho    15414:                ZEND_VM_NEXT_OPCODE();
                   15415:        } else {
1.1.1.2   misho    15416:                return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    15417:        }
                   15418: }
                   15419: 
                   15420: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15421: {
1.1.1.2   misho    15422:        USE_OPLINE
1.1       misho    15423:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    15424:        zval **container;
                   15425:        zval *property;
                   15426: 
                   15427:        SAVE_OPLINE();
                   15428:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15429:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15430: 
                   15431:        if (IS_VAR == IS_CV) {
                   15432:                if (container != &EG(uninitialized_zval_ptr)) {
                   15433:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   15434:                }
                   15435:        }
                   15436:        if (1) {
                   15437:                MAKE_REAL_ZVAL_PTR(property);
                   15438:        }
1.1.1.2   misho    15439:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    15440:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   15441:        }
1.1.1.2   misho    15442:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    15443:        if (1) {
                   15444:                zval_ptr_dtor(&property);
                   15445:        } else {
                   15446:                zval_dtor(free_op2.var);
                   15447:        }
1.1.1.2   misho    15448:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   15449:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    15450:        }
                   15451:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15452: 
1.1.1.2   misho    15453:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   15454:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   15455:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    15456:        }
1.1.1.2   misho    15457:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    15458:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    15459:        CHECK_EXCEPTION();
1.1       misho    15460:        ZEND_VM_NEXT_OPCODE();
                   15461: }
                   15462: 
                   15463: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15464: {
1.1.1.2   misho    15465:        USE_OPLINE
1.1       misho    15466:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15467:        zval **object_ptr;
                   15468:        zval *property_name;
                   15469: 
                   15470:        SAVE_OPLINE();
                   15471:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15472:        property_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15473: 
                   15474:        if (1) {
                   15475:                MAKE_REAL_ZVAL_PTR(property_name);
                   15476:        }
1.1.1.2   misho    15477:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    15478:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15479:        }
1.1.1.2   misho    15480:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    15481:        if (1) {
                   15482:                zval_ptr_dtor(&property_name);
                   15483:        } else {
                   15484:                zval_dtor(free_op2.var);
                   15485:        }
                   15486:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15487:        /* assign_obj has two opcodes! */
1.1.1.2   misho    15488:        CHECK_EXCEPTION();
1.1       misho    15489:        ZEND_VM_INC_OPCODE();
                   15490:        ZEND_VM_NEXT_OPCODE();
                   15491: }
                   15492: 
                   15493: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15494: {
1.1.1.2   misho    15495:        USE_OPLINE
1.1       misho    15496:        zend_free_op free_op1;
1.1.1.2   misho    15497:        zval **object_ptr;
1.1       misho    15498: 
1.1.1.2   misho    15499:        SAVE_OPLINE();
                   15500:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15501: 
                   15502:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    15503:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   15504:        }
                   15505:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   15506:                zend_free_op free_op2;
1.1.1.2   misho    15507:                zval *property_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15508: 
                   15509:                if (1) {
                   15510:                        MAKE_REAL_ZVAL_PTR(property_name);
                   15511:                }
1.1.1.2   misho    15512:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    15513:                if (1) {
                   15514:                        zval_ptr_dtor(&property_name);
                   15515:                } else {
                   15516:                        zval_dtor(free_op2.var);
                   15517:                }
                   15518:        } else {
                   15519:                zend_free_op free_op2, free_op_data1, free_op_data2;
                   15520:                zval *value;
1.1.1.2   misho    15521:                zval *dim = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15522:                zval **variable_ptr_ptr;
                   15523: 
1.1.1.2   misho    15524:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    15525:                zval_dtor(free_op2.var);
                   15526: 
1.1.1.2   misho    15527:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   15528:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   15529:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   15530:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   15531:                                if (RETURN_VALUE_USED(opline)) {
                   15532:                                        zval *retval;
                   15533: 
                   15534:                                        ALLOC_ZVAL(retval);
                   15535:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   15536:                                        INIT_PZVAL(retval);
                   15537:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   15538:                                }
                   15539:                        } else if (RETURN_VALUE_USED(opline)) {
                   15540:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   15541:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   15542:                        }
                   15543:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   15544:                        if (IS_TMP_FREE(free_op_data1)) {
                   15545:                                zval_dtor(value);
                   15546:                        }
                   15547:                        if (RETURN_VALUE_USED(opline)) {
                   15548:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   15549:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   15550:                        }
                   15551:                } else {
                   15552:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   15553:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15554:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   15555:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15556:                        } else {
                   15557:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15558:                        }
                   15559:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    15560:                                PZVAL_LOCK(value);
1.1.1.2   misho    15561:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    15562:                        }
                   15563:                }
                   15564:                FREE_OP_VAR_PTR(free_op_data2);
                   15565:                FREE_OP_IF_VAR(free_op_data1);
                   15566:        }
                   15567:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15568:        /* assign_dim has two opcodes! */
1.1.1.2   misho    15569:        CHECK_EXCEPTION();
1.1       misho    15570:        ZEND_VM_INC_OPCODE();
                   15571:        ZEND_VM_NEXT_OPCODE();
                   15572: }
                   15573: 
                   15574: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15575: {
1.1.1.2   misho    15576:        USE_OPLINE
1.1       misho    15577:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15578:        zval *value;
                   15579:        zval **variable_ptr_ptr;
1.1       misho    15580: 
1.1.1.2   misho    15581:        SAVE_OPLINE();
                   15582:        value = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15583:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15584: 
                   15585:        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   15586:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_TMP_VAR TSRMLS_CC)) {
                   15587:                        if (RETURN_VALUE_USED(opline)) {
                   15588:                                zval *retval;
                   15589: 
                   15590:                                ALLOC_ZVAL(retval);
                   15591:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   15592:                                INIT_PZVAL(retval);
                   15593:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   15594:                        }
                   15595:                } else if (RETURN_VALUE_USED(opline)) {
                   15596:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   15597:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   15598:                }
                   15599:        } else if (IS_VAR == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   15600:                if (1) {
                   15601:                        zval_dtor(value);
                   15602:                }
                   15603:                if (RETURN_VALUE_USED(opline)) {
                   15604:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   15605:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   15606:                }
                   15607:        } else {
                   15608:                if (IS_TMP_VAR == IS_TMP_VAR) {
                   15609:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15610:                } else if (IS_TMP_VAR == IS_CONST) {
                   15611:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15612:                } else {
                   15613:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   15614:                }
                   15615:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    15616:                        PZVAL_LOCK(value);
1.1.1.2   misho    15617:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    15618:                }
                   15619:        }
                   15620: 
                   15621:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15622: 
                   15623:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   15624: 
1.1.1.2   misho    15625:        CHECK_EXCEPTION();
1.1       misho    15626:        ZEND_VM_NEXT_OPCODE();
                   15627: }
                   15628: 
                   15629: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15630: {
1.1.1.2   misho    15631:        USE_OPLINE
1.1       misho    15632:        zval *function_name;
                   15633:        char *function_name_strval;
                   15634:        int function_name_strlen;
                   15635:        zend_free_op free_op1, free_op2;
                   15636: 
1.1.1.2   misho    15637:        SAVE_OPLINE();
1.1       misho    15638:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   15639: 
1.1.1.2   misho    15640:        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15641: 
1.1.1.2   misho    15642:        if (IS_TMP_VAR != IS_CONST &&
                   15643:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    15644:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   15645:        }
                   15646: 
                   15647:        function_name_strval = Z_STRVAL_P(function_name);
                   15648:        function_name_strlen = Z_STRLEN_P(function_name);
                   15649: 
1.1.1.2   misho    15650:        EX(object) = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15651: 
1.1.1.2   misho    15652:        if (EXPECTED(EX(object) != NULL) &&
                   15653:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   15654:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    15655: 
1.1.1.2   misho    15656:                if (IS_TMP_VAR != IS_CONST ||
                   15657:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   15658:                    zval *object = EX(object);
                   15659: 
                   15660:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   15661:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   15662:                        }
                   15663: 
                   15664:                        /* First, locate the function. */
                   15665:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   15666:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   15667:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   15668:                        }
                   15669:                        if (IS_TMP_VAR == IS_CONST &&
                   15670:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   15671:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   15672:                            EXPECTED(EX(object) == object)) {
                   15673:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   15674:                        }
1.1       misho    15675:                }
                   15676:        } else {
                   15677:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   15678:        }
                   15679: 
                   15680:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   15681:                EX(object) = NULL;
                   15682:        } else {
                   15683:                if (!PZVAL_IS_REF(EX(object))) {
                   15684:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   15685:                } else {
                   15686:                        zval *this_ptr;
                   15687:                        ALLOC_ZVAL(this_ptr);
                   15688:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   15689:                        zval_copy_ctor(this_ptr);
                   15690:                        EX(object) = this_ptr;
                   15691:                }
                   15692:        }
                   15693: 
                   15694:        zval_dtor(free_op2.var);
                   15695:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15696: 
1.1.1.2   misho    15697:        CHECK_EXCEPTION();
1.1       misho    15698:        ZEND_VM_NEXT_OPCODE();
                   15699: }
                   15700: 
                   15701: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15702: {
1.1.1.2   misho    15703:        USE_OPLINE
1.1       misho    15704:        zval *function_name;
                   15705:        zend_class_entry *ce;
                   15706: 
1.1.1.2   misho    15707:        SAVE_OPLINE();
1.1       misho    15708:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   15709: 
                   15710:        if (IS_VAR == IS_CONST) {
                   15711:                /* no function found. try a static method in class */
1.1.1.2   misho    15712:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   15713:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   15714:                } else {
                   15715:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    15716:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   15717:                                HANDLE_EXCEPTION();
                   15718:                        }
1.1.1.2   misho    15719:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    15720:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    15721:                        }
                   15722:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    15723:                }
                   15724:                EX(called_scope) = ce;
                   15725:        } else {
1.1.1.2   misho    15726:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    15727: 
1.1.1.2   misho    15728:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    15729:                        EX(called_scope) = EG(called_scope);
                   15730:                } else {
                   15731:                        EX(called_scope) = ce;
                   15732:                }
                   15733:        }
1.1.1.2   misho    15734: 
                   15735:        if (IS_VAR == IS_CONST &&
                   15736:            IS_TMP_VAR == IS_CONST &&
                   15737:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   15738:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   15739:        } else if (IS_VAR != IS_CONST &&
                   15740:                   IS_TMP_VAR == IS_CONST &&
                   15741:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   15742:                /* do nothing */
                   15743:        } else if (IS_TMP_VAR != IS_UNUSED) {
1.1       misho    15744:                char *function_name_strval = NULL;
                   15745:                int function_name_strlen = 0;
                   15746:                zend_free_op free_op2;
                   15747: 
                   15748:                if (IS_TMP_VAR == IS_CONST) {
1.1.1.2   misho    15749:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   15750:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    15751:                } else {
1.1.1.2   misho    15752:                        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15753: 
1.1.1.2   misho    15754:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    15755:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   15756:                        } else {
                   15757:                                function_name_strval = Z_STRVAL_P(function_name);
                   15758:                                function_name_strlen = Z_STRLEN_P(function_name);
                   15759:                        }
                   15760:                }
                   15761: 
                   15762:                if (function_name_strval) {
                   15763:                        if (ce->get_static_method) {
                   15764:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   15765:                        } else {
1.1.1.2   misho    15766:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    15767:                        }
1.1.1.2   misho    15768:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    15769:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   15770:                        }
1.1.1.2   misho    15771:                        if (IS_TMP_VAR == IS_CONST &&
                   15772:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   15773:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   15774:                                if (IS_VAR == IS_CONST) {
                   15775:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   15776:                                } else {
                   15777:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   15778:                                }
                   15779:                        }
1.1       misho    15780:                }
                   15781:                if (IS_TMP_VAR != IS_CONST) {
                   15782:                        zval_dtor(free_op2.var);
                   15783:                }
                   15784:        } else {
1.1.1.2   misho    15785:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    15786:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   15787:                }
                   15788:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    15789:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    15790:                }
                   15791:                EX(fbc) = ce->constructor;
                   15792:        }
                   15793: 
                   15794:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   15795:                EX(object) = NULL;
                   15796:        } else {
                   15797:                if (EG(This) &&
                   15798:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   15799:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   15800:                    /* We are calling method of the other (incompatible) class,
                   15801:                       but passing $this. This is done for compatibility with php-4. */
                   15802:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    15803:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    15804:                        } else {
                   15805:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    15806:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    15807:                        }
                   15808:                }
                   15809:                if ((EX(object) = EG(This))) {
                   15810:                        Z_ADDREF_P(EX(object));
                   15811:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   15812:                }
                   15813:        }
                   15814: 
1.1.1.2   misho    15815:        CHECK_EXCEPTION();
1.1       misho    15816:        ZEND_VM_NEXT_OPCODE();
                   15817: }
                   15818: 
                   15819: static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15820: {
1.1.1.2   misho    15821:        USE_OPLINE
1.1       misho    15822:        zend_free_op free_op1, free_op2;
                   15823: 
1.1.1.2   misho    15824:        SAVE_OPLINE();
1.1       misho    15825:        if (IS_VAR==IS_VAR) {
1.1.1.2   misho    15826:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    15827:        }
1.1.1.2   misho    15828:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   15829:                                 _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   15830:                                 _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    15831: 
                   15832:        zval_dtor(free_op2.var);
1.1.1.2   misho    15833:        CHECK_EXCEPTION();
1.1       misho    15834:        ZEND_VM_NEXT_OPCODE();
                   15835: }
                   15836: 
                   15837: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15838: {
1.1.1.2   misho    15839:        USE_OPLINE
                   15840:        zend_free_op free_op1;
1.1       misho    15841:        zval *expr_ptr;
                   15842: 
1.1.1.2   misho    15843:        SAVE_OPLINE();
                   15844:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   15845:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15846: 
1.1.1.2   misho    15847:                if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   15848:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   15849:                }
                   15850:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    15851:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    15852:                Z_ADDREF_P(expr_ptr);
1.1       misho    15853:        } else {
1.1.1.2   misho    15854:                expr_ptr=_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   15855:                if (0) { /* temporary variable */
                   15856:                        zval *new_expr;
1.1       misho    15857: 
1.1.1.2   misho    15858:                        ALLOC_ZVAL(new_expr);
                   15859:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   15860:                        expr_ptr = new_expr;
                   15861:                } else if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    15862:                        zval *new_expr;
                   15863: 
                   15864:                        ALLOC_ZVAL(new_expr);
                   15865:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   15866:                        expr_ptr = new_expr;
                   15867:                        zendi_zval_copy_ctor(*expr_ptr);
                   15868:                } else {
                   15869:                        Z_ADDREF_P(expr_ptr);
                   15870:                }
                   15871:        }
1.1.1.2   misho    15872: 
                   15873:        if (IS_TMP_VAR != IS_UNUSED) {
                   15874:                zend_free_op free_op2;
                   15875:                zval *offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   15876:                ulong hval;
                   15877: 
1.1       misho    15878:                switch (Z_TYPE_P(offset)) {
                   15879:                        case IS_DOUBLE:
1.1.1.2   misho    15880:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   15881:                                goto num_index;
1.1       misho    15882:                        case IS_LONG:
                   15883:                        case IS_BOOL:
1.1.1.2   misho    15884:                                hval = Z_LVAL_P(offset);
                   15885: num_index:
                   15886:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    15887:                                break;
                   15888:                        case IS_STRING:
1.1.1.2   misho    15889:                                if (IS_TMP_VAR == IS_CONST) {
                   15890:                                        hval = Z_HASH_P(offset);
                   15891:                                } else {
                   15892:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   15893:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   15894:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   15895:                                        } else {
                   15896:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   15897:                                        }
                   15898:                                }
                   15899:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    15900:                                break;
                   15901:                        case IS_NULL:
1.1.1.2   misho    15902:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    15903:                                break;
                   15904:                        default:
                   15905:                                zend_error(E_WARNING, "Illegal offset type");
                   15906:                                zval_ptr_dtor(&expr_ptr);
                   15907:                                /* do nothing */
                   15908:                                break;
                   15909:                }
                   15910:                zval_dtor(free_op2.var);
                   15911:        } else {
1.1.1.2   misho    15912:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    15913:        }
1.1.1.2   misho    15914:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
1.1       misho    15915:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15916:        } else {
                   15917:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   15918:        }
1.1.1.2   misho    15919:        CHECK_EXCEPTION();
1.1       misho    15920:        ZEND_VM_NEXT_OPCODE();
                   15921: }
                   15922: 
                   15923: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15924: {
1.1.1.2   misho    15925:        USE_OPLINE
1.1       misho    15926: 
1.1.1.2   misho    15927:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    15928:        if (IS_VAR == IS_UNUSED) {
                   15929:                ZEND_VM_NEXT_OPCODE();
                   15930: #if 0 || IS_VAR != IS_UNUSED
                   15931:        } else {
                   15932:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   15933: #endif
                   15934:        }
                   15935: }
                   15936: 
                   15937: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   15938: {
1.1.1.2   misho    15939:        USE_OPLINE
1.1       misho    15940:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    15941:        zval **container;
1.1       misho    15942:        zval *offset;
1.1.1.2   misho    15943:        ulong hval;
1.1       misho    15944: 
1.1.1.2   misho    15945:        SAVE_OPLINE();
                   15946:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    15947:        if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   15948:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   15949:        }
1.1.1.2   misho    15950:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    15951: 
                   15952:        if (IS_VAR != IS_VAR || container) {
                   15953:                switch (Z_TYPE_PP(container)) {
                   15954:                        case IS_ARRAY: {
                   15955:                                HashTable *ht = Z_ARRVAL_PP(container);
                   15956: 
                   15957:                                switch (Z_TYPE_P(offset)) {
                   15958:                                        case IS_DOUBLE:
1.1.1.2   misho    15959:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    15960:                                                zend_hash_index_del(ht, hval);
                   15961:                                                break;
1.1       misho    15962:                                        case IS_RESOURCE:
                   15963:                                        case IS_BOOL:
                   15964:                                        case IS_LONG:
1.1.1.2   misho    15965:                                                hval = Z_LVAL_P(offset);
                   15966:                                                zend_hash_index_del(ht, hval);
1.1       misho    15967:                                                break;
                   15968:                                        case IS_STRING:
                   15969:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   15970:                                                        Z_ADDREF_P(offset);
                   15971:                                                }
1.1.1.2   misho    15972:                                                if (IS_TMP_VAR == IS_CONST) {
                   15973:                                                        hval = Z_HASH_P(offset);
                   15974:                                                } else {
                   15975:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   15976:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   15977:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   15978:                                                        } else {
                   15979:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    15980:                                                        }
                   15981:                                                }
1.1.1.2   misho    15982:                                                if (ht == &EG(symbol_table)) {
                   15983:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   15984:                                                } else {
                   15985:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   15986:                                                }
                   15987:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   15988:                                                        zval_ptr_dtor(&offset);
                   15989:                                                }
                   15990:                                                break;
                   15991: num_index_dim:
                   15992:                                                zend_hash_index_del(ht, hval);
1.1       misho    15993:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   15994:                                                        zval_ptr_dtor(&offset);
                   15995:                                                }
                   15996:                                                break;
                   15997:                                        case IS_NULL:
                   15998:                                                zend_hash_del(ht, "", sizeof(""));
                   15999:                                                break;
                   16000:                                        default:
                   16001:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   16002:                                                break;
                   16003:                                }
                   16004:                                zval_dtor(free_op2.var);
                   16005:                                break;
                   16006:                        }
                   16007:                        case IS_OBJECT:
1.1.1.2   misho    16008:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    16009:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   16010:                                }
                   16011:                                if (1) {
                   16012:                                        MAKE_REAL_ZVAL_PTR(offset);
                   16013:                                }
                   16014:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   16015:                                if (1) {
                   16016:                                        zval_ptr_dtor(&offset);
                   16017:                                } else {
                   16018:                                        zval_dtor(free_op2.var);
                   16019:                                }
                   16020:                                break;
                   16021:                        case IS_STRING:
                   16022:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   16023:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   16024:                        default:
                   16025:                                zval_dtor(free_op2.var);
                   16026:                                break;
                   16027:                }
                   16028:        } else {
                   16029:                zval_dtor(free_op2.var);
                   16030:        }
                   16031:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16032: 
1.1.1.2   misho    16033:        CHECK_EXCEPTION();
1.1       misho    16034:        ZEND_VM_NEXT_OPCODE();
                   16035: }
                   16036: 
                   16037: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16038: {
1.1.1.2   misho    16039:        USE_OPLINE
1.1       misho    16040:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16041:        zval **container;
                   16042:        zval *offset;
                   16043: 
                   16044:        SAVE_OPLINE();
                   16045:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   16046:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    16047: 
                   16048:        if (IS_VAR != IS_VAR || container) {
                   16049:                if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   16050:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   16051:                }
                   16052:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   16053:                        if (1) {
                   16054:                                MAKE_REAL_ZVAL_PTR(offset);
                   16055:                        }
                   16056:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    16057:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16058:                        } else {
                   16059:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   16060:                        }
                   16061:                        if (1) {
                   16062:                                zval_ptr_dtor(&offset);
                   16063:                        } else {
                   16064:                                zval_dtor(free_op2.var);
                   16065:                        }
                   16066:                } else {
                   16067:                        zval_dtor(free_op2.var);
                   16068:                }
                   16069:        } else {
                   16070:                zval_dtor(free_op2.var);
                   16071:        }
                   16072:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16073: 
1.1.1.2   misho    16074:        CHECK_EXCEPTION();
1.1       misho    16075:        ZEND_VM_NEXT_OPCODE();
                   16076: }
                   16077: 
                   16078: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   16079: {
1.1.1.2   misho    16080:        USE_OPLINE
                   16081:        zend_free_op free_op1, free_op2;
                   16082:        zval **container;
1.1       misho    16083:        zval **value = NULL;
                   16084:        int result = 0;
1.1.1.2   misho    16085:        ulong hval;
                   16086:        zval *offset;
1.1       misho    16087: 
1.1.1.2   misho    16088:        SAVE_OPLINE();
                   16089:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    16090: 
1.1.1.2   misho    16091:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    16092: 
1.1.1.2   misho    16093:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   16094:                HashTable *ht;
                   16095:                int isset = 0;
1.1       misho    16096: 
1.1.1.2   misho    16097:                ht = Z_ARRVAL_PP(container);
                   16098: 
                   16099:                switch (Z_TYPE_P(offset)) {
                   16100:                        case IS_DOUBLE:
                   16101:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   16102:                                goto num_index_prop;
                   16103:                        case IS_RESOURCE:
                   16104:                        case IS_BOOL:
                   16105:                        case IS_LONG:
                   16106:                                hval = Z_LVAL_P(offset);
                   16107: num_index_prop:
                   16108:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   16109:                                        isset = 1;
                   16110:                                }
                   16111:                                break;
                   16112:                        case IS_STRING:
                   16113:                                if (IS_TMP_VAR == IS_CONST) {
                   16114:                                        hval = Z_HASH_P(offset);
                   16115:                                } else {
                   16116:                                        if (!prop_dim) {
                   16117:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    16118:                                        }
1.1.1.2   misho    16119:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   16120:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    16121:                                        } else {
1.1.1.2   misho    16122:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    16123:                                        }
1.1.1.2   misho    16124:                                }
                   16125:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   16126:                                        isset = 1;
                   16127:                                }
                   16128:                                break;
                   16129:                        case IS_NULL:
                   16130:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   16131:                                        isset = 1;
                   16132:                                }
                   16133:                                break;
                   16134:                        default:
                   16135:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   16136:                                break;
                   16137:                }
                   16138: 
                   16139:                if (opline->extended_value & ZEND_ISSET) {
                   16140:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   16141:                                result = 0;
                   16142:                        } else {
                   16143:                                result = isset;
1.1       misho    16144:                        }
1.1.1.2   misho    16145:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   16146:                        if (!isset || !i_zend_is_true(*value)) {
                   16147:                                result = 0;
                   16148:                        } else {
                   16149:                                result = 1;
1.1       misho    16150:                        }
1.1.1.2   misho    16151:                }
                   16152:                zval_dtor(free_op2.var);
                   16153:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   16154:                if (1) {
                   16155:                        MAKE_REAL_ZVAL_PTR(offset);
                   16156:                }
                   16157:                if (prop_dim) {
                   16158:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   16159:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16160:                        } else {
1.1.1.2   misho    16161:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   16162:                                result = 0;
1.1       misho    16163:                        }
1.1.1.2   misho    16164:                } else {
                   16165:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   16166:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    16167:                        } else {
1.1.1.2   misho    16168:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   16169:                                result = 0;
1.1       misho    16170:                        }
1.1.1.2   misho    16171:                }
                   16172:                if (1) {
                   16173:                        zval_ptr_dtor(&offset);
                   16174:                } else {
                   16175:                        zval_dtor(free_op2.var);
                   16176:                }
                   16177:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   16178:                zval tmp;
1.1       misho    16179: 
1.1.1.2   misho    16180:                if (Z_TYPE_P(offset) != IS_LONG) {
                   16181:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   16182:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   16183:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   16184:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    16185:                                zval_copy_ctor(&tmp);
                   16186:                                convert_to_long(&tmp);
                   16187:                                offset = &tmp;
1.1.1.2   misho    16188:                        } else {
                   16189:                                /* can not be converted to proper offset, return "not set" */
                   16190:                                result = 0;
1.1       misho    16191:                        }
1.1.1.2   misho    16192:                }
                   16193:                if (Z_TYPE_P(offset) == IS_LONG) {
                   16194:                        if (opline->extended_value & ZEND_ISSET) {
                   16195:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   16196:                                        result = 1;
                   16197:                                }
                   16198:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   16199:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   16200:                                        result = 1;
1.1       misho    16201:                                }
                   16202:                        }
                   16203:                }
1.1.1.2   misho    16204:                zval_dtor(free_op2.var);
                   16205:        } else {
                   16206:                zval_dtor(free_op2.var);
1.1       misho    16207:        }
                   16208: 
1.1.1.2   misho    16209:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   16210:        if (opline->extended_value & ZEND_ISSET) {
                   16211:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   16212:        } else {
                   16213:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    16214:        }
                   16215: 
                   16216:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16217: 
1.1.1.2   misho    16218:        CHECK_EXCEPTION();
1.1       misho    16219:        ZEND_VM_NEXT_OPCODE();
                   16220: }
                   16221: 
                   16222: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16223: {
                   16224:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16225: }
                   16226: 
                   16227: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16228: {
                   16229:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16230: }
                   16231: 
                   16232: static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16233: {
1.1.1.2   misho    16234:        USE_OPLINE
1.1       misho    16235:        zend_free_op free_op1, free_op2;
                   16236: 
1.1.1.2   misho    16237:        SAVE_OPLINE();
                   16238:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   16239:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16240:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16241:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16242:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16243:        CHECK_EXCEPTION();
1.1       misho    16244:        ZEND_VM_NEXT_OPCODE();
                   16245: }
                   16246: 
                   16247: static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16248: {
1.1.1.2   misho    16249:        USE_OPLINE
1.1       misho    16250:        zend_free_op free_op1, free_op2;
                   16251: 
1.1.1.2   misho    16252:        SAVE_OPLINE();
                   16253:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   16254:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16255:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16256:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16257:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16258:        CHECK_EXCEPTION();
1.1       misho    16259:        ZEND_VM_NEXT_OPCODE();
                   16260: }
                   16261: 
                   16262: static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16263: {
1.1.1.2   misho    16264:        USE_OPLINE
1.1       misho    16265:        zend_free_op free_op1, free_op2;
                   16266: 
1.1.1.2   misho    16267:        SAVE_OPLINE();
                   16268:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   16269:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16270:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16271:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16272:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16273:        CHECK_EXCEPTION();
1.1       misho    16274:        ZEND_VM_NEXT_OPCODE();
                   16275: }
                   16276: 
                   16277: static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16278: {
1.1.1.2   misho    16279:        USE_OPLINE
1.1       misho    16280:        zend_free_op free_op1, free_op2;
                   16281: 
1.1.1.2   misho    16282:        SAVE_OPLINE();
                   16283:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   16284:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16285:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16286:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16287:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16288:        CHECK_EXCEPTION();
1.1       misho    16289:        ZEND_VM_NEXT_OPCODE();
                   16290: }
                   16291: 
                   16292: static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16293: {
1.1.1.2   misho    16294:        USE_OPLINE
1.1       misho    16295:        zend_free_op free_op1, free_op2;
                   16296: 
1.1.1.2   misho    16297:        SAVE_OPLINE();
                   16298:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   16299:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16300:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16301:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16302:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16303:        CHECK_EXCEPTION();
1.1       misho    16304:        ZEND_VM_NEXT_OPCODE();
                   16305: }
                   16306: 
                   16307: static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16308: {
1.1.1.2   misho    16309:        USE_OPLINE
1.1       misho    16310:        zend_free_op free_op1, free_op2;
                   16311: 
1.1.1.2   misho    16312:        SAVE_OPLINE();
                   16313:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   16314:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16315:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16316:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16317:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16318:        CHECK_EXCEPTION();
1.1       misho    16319:        ZEND_VM_NEXT_OPCODE();
                   16320: }
                   16321: 
                   16322: static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16323: {
1.1.1.2   misho    16324:        USE_OPLINE
1.1       misho    16325:        zend_free_op free_op1, free_op2;
                   16326: 
1.1.1.2   misho    16327:        SAVE_OPLINE();
                   16328:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   16329:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16330:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16331:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16332:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16333:        CHECK_EXCEPTION();
1.1       misho    16334:        ZEND_VM_NEXT_OPCODE();
                   16335: }
                   16336: 
                   16337: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16338: {
1.1.1.2   misho    16339:        USE_OPLINE
1.1       misho    16340:        zend_free_op free_op1, free_op2;
                   16341: 
1.1.1.2   misho    16342:        SAVE_OPLINE();
                   16343:        concat_function(&EX_T(opline->result.var).tmp_var,
                   16344:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16345:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16346:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16347:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16348:        CHECK_EXCEPTION();
1.1       misho    16349:        ZEND_VM_NEXT_OPCODE();
                   16350: }
                   16351: 
                   16352: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16353: {
1.1.1.2   misho    16354:        USE_OPLINE
1.1       misho    16355:        zend_free_op free_op1, free_op2;
                   16356: 
1.1.1.2   misho    16357:        SAVE_OPLINE();
                   16358:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   16359:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16360:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16361:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16362:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16363:        CHECK_EXCEPTION();
1.1       misho    16364:        ZEND_VM_NEXT_OPCODE();
                   16365: }
                   16366: 
                   16367: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16368: {
1.1.1.2   misho    16369:        USE_OPLINE
1.1       misho    16370:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16371:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    16372: 
1.1.1.2   misho    16373:        SAVE_OPLINE();
1.1       misho    16374:        is_identical_function(result,
1.1.1.2   misho    16375:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16376:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16377:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   16378:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16379:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16380:        CHECK_EXCEPTION();
1.1       misho    16381:        ZEND_VM_NEXT_OPCODE();
                   16382: }
                   16383: 
                   16384: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16385: {
1.1.1.2   misho    16386:        USE_OPLINE
1.1       misho    16387:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16388:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    16389: 
1.1.1.2   misho    16390:        SAVE_OPLINE();
                   16391:        ZVAL_BOOL(result, fast_equal_function(result,
                   16392:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16393:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    16394:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16395:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16396:        CHECK_EXCEPTION();
1.1       misho    16397:        ZEND_VM_NEXT_OPCODE();
                   16398: }
                   16399: 
                   16400: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16401: {
1.1.1.2   misho    16402:        USE_OPLINE
1.1       misho    16403:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16404:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    16405: 
1.1.1.2   misho    16406:        SAVE_OPLINE();
                   16407:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   16408:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16409:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    16410:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16411:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16412:        CHECK_EXCEPTION();
1.1       misho    16413:        ZEND_VM_NEXT_OPCODE();
                   16414: }
                   16415: 
                   16416: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16417: {
1.1.1.2   misho    16418:        USE_OPLINE
1.1       misho    16419:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16420:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    16421: 
1.1.1.2   misho    16422:        SAVE_OPLINE();
                   16423:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   16424:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16425:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    16426:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16427:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16428:        CHECK_EXCEPTION();
1.1       misho    16429:        ZEND_VM_NEXT_OPCODE();
                   16430: }
                   16431: 
                   16432: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16433: {
1.1.1.2   misho    16434:        USE_OPLINE
1.1       misho    16435:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16436:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    16437: 
1.1.1.2   misho    16438:        SAVE_OPLINE();
                   16439:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   16440:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16441:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    16442:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16443:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16444:        CHECK_EXCEPTION();
1.1       misho    16445:        ZEND_VM_NEXT_OPCODE();
                   16446: }
                   16447: 
                   16448: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16449: {
1.1.1.2   misho    16450:        USE_OPLINE
1.1       misho    16451:        zend_free_op free_op1, free_op2;
                   16452: 
1.1.1.2   misho    16453:        SAVE_OPLINE();
                   16454:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   16455:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16456:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16457:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16458:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16459:        CHECK_EXCEPTION();
1.1       misho    16460:        ZEND_VM_NEXT_OPCODE();
                   16461: }
                   16462: 
                   16463: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16464: {
1.1.1.2   misho    16465:        USE_OPLINE
1.1       misho    16466:        zend_free_op free_op1, free_op2;
                   16467: 
1.1.1.2   misho    16468:        SAVE_OPLINE();
                   16469:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   16470:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16471:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16472:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16473:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16474:        CHECK_EXCEPTION();
1.1       misho    16475:        ZEND_VM_NEXT_OPCODE();
                   16476: }
                   16477: 
                   16478: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16479: {
1.1.1.2   misho    16480:        USE_OPLINE
1.1       misho    16481:        zend_free_op free_op1, free_op2;
                   16482: 
1.1.1.2   misho    16483:        SAVE_OPLINE();
                   16484:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   16485:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16486:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16487:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16488:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16489:        CHECK_EXCEPTION();
1.1       misho    16490:        ZEND_VM_NEXT_OPCODE();
                   16491: }
                   16492: 
                   16493: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16494: {
1.1.1.2   misho    16495:        USE_OPLINE
1.1       misho    16496:        zend_free_op free_op1, free_op2;
                   16497: 
1.1.1.2   misho    16498:        SAVE_OPLINE();
                   16499:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   16500:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   16501:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    16502:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16503:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16504:        CHECK_EXCEPTION();
1.1       misho    16505:        ZEND_VM_NEXT_OPCODE();
                   16506: }
                   16507: 
                   16508: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   16509: {
1.1.1.2   misho    16510:        USE_OPLINE
1.1       misho    16511:        zend_free_op free_op1, free_op2, free_op_data1;
1.1.1.2   misho    16512:        zval **object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    16513:        zval *object;
1.1.1.2   misho    16514:        zval *property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   16515:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    16516:        int have_get_ptr = 0;
                   16517: 
1.1.1.2   misho    16518:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    16519:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   16520:        }
                   16521: 
                   16522:        make_real_object(object_ptr TSRMLS_CC);
                   16523:        object = *object_ptr;
                   16524: 
1.1.1.2   misho    16525:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    16526:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   16527:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16528:                FREE_OP(free_op_data1);
                   16529: 
1.1.1.2   misho    16530:                if (RETURN_VALUE_USED(opline)) {
                   16531:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   16532:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   16533:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    16534:                }
                   16535:        } else {
                   16536:                /* here we are sure we are dealing with an object */
                   16537:                if (0) {
                   16538:                        MAKE_REAL_ZVAL_PTR(property);
                   16539:                }
                   16540: 
                   16541:                /* here property is a string */
                   16542:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   16543:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    16544:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16545:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   16546:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   16547: 
                   16548:                                have_get_ptr = 1;
                   16549:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    16550:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    16551:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    16552:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   16553:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    16554:                                }
                   16555:                        }
                   16556:                }
                   16557: 
                   16558:                if (!have_get_ptr) {
                   16559:                        zval *z = NULL;
                   16560: 
                   16561:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   16562:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    16563:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16564:                                }
                   16565:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   16566:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   16567:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   16568:                                }
                   16569:                        }
                   16570:                        if (z) {
                   16571:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   16572:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   16573: 
                   16574:                                        if (Z_REFCOUNT_P(z) == 0) {
                   16575:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   16576:                                                zval_dtor(z);
                   16577:                                                FREE_ZVAL(z);
                   16578:                                        }
                   16579:                                        z = value;
                   16580:                                }
                   16581:                                Z_ADDREF_P(z);
                   16582:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   16583:                                binary_op(z, z, value TSRMLS_CC);
                   16584:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    16585:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16586:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   16587:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   16588:                                }
1.1.1.2   misho    16589:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    16590:                                        PZVAL_LOCK(z);
1.1.1.2   misho    16591:                                        EX_T(opline->result.var).var.ptr = z;
                   16592:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    16593:                                }
                   16594:                                zval_ptr_dtor(&z);
                   16595:                        } else {
                   16596:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    16597:                                if (RETURN_VALUE_USED(opline)) {
                   16598:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   16599:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   16600:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    16601:                                }
                   16602:                        }
                   16603:                }
                   16604: 
                   16605:                if (0) {
                   16606:                        zval_ptr_dtor(&property);
                   16607:                } else {
                   16608:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16609:                }
                   16610:                FREE_OP(free_op_data1);
                   16611:        }
                   16612: 
                   16613:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16614:        /* assign_obj has two opcodes! */
1.1.1.2   misho    16615:        CHECK_EXCEPTION();
1.1       misho    16616:        ZEND_VM_INC_OPCODE();
                   16617:        ZEND_VM_NEXT_OPCODE();
                   16618: }
                   16619: 
                   16620: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   16621: {
1.1.1.2   misho    16622:        USE_OPLINE
1.1       misho    16623:        zend_free_op free_op1, free_op2, free_op_data2, free_op_data1;
                   16624:        zval **var_ptr;
                   16625:        zval *value;
                   16626: 
1.1.1.2   misho    16627:        SAVE_OPLINE();
1.1       misho    16628:        switch (opline->extended_value) {
                   16629:                case ZEND_ASSIGN_OBJ:
                   16630:                        return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16631:                        break;
                   16632:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    16633:                                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    16634: 
1.1.1.2   misho    16635:                                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    16636:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    16637:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    16638:                                        if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
                   16639:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   16640:                                        }
                   16641:                                        return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16642:                                } else {
1.1.1.2   misho    16643:                                        zval *dim = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    16644: 
1.1.1.2   misho    16645:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
                   16646:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   16647:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    16648:                                }
                   16649:                        }
                   16650:                        break;
                   16651:                default:
1.1.1.2   misho    16652:                        value = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   16653:                        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    16654:                        /* do nothing */
                   16655:                        break;
                   16656:        }
                   16657: 
1.1.1.2   misho    16658:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    16659:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   16660:        }
                   16661: 
1.1.1.2   misho    16662:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   16663:                if (RETURN_VALUE_USED(opline)) {
                   16664:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   16665:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    16666:                }
                   16667:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16668:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    16669:                CHECK_EXCEPTION();
                   16670:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   16671:                        ZEND_VM_INC_OPCODE();
                   16672:                }
1.1       misho    16673:                ZEND_VM_NEXT_OPCODE();
                   16674:        }
                   16675: 
                   16676:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   16677: 
1.1.1.2   misho    16678:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   16679:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    16680:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   16681:                /* proxy object */
                   16682:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   16683:                Z_ADDREF_P(objval);
                   16684:                binary_op(objval, objval, value TSRMLS_CC);
                   16685:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   16686:                zval_ptr_dtor(&objval);
                   16687:        } else {
                   16688:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   16689:        }
                   16690: 
1.1.1.2   misho    16691:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    16692:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    16693:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    16694:        }
                   16695:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16696: 
                   16697:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   16698:                FREE_OP(free_op_data1);
                   16699:                FREE_OP_VAR_PTR(free_op_data2);
1.1.1.2   misho    16700:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16701:                CHECK_EXCEPTION();
                   16702:                ZEND_VM_INC_OPCODE();
                   16703:        } else {
                   16704:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   16705:                CHECK_EXCEPTION();
1.1       misho    16706:        }
                   16707:        ZEND_VM_NEXT_OPCODE();
                   16708: }
                   16709: 
                   16710: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16711: {
                   16712:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16713: }
                   16714: 
                   16715: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16716: {
                   16717:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16718: }
                   16719: 
                   16720: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16721: {
                   16722:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16723: }
                   16724: 
                   16725: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16726: {
                   16727:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16728: }
                   16729: 
                   16730: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16731: {
                   16732:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16733: }
                   16734: 
                   16735: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16736: {
                   16737:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16738: }
                   16739: 
                   16740: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16741: {
                   16742:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16743: }
                   16744: 
                   16745: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16746: {
                   16747:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16748: }
                   16749: 
                   16750: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16751: {
                   16752:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16753: }
                   16754: 
                   16755: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16756: {
                   16757:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16758: }
                   16759: 
                   16760: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16761: {
                   16762:        return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16763: }
                   16764: 
                   16765: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   16766: {
1.1.1.2   misho    16767:        USE_OPLINE
1.1       misho    16768:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16769:        zval **object_ptr;
1.1       misho    16770:        zval *object;
1.1.1.2   misho    16771:        zval *property;
                   16772:        zval **retval;
1.1       misho    16773:        int have_get_ptr = 0;
                   16774: 
1.1.1.2   misho    16775:        SAVE_OPLINE();
                   16776:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   16777:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   16778:        retval = &EX_T(opline->result.var).var.ptr;
                   16779: 
                   16780:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    16781:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   16782:        }
                   16783: 
                   16784:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   16785:        object = *object_ptr;
                   16786: 
1.1.1.2   misho    16787:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    16788:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   16789:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16790:                if (RETURN_VALUE_USED(opline)) {
                   16791:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   16792:                        *retval = &EG(uninitialized_zval);
1.1       misho    16793:                }
                   16794:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    16795:                CHECK_EXCEPTION();
1.1       misho    16796:                ZEND_VM_NEXT_OPCODE();
                   16797:        }
                   16798: 
                   16799:        /* here we are sure we are dealing with an object */
                   16800: 
                   16801:        if (0) {
                   16802:                MAKE_REAL_ZVAL_PTR(property);
                   16803:        }
                   16804: 
                   16805:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    16806:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16807:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   16808:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   16809: 
                   16810:                        have_get_ptr = 1;
                   16811:                        incdec_op(*zptr);
1.1.1.2   misho    16812:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    16813:                                *retval = *zptr;
                   16814:                                PZVAL_LOCK(*retval);
                   16815:                        }
                   16816:                }
                   16817:        }
                   16818: 
                   16819:        if (!have_get_ptr) {
                   16820:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    16821:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16822: 
1.1.1.2   misho    16823:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    16824:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   16825: 
                   16826:                                if (Z_REFCOUNT_P(z) == 0) {
                   16827:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   16828:                                        zval_dtor(z);
                   16829:                                        FREE_ZVAL(z);
                   16830:                                }
                   16831:                                z = value;
                   16832:                        }
                   16833:                        Z_ADDREF_P(z);
                   16834:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   16835:                        incdec_op(z);
                   16836:                        *retval = z;
1.1.1.2   misho    16837:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   16838:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    16839:                        zval_ptr_dtor(&z);
                   16840:                } else {
                   16841:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    16842:                        if (RETURN_VALUE_USED(opline)) {
                   16843:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   16844:                                *retval = &EG(uninitialized_zval);
1.1       misho    16845:                        }
                   16846:                }
                   16847:        }
                   16848: 
                   16849:        if (0) {
                   16850:                zval_ptr_dtor(&property);
                   16851:        } else {
                   16852:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16853:        }
                   16854:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    16855:        CHECK_EXCEPTION();
1.1       misho    16856:        ZEND_VM_NEXT_OPCODE();
                   16857: }
                   16858: 
                   16859: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16860: {
                   16861:        return zend_pre_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16862: }
                   16863: 
                   16864: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16865: {
                   16866:        return zend_pre_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16867: }
                   16868: 
                   16869: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   16870: {
1.1.1.2   misho    16871:        USE_OPLINE
1.1       misho    16872:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    16873:        zval **object_ptr;
1.1       misho    16874:        zval *object;
1.1.1.2   misho    16875:        zval *property;
                   16876:        zval *retval;
1.1       misho    16877:        int have_get_ptr = 0;
                   16878: 
1.1.1.2   misho    16879:        SAVE_OPLINE();
                   16880:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   16881:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   16882:        retval = &EX_T(opline->result.var).tmp_var;
                   16883: 
                   16884:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    16885:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   16886:        }
                   16887: 
                   16888:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   16889:        object = *object_ptr;
                   16890: 
1.1.1.2   misho    16891:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    16892:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   16893:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    16894:                ZVAL_NULL(retval);
1.1       misho    16895:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    16896:                CHECK_EXCEPTION();
1.1       misho    16897:                ZEND_VM_NEXT_OPCODE();
                   16898:        }
                   16899: 
                   16900:        /* here we are sure we are dealing with an object */
                   16901: 
                   16902:        if (0) {
                   16903:                MAKE_REAL_ZVAL_PTR(property);
                   16904:        }
                   16905: 
                   16906:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    16907:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16908:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   16909:                        have_get_ptr = 1;
                   16910:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   16911: 
1.1.1.2   misho    16912:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    16913:                        zendi_zval_copy_ctor(*retval);
                   16914: 
                   16915:                        incdec_op(*zptr);
                   16916: 
                   16917:                }
                   16918:        }
                   16919: 
                   16920:        if (!have_get_ptr) {
                   16921:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    16922:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16923:                        zval *z_copy;
                   16924: 
1.1.1.2   misho    16925:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    16926:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   16927: 
                   16928:                                if (Z_REFCOUNT_P(z) == 0) {
                   16929:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   16930:                                        zval_dtor(z);
                   16931:                                        FREE_ZVAL(z);
                   16932:                                }
                   16933:                                z = value;
                   16934:                        }
1.1.1.2   misho    16935:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    16936:                        zendi_zval_copy_ctor(*retval);
                   16937:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    16938:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    16939:                        zendi_zval_copy_ctor(*z_copy);
                   16940:                        incdec_op(z_copy);
                   16941:                        Z_ADDREF_P(z);
1.1.1.2   misho    16942:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    16943:                        zval_ptr_dtor(&z_copy);
                   16944:                        zval_ptr_dtor(&z);
                   16945:                } else {
                   16946:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    16947:                        ZVAL_NULL(retval);
1.1       misho    16948:                }
                   16949:        }
                   16950: 
                   16951:        if (0) {
                   16952:                zval_ptr_dtor(&property);
                   16953:        } else {
                   16954:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   16955:        }
                   16956:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    16957:        CHECK_EXCEPTION();
1.1       misho    16958:        ZEND_VM_NEXT_OPCODE();
                   16959: }
                   16960: 
                   16961: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16962: {
                   16963:        return zend_post_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16964: }
                   16965: 
                   16966: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   16967: {
                   16968:        return zend_post_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   16969: }
                   16970: 
1.1.1.2   misho    16971: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
                   16972: {
                   16973:        USE_OPLINE
                   16974:        zend_free_op free_op1;
                   16975:        zval *varname;
                   16976:        zval **retval;
                   16977:        zval tmp_varname;
                   16978:        HashTable *target_symbol_table;
                   16979:        ulong hash_value;
                   16980: 
                   16981:        SAVE_OPLINE();
                   16982:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   16983: 
                   16984:        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   16985:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   16986:                zval_copy_ctor(&tmp_varname);
                   16987:                Z_SET_REFCOUNT(tmp_varname, 1);
                   16988:                Z_UNSET_ISREF(tmp_varname);
                   16989:                convert_to_string(&tmp_varname);
                   16990:                varname = &tmp_varname;
                   16991:        }
                   16992: 
                   16993:        if (IS_VAR != IS_UNUSED) {
                   16994:                zend_class_entry *ce;
                   16995: 
                   16996:                if (IS_VAR == IS_CONST) {
                   16997:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   16998:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   16999:                        } else {
                   17000:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   17001:                                if (UNEXPECTED(ce == NULL)) {
                   17002:                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   17003:                                                zval_dtor(&tmp_varname);
                   17004:                                        }
                   17005:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17006:                                        CHECK_EXCEPTION();
                   17007:                                        ZEND_VM_NEXT_OPCODE();
                   17008:                                }
                   17009:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   17010:                        }
                   17011:                } else {
                   17012:                        ce = EX_T(opline->op2.var).class_entry;
                   17013:                }
                   17014:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   17015:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17016:        } else {
                   17017:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   17018: /*
                   17019:                if (!target_symbol_table) {
                   17020:                        CHECK_EXCEPTION();
                   17021:                        ZEND_VM_NEXT_OPCODE();
                   17022:                }
                   17023: */
                   17024:                if (IS_VAR == IS_CONST) {
                   17025:                        hash_value = Z_HASH_P(varname);
                   17026:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   17027:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   17028:                } else {
                   17029:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   17030:                }
                   17031: 
                   17032:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   17033:                        switch (type) {
                   17034:                                case BP_VAR_R:
                   17035:                                case BP_VAR_UNSET:
                   17036:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   17037:                                        /* break missing intentionally */
                   17038:                                case BP_VAR_IS:
                   17039:                                        retval = &EG(uninitialized_zval_ptr);
                   17040:                                        break;
                   17041:                                case BP_VAR_RW:
                   17042:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   17043:                                        /* break missing intentionally */
                   17044:                                case BP_VAR_W:
                   17045:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   17046:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   17047:                                        break;
                   17048:                                EMPTY_SWITCH_DEFAULT_CASE()
                   17049:                        }
                   17050:                }
                   17051:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   17052:                        case ZEND_FETCH_GLOBAL:
                   17053:                                if (IS_VAR != IS_TMP_VAR) {
                   17054:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17055:                                }
                   17056:                                break;
                   17057:                        case ZEND_FETCH_LOCAL:
                   17058:                                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17059:                                break;
                   17060:                        case ZEND_FETCH_STATIC:
                   17061:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   17062:                                break;
                   17063:                        case ZEND_FETCH_GLOBAL_LOCK:
                   17064:                                if (IS_VAR == IS_VAR && !free_op1.var) {
                   17065:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   17066:                                }
                   17067:                                break;
                   17068:                }
                   17069:        }
                   17070: 
                   17071: 
                   17072:        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   17073:                zval_dtor(&tmp_varname);
                   17074:        }
                   17075:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   17076:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   17077:        }
                   17078:        PZVAL_LOCK(*retval);
                   17079:        switch (type) {
                   17080:                case BP_VAR_R:
                   17081:                case BP_VAR_IS:
                   17082:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   17083:                        break;
                   17084:                case BP_VAR_UNSET: {
                   17085:                        zend_free_op free_res;
                   17086: 
                   17087:                        PZVAL_UNLOCK(*retval, &free_res);
                   17088:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   17089:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   17090:                        }
                   17091:                        PZVAL_LOCK(*retval);
                   17092:                        FREE_OP_VAR_PTR(free_res);
                   17093:                }
                   17094:                /* break missing intentionally */
                   17095:                default:
                   17096:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   17097:                        break;
                   17098:        }
                   17099:        CHECK_EXCEPTION();
                   17100:        ZEND_VM_NEXT_OPCODE();
                   17101: }
                   17102: 
                   17103: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17104: {
                   17105:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17106: }
                   17107: 
                   17108: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17109: {
                   17110:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17111: }
                   17112: 
                   17113: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17114: {
                   17115:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17116: }
                   17117: 
                   17118: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17119: {
                   17120:        USE_OPLINE
                   17121: 
                   17122:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17123: }
                   17124: 
                   17125: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17126: {
                   17127:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17128: }
                   17129: 
                   17130: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17131: {
                   17132:        return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17133: }
                   17134: 
1.1       misho    17135: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17136: {
1.1.1.2   misho    17137:        USE_OPLINE
1.1       misho    17138:        zend_free_op free_op1, free_op2;
1.1.1.5 ! misho    17139:        zval *container;
1.1       misho    17140: 
1.1.1.2   misho    17141:        SAVE_OPLINE();
                   17142: 
1.1.1.5 ! misho    17143:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          17144:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    17145:        }
1.1.1.5 ! misho    17146:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    17147:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
1.1       misho    17148:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17149:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17150:        CHECK_EXCEPTION();
1.1       misho    17151:        ZEND_VM_NEXT_OPCODE();
                   17152: }
                   17153: 
                   17154: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17155: {
1.1.1.2   misho    17156:        USE_OPLINE
1.1       misho    17157:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17158:        zval **container;
1.1       misho    17159: 
1.1.1.2   misho    17160:        SAVE_OPLINE();
                   17161:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17162: 
                   17163:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17164:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17165:        }
1.1.1.2   misho    17166:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    17167:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    17168:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17169:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17170:        }
                   17171:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17172: 
                   17173:        /* We are going to assign the result by reference */
1.1.1.2   misho    17174:        if (UNEXPECTED(opline->extended_value != 0)) {
                   17175:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   17176: 
                   17177:                if (retval_ptr) {
                   17178:                        Z_DELREF_PP(retval_ptr);
                   17179:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   17180:                        Z_ADDREF_PP(retval_ptr);
                   17181:                }
1.1       misho    17182:        }
                   17183: 
1.1.1.2   misho    17184:        CHECK_EXCEPTION();
1.1       misho    17185:        ZEND_VM_NEXT_OPCODE();
                   17186: }
                   17187: 
                   17188: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17189: {
1.1.1.2   misho    17190:        USE_OPLINE
1.1       misho    17191:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17192:        zval **container;
                   17193: 
                   17194:        SAVE_OPLINE();
                   17195:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17196: 
1.1.1.2   misho    17197:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17198:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17199:        }
1.1.1.2   misho    17200:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_RW TSRMLS_CC);
1.1       misho    17201:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    17202:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17203:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17204:        }
                   17205:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17206:        CHECK_EXCEPTION();
1.1       misho    17207:        ZEND_VM_NEXT_OPCODE();
                   17208: }
                   17209: 
                   17210: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17211: {
1.1.1.2   misho    17212:        USE_OPLINE
1.1       misho    17213:        zend_free_op free_op1, free_op2;
1.1.1.5 ! misho    17214:        zval *container;
1.1       misho    17215: 
1.1.1.2   misho    17216:        SAVE_OPLINE();
1.1.1.5 ! misho    17217:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    17218:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
1.1       misho    17219:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17220:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17221:        CHECK_EXCEPTION();
1.1       misho    17222:        ZEND_VM_NEXT_OPCODE();
                   17223: }
                   17224: 
                   17225: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17226: {
1.1.1.2   misho    17227:        USE_OPLINE
1.1       misho    17228:        zend_free_op free_op1, free_op2;
                   17229: 
1.1.1.2   misho    17230:        SAVE_OPLINE();
                   17231: 
                   17232:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    17233:                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
        !          17234: 
1.1.1.2   misho    17235:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17236:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17237:                }
1.1.1.2   misho    17238:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
                   17239:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17240:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17241:                }
1.1.1.5 ! misho    17242:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        !          17243:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    17244:        } else {
1.1.1.5 ! misho    17245:                zval *container;
        !          17246: 
1.1       misho    17247:                if (IS_VAR == IS_UNUSED) {
                   17248:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   17249:                }
1.1.1.5 ! misho    17250:                container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    17251:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
1.1.1.5 ! misho    17252:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        !          17253:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    17254:        }
1.1.1.2   misho    17255:        CHECK_EXCEPTION();
1.1       misho    17256:        ZEND_VM_NEXT_OPCODE();
                   17257: }
                   17258: 
                   17259: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17260: {
1.1.1.2   misho    17261:        USE_OPLINE
1.1       misho    17262:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17263:        zval **container;
                   17264: 
                   17265:        SAVE_OPLINE();
                   17266:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17267: 
                   17268:        if (IS_VAR == IS_CV) {
                   17269:                if (container != &EG(uninitialized_zval_ptr)) {
                   17270:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   17271:                }
                   17272:        }
1.1.1.2   misho    17273:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17274:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17275:        }
1.1.1.2   misho    17276:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    17277:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    17278:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17279:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17280:        }
                   17281:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17282:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    17283:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   17284:        } else {
                   17285:                zend_free_op free_res;
1.1.1.2   misho    17286:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    17287: 
1.1.1.2   misho    17288:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   17289:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   17290:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    17291:                }
1.1.1.2   misho    17292:                PZVAL_LOCK(*retval_ptr);
1.1       misho    17293:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    17294:                CHECK_EXCEPTION();
                   17295:                ZEND_VM_NEXT_OPCODE();
1.1       misho    17296:        }
                   17297: }
                   17298: 
1.1.1.2   misho    17299: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_VAR(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    17300: {
1.1.1.2   misho    17301:        USE_OPLINE
1.1       misho    17302:        zend_free_op free_op1;
1.1.1.2   misho    17303:        zval *container;
1.1       misho    17304:        zend_free_op free_op2;
1.1.1.2   misho    17305:        zval *offset;
1.1       misho    17306: 
1.1.1.2   misho    17307:        SAVE_OPLINE();
                   17308:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17309:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17310: 
                   17311:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   17312:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   17313:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   17314:                PZVAL_LOCK(&EG(uninitialized_zval));
                   17315:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    17316:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17317:        } else {
                   17318:                zval *retval;
                   17319: 
                   17320:                if (0) {
                   17321:                        MAKE_REAL_ZVAL_PTR(offset);
                   17322:                }
                   17323: 
                   17324:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    17325:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    17326: 
1.1.1.2   misho    17327:                PZVAL_LOCK(retval);
                   17328:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    17329: 
                   17330:                if (0) {
                   17331:                        zval_ptr_dtor(&offset);
                   17332:                } else {
                   17333:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17334:                }
                   17335:        }
                   17336: 
                   17337:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17338:        CHECK_EXCEPTION();
1.1       misho    17339:        ZEND_VM_NEXT_OPCODE();
                   17340: }
                   17341: 
                   17342: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17343: {
1.1.1.2   misho    17344:        return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    17345: }
                   17346: 
                   17347: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17348: {
1.1.1.2   misho    17349:        USE_OPLINE
1.1       misho    17350:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17351:        zval *property;
1.1       misho    17352:        zval **container;
                   17353: 
1.1.1.2   misho    17354:        SAVE_OPLINE();
                   17355:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17356: 
1.1       misho    17357:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    17358:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   17359:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    17360:        }
                   17361: 
                   17362:        if (0) {
                   17363:                MAKE_REAL_ZVAL_PTR(property);
                   17364:        }
1.1.1.2   misho    17365:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17366:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17367:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   17368:        }
1.1.1.2   misho    17369: 
                   17370:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    17371:        if (0) {
                   17372:                zval_ptr_dtor(&property);
                   17373:        } else {
                   17374:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17375:        }
1.1.1.2   misho    17376:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17377:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17378:        }
                   17379:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17380: 
                   17381:        /* We are going to assign the result by reference */
                   17382:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    17383:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   17384: 
                   17385:                Z_DELREF_PP(retval_ptr);
                   17386:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   17387:                Z_ADDREF_PP(retval_ptr);
                   17388:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   17389:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    17390:        }
                   17391: 
1.1.1.2   misho    17392:        CHECK_EXCEPTION();
1.1       misho    17393:        ZEND_VM_NEXT_OPCODE();
                   17394: }
                   17395: 
                   17396: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17397: {
1.1.1.2   misho    17398:        USE_OPLINE
1.1       misho    17399:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17400:        zval *property;
                   17401:        zval **container;
                   17402: 
                   17403:        SAVE_OPLINE();
                   17404:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17405:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17406: 
                   17407:        if (0) {
                   17408:                MAKE_REAL_ZVAL_PTR(property);
                   17409:        }
1.1.1.2   misho    17410:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17411:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   17412:        }
1.1.1.2   misho    17413:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    17414:        if (0) {
                   17415:                zval_ptr_dtor(&property);
                   17416:        } else {
                   17417:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17418:        }
1.1.1.2   misho    17419:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17420:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17421:        }
                   17422:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17423:        CHECK_EXCEPTION();
1.1       misho    17424:        ZEND_VM_NEXT_OPCODE();
                   17425: }
                   17426: 
                   17427: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17428: {
1.1.1.2   misho    17429:        USE_OPLINE
                   17430:        zend_free_op free_op1;
                   17431:        zval *container;
                   17432:        zend_free_op free_op2;
                   17433:        zval *offset;
                   17434: 
                   17435:        SAVE_OPLINE();
                   17436:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17437:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17438: 
                   17439:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   17440:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   17441:                PZVAL_LOCK(&EG(uninitialized_zval));
                   17442:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   17443:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17444:        } else {
                   17445:                zval *retval;
                   17446: 
                   17447:                if (0) {
                   17448:                        MAKE_REAL_ZVAL_PTR(offset);
                   17449:                }
                   17450: 
                   17451:                /* here we are sure we are dealing with an object */
                   17452:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   17453: 
                   17454:                PZVAL_LOCK(retval);
                   17455:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   17456: 
                   17457:                if (0) {
                   17458:                        zval_ptr_dtor(&offset);
                   17459:                } else {
                   17460:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17461:                }
                   17462:        }
                   17463: 
                   17464:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17465:        CHECK_EXCEPTION();
                   17466:        ZEND_VM_NEXT_OPCODE();
1.1       misho    17467: }
                   17468: 
                   17469: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17470: {
1.1.1.2   misho    17471:        USE_OPLINE
1.1       misho    17472: 
1.1.1.2   misho    17473:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    17474:                /* Behave like FETCH_OBJ_W */
                   17475:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    17476:                zval *property;
                   17477:                zval **container;
                   17478: 
                   17479:                SAVE_OPLINE();
                   17480:                property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17481:                container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17482: 
                   17483:                if (0) {
                   17484:                        MAKE_REAL_ZVAL_PTR(property);
                   17485:                }
1.1.1.2   misho    17486:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17487:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   17488:                }
1.1.1.2   misho    17489:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    17490:                if (0) {
                   17491:                        zval_ptr_dtor(&property);
                   17492:                } else {
                   17493:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17494:                }
1.1.1.2   misho    17495:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17496:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17497:                }
                   17498:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    17499:                CHECK_EXCEPTION();
1.1       misho    17500:                ZEND_VM_NEXT_OPCODE();
                   17501:        } else {
1.1.1.2   misho    17502:                return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    17503:        }
                   17504: }
                   17505: 
                   17506: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17507: {
1.1.1.2   misho    17508:        USE_OPLINE
1.1       misho    17509:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    17510:        zval **container;
                   17511:        zval *property;
                   17512: 
                   17513:        SAVE_OPLINE();
                   17514:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17515:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17516: 
                   17517:        if (IS_VAR == IS_CV) {
                   17518:                if (container != &EG(uninitialized_zval_ptr)) {
                   17519:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   17520:                }
                   17521:        }
                   17522:        if (0) {
                   17523:                MAKE_REAL_ZVAL_PTR(property);
                   17524:        }
1.1.1.2   misho    17525:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    17526:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   17527:        }
1.1.1.2   misho    17528:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    17529:        if (0) {
                   17530:                zval_ptr_dtor(&property);
                   17531:        } else {
                   17532:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17533:        }
1.1.1.2   misho    17534:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   17535:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    17536:        }
                   17537:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17538: 
1.1.1.2   misho    17539:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   17540:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   17541:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    17542:        }
1.1.1.2   misho    17543:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    17544:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    17545:        CHECK_EXCEPTION();
1.1       misho    17546:        ZEND_VM_NEXT_OPCODE();
                   17547: }
                   17548: 
                   17549: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17550: {
1.1.1.2   misho    17551:        USE_OPLINE
1.1       misho    17552:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17553:        zval **object_ptr;
                   17554:        zval *property_name;
                   17555: 
                   17556:        SAVE_OPLINE();
                   17557:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17558:        property_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17559: 
                   17560:        if (0) {
                   17561:                MAKE_REAL_ZVAL_PTR(property_name);
                   17562:        }
1.1.1.2   misho    17563:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    17564:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17565:        }
1.1.1.2   misho    17566:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    17567:        if (0) {
                   17568:                zval_ptr_dtor(&property_name);
                   17569:        } else {
                   17570:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17571:        }
                   17572:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17573:        /* assign_obj has two opcodes! */
1.1.1.2   misho    17574:        CHECK_EXCEPTION();
1.1       misho    17575:        ZEND_VM_INC_OPCODE();
                   17576:        ZEND_VM_NEXT_OPCODE();
                   17577: }
                   17578: 
                   17579: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17580: {
1.1.1.2   misho    17581:        USE_OPLINE
1.1       misho    17582:        zend_free_op free_op1;
1.1.1.2   misho    17583:        zval **object_ptr;
                   17584: 
                   17585:        SAVE_OPLINE();
                   17586:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17587: 
1.1.1.2   misho    17588:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    17589:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   17590:        }
                   17591:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   17592:                zend_free_op free_op2;
1.1.1.2   misho    17593:                zval *property_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17594: 
                   17595:                if (0) {
                   17596:                        MAKE_REAL_ZVAL_PTR(property_name);
                   17597:                }
1.1.1.2   misho    17598:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    17599:                if (0) {
                   17600:                        zval_ptr_dtor(&property_name);
                   17601:                } else {
                   17602:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17603:                }
                   17604:        } else {
                   17605:                zend_free_op free_op2, free_op_data1, free_op_data2;
                   17606:                zval *value;
1.1.1.2   misho    17607:                zval *dim = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17608:                zval **variable_ptr_ptr;
                   17609: 
1.1.1.2   misho    17610:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    17611:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17612: 
1.1.1.2   misho    17613:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   17614:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   17615:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   17616:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   17617:                                if (RETURN_VALUE_USED(opline)) {
                   17618:                                        zval *retval;
                   17619: 
                   17620:                                        ALLOC_ZVAL(retval);
                   17621:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   17622:                                        INIT_PZVAL(retval);
                   17623:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   17624:                                }
                   17625:                        } else if (RETURN_VALUE_USED(opline)) {
                   17626:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   17627:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   17628:                        }
                   17629:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   17630:                        if (IS_TMP_FREE(free_op_data1)) {
                   17631:                                zval_dtor(value);
                   17632:                        }
                   17633:                        if (RETURN_VALUE_USED(opline)) {
                   17634:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   17635:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   17636:                        }
                   17637:                } else {
                   17638:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   17639:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17640:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   17641:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17642:                        } else {
                   17643:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17644:                        }
                   17645:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    17646:                                PZVAL_LOCK(value);
1.1.1.2   misho    17647:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    17648:                        }
                   17649:                }
                   17650:                FREE_OP_VAR_PTR(free_op_data2);
                   17651:                FREE_OP_IF_VAR(free_op_data1);
                   17652:        }
                   17653:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17654:        /* assign_dim has two opcodes! */
1.1.1.2   misho    17655:        CHECK_EXCEPTION();
1.1       misho    17656:        ZEND_VM_INC_OPCODE();
                   17657:        ZEND_VM_NEXT_OPCODE();
                   17658: }
                   17659: 
                   17660: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17661: {
1.1.1.2   misho    17662:        USE_OPLINE
1.1       misho    17663:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    17664:        zval *value;
                   17665:        zval **variable_ptr_ptr;
1.1       misho    17666: 
1.1.1.2   misho    17667:        SAVE_OPLINE();
                   17668:        value = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   17669:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17670: 
                   17671:        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   17672:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_VAR TSRMLS_CC)) {
                   17673:                        if (RETURN_VALUE_USED(opline)) {
                   17674:                                zval *retval;
                   17675: 
                   17676:                                ALLOC_ZVAL(retval);
                   17677:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   17678:                                INIT_PZVAL(retval);
                   17679:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   17680:                        }
                   17681:                } else if (RETURN_VALUE_USED(opline)) {
                   17682:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   17683:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   17684:                }
                   17685:        } else if (IS_VAR == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   17686:                if (0) {
                   17687:                        zval_dtor(value);
                   17688:                }
                   17689:                if (RETURN_VALUE_USED(opline)) {
                   17690:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   17691:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   17692:                }
                   17693:        } else {
                   17694:                if (IS_VAR == IS_TMP_VAR) {
                   17695:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17696:                } else if (IS_VAR == IS_CONST) {
                   17697:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17698:                } else {
                   17699:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   17700:                }
                   17701:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    17702:                        PZVAL_LOCK(value);
1.1.1.2   misho    17703:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    17704:                }
                   17705:        }
                   17706: 
                   17707:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17708: 
                   17709:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   17710:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17711: 
1.1.1.2   misho    17712:        CHECK_EXCEPTION();
1.1       misho    17713:        ZEND_VM_NEXT_OPCODE();
                   17714: }
                   17715: 
                   17716: static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17717: {
1.1.1.2   misho    17718:        USE_OPLINE
1.1       misho    17719:        zend_free_op free_op1, free_op2;
                   17720:        zval **variable_ptr_ptr;
1.1.1.2   misho    17721:        zval **value_ptr_ptr;
                   17722: 
                   17723:        SAVE_OPLINE();
                   17724:        value_ptr_ptr = _get_zval_ptr_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17725: 
                   17726:        if (IS_VAR == IS_VAR &&
                   17727:            value_ptr_ptr &&
                   17728:            !Z_ISREF_PP(value_ptr_ptr) &&
                   17729:            opline->extended_value == ZEND_RETURNS_FUNCTION &&
1.1.1.2   misho    17730:            !EX_T(opline->op2.var).var.fcall_returned_reference) {
1.1       misho    17731:                if (free_op2.var == NULL) {
                   17732:                        PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
                   17733:                }
                   17734:                zend_error(E_STRICT, "Only variables should be assigned by reference");
                   17735:                if (UNEXPECTED(EG(exception) != NULL)) {
                   17736:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    17737:                        HANDLE_EXCEPTION();
1.1       misho    17738:                }
                   17739:                return ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   17740:        } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   17741:                PZVAL_LOCK(*value_ptr_ptr);
                   17742:        }
1.1.1.2   misho    17743:        if (IS_VAR == IS_VAR && UNEXPECTED(EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr)) {
1.1       misho    17744:                zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
                   17745:        }
                   17746: 
1.1.1.2   misho    17747:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17748:        if ((IS_VAR == IS_VAR && UNEXPECTED(value_ptr_ptr == NULL)) ||
                   17749:            (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL))) {
1.1       misho    17750:                zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
                   17751:        }
                   17752:        zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
                   17753: 
                   17754:        if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   17755:                Z_DELREF_PP(variable_ptr_ptr);
                   17756:        }
                   17757: 
1.1.1.2   misho    17758:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    17759:                PZVAL_LOCK(*variable_ptr_ptr);
1.1.1.2   misho    17760:                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
1.1       misho    17761:        }
                   17762: 
                   17763:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17764:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17765: 
1.1.1.2   misho    17766:        CHECK_EXCEPTION();
1.1       misho    17767:        ZEND_VM_NEXT_OPCODE();
                   17768: }
                   17769: 
                   17770: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17771: {
1.1.1.2   misho    17772:        USE_OPLINE
1.1       misho    17773:        zval *function_name;
                   17774:        char *function_name_strval;
                   17775:        int function_name_strlen;
                   17776:        zend_free_op free_op1, free_op2;
                   17777: 
1.1.1.2   misho    17778:        SAVE_OPLINE();
1.1       misho    17779:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   17780: 
1.1.1.2   misho    17781:        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17782: 
1.1.1.2   misho    17783:        if (IS_VAR != IS_CONST &&
                   17784:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    17785:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   17786:        }
                   17787: 
                   17788:        function_name_strval = Z_STRVAL_P(function_name);
                   17789:        function_name_strlen = Z_STRLEN_P(function_name);
                   17790: 
1.1.1.2   misho    17791:        EX(object) = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17792: 
1.1.1.2   misho    17793:        if (EXPECTED(EX(object) != NULL) &&
                   17794:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   17795:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    17796: 
1.1.1.2   misho    17797:                if (IS_VAR != IS_CONST ||
                   17798:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   17799:                    zval *object = EX(object);
                   17800: 
                   17801:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   17802:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   17803:                        }
                   17804: 
                   17805:                        /* First, locate the function. */
                   17806:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   17807:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   17808:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   17809:                        }
                   17810:                        if (IS_VAR == IS_CONST &&
                   17811:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   17812:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   17813:                            EXPECTED(EX(object) == object)) {
                   17814:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   17815:                        }
1.1       misho    17816:                }
                   17817:        } else {
                   17818:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   17819:        }
                   17820: 
                   17821:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   17822:                EX(object) = NULL;
                   17823:        } else {
                   17824:                if (!PZVAL_IS_REF(EX(object))) {
                   17825:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   17826:                } else {
                   17827:                        zval *this_ptr;
                   17828:                        ALLOC_ZVAL(this_ptr);
                   17829:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   17830:                        zval_copy_ctor(this_ptr);
                   17831:                        EX(object) = this_ptr;
                   17832:                }
                   17833:        }
                   17834: 
                   17835:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17836:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   17837: 
1.1.1.2   misho    17838:        CHECK_EXCEPTION();
1.1       misho    17839:        ZEND_VM_NEXT_OPCODE();
                   17840: }
                   17841: 
                   17842: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17843: {
1.1.1.2   misho    17844:        USE_OPLINE
1.1       misho    17845:        zval *function_name;
                   17846:        zend_class_entry *ce;
                   17847: 
1.1.1.2   misho    17848:        SAVE_OPLINE();
1.1       misho    17849:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   17850: 
                   17851:        if (IS_VAR == IS_CONST) {
                   17852:                /* no function found. try a static method in class */
1.1.1.2   misho    17853:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   17854:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   17855:                } else {
                   17856:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    17857:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   17858:                                HANDLE_EXCEPTION();
                   17859:                        }
1.1.1.2   misho    17860:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    17861:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    17862:                        }
                   17863:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    17864:                }
                   17865:                EX(called_scope) = ce;
                   17866:        } else {
1.1.1.2   misho    17867:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    17868: 
1.1.1.2   misho    17869:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    17870:                        EX(called_scope) = EG(called_scope);
                   17871:                } else {
                   17872:                        EX(called_scope) = ce;
                   17873:                }
                   17874:        }
1.1.1.2   misho    17875: 
                   17876:        if (IS_VAR == IS_CONST &&
                   17877:            IS_VAR == IS_CONST &&
                   17878:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   17879:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   17880:        } else if (IS_VAR != IS_CONST &&
                   17881:                   IS_VAR == IS_CONST &&
                   17882:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   17883:                /* do nothing */
                   17884:        } else if (IS_VAR != IS_UNUSED) {
1.1       misho    17885:                char *function_name_strval = NULL;
                   17886:                int function_name_strlen = 0;
                   17887:                zend_free_op free_op2;
                   17888: 
                   17889:                if (IS_VAR == IS_CONST) {
1.1.1.2   misho    17890:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   17891:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    17892:                } else {
1.1.1.2   misho    17893:                        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    17894: 
1.1.1.2   misho    17895:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    17896:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   17897:                        } else {
                   17898:                                function_name_strval = Z_STRVAL_P(function_name);
                   17899:                                function_name_strlen = Z_STRLEN_P(function_name);
                   17900:                        }
                   17901:                }
                   17902: 
                   17903:                if (function_name_strval) {
                   17904:                        if (ce->get_static_method) {
                   17905:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   17906:                        } else {
1.1.1.2   misho    17907:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    17908:                        }
1.1.1.2   misho    17909:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    17910:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   17911:                        }
1.1.1.2   misho    17912:                        if (IS_VAR == IS_CONST &&
                   17913:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   17914:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   17915:                                if (IS_VAR == IS_CONST) {
                   17916:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   17917:                                } else {
                   17918:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   17919:                                }
                   17920:                        }
1.1       misho    17921:                }
                   17922:                if (IS_VAR != IS_CONST) {
                   17923:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   17924:                }
                   17925:        } else {
1.1.1.2   misho    17926:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    17927:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   17928:                }
                   17929:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    17930:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    17931:                }
                   17932:                EX(fbc) = ce->constructor;
                   17933:        }
                   17934: 
                   17935:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   17936:                EX(object) = NULL;
                   17937:        } else {
                   17938:                if (EG(This) &&
                   17939:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   17940:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   17941:                    /* We are calling method of the other (incompatible) class,
                   17942:                       but passing $this. This is done for compatibility with php-4. */
                   17943:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    17944:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    17945:                        } else {
                   17946:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    17947:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    17948:                        }
                   17949:                }
                   17950:                if ((EX(object) = EG(This))) {
                   17951:                        Z_ADDREF_P(EX(object));
                   17952:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   17953:                }
                   17954:        }
                   17955: 
1.1.1.2   misho    17956:        CHECK_EXCEPTION();
1.1       misho    17957:        ZEND_VM_NEXT_OPCODE();
                   17958: }
                   17959: 
                   17960: static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17961: {
1.1.1.2   misho    17962:        USE_OPLINE
1.1       misho    17963:        zend_free_op free_op1, free_op2;
                   17964: 
1.1.1.2   misho    17965:        SAVE_OPLINE();
1.1       misho    17966:        if (IS_VAR==IS_VAR) {
1.1.1.2   misho    17967:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    17968:        }
1.1.1.2   misho    17969:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   17970:                                 _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   17971:                                 _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    17972: 
                   17973:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    17974:        CHECK_EXCEPTION();
1.1       misho    17975:        ZEND_VM_NEXT_OPCODE();
                   17976: }
                   17977: 
                   17978: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   17979: {
1.1.1.2   misho    17980:        USE_OPLINE
                   17981:        zend_free_op free_op1;
1.1       misho    17982:        zval *expr_ptr;
                   17983: 
1.1.1.2   misho    17984:        SAVE_OPLINE();
                   17985:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   17986:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    17987: 
1.1.1.2   misho    17988:                if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   17989:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   17990:                }
                   17991:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    17992:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    17993:                Z_ADDREF_P(expr_ptr);
1.1       misho    17994:        } else {
1.1.1.2   misho    17995:                expr_ptr=_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   17996:                if (0) { /* temporary variable */
                   17997:                        zval *new_expr;
1.1       misho    17998: 
1.1.1.2   misho    17999:                        ALLOC_ZVAL(new_expr);
                   18000:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   18001:                        expr_ptr = new_expr;
                   18002:                } else if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    18003:                        zval *new_expr;
                   18004: 
                   18005:                        ALLOC_ZVAL(new_expr);
                   18006:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   18007:                        expr_ptr = new_expr;
                   18008:                        zendi_zval_copy_ctor(*expr_ptr);
                   18009:                } else {
                   18010:                        Z_ADDREF_P(expr_ptr);
                   18011:                }
                   18012:        }
1.1.1.2   misho    18013: 
                   18014:        if (IS_VAR != IS_UNUSED) {
                   18015:                zend_free_op free_op2;
                   18016:                zval *offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   18017:                ulong hval;
                   18018: 
1.1       misho    18019:                switch (Z_TYPE_P(offset)) {
                   18020:                        case IS_DOUBLE:
1.1.1.2   misho    18021:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   18022:                                goto num_index;
1.1       misho    18023:                        case IS_LONG:
                   18024:                        case IS_BOOL:
1.1.1.2   misho    18025:                                hval = Z_LVAL_P(offset);
                   18026: num_index:
                   18027:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    18028:                                break;
                   18029:                        case IS_STRING:
1.1.1.2   misho    18030:                                if (IS_VAR == IS_CONST) {
                   18031:                                        hval = Z_HASH_P(offset);
                   18032:                                } else {
                   18033:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   18034:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   18035:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   18036:                                        } else {
                   18037:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   18038:                                        }
                   18039:                                }
                   18040:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    18041:                                break;
                   18042:                        case IS_NULL:
1.1.1.2   misho    18043:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    18044:                                break;
                   18045:                        default:
                   18046:                                zend_error(E_WARNING, "Illegal offset type");
                   18047:                                zval_ptr_dtor(&expr_ptr);
                   18048:                                /* do nothing */
                   18049:                                break;
                   18050:                }
                   18051:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18052:        } else {
1.1.1.2   misho    18053:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    18054:        }
1.1.1.2   misho    18055:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
1.1       misho    18056:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18057:        } else {
                   18058:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18059:        }
1.1.1.2   misho    18060:        CHECK_EXCEPTION();
1.1       misho    18061:        ZEND_VM_NEXT_OPCODE();
                   18062: }
                   18063: 
                   18064: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18065: {
1.1.1.2   misho    18066:        USE_OPLINE
1.1       misho    18067: 
1.1.1.2   misho    18068:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    18069:        if (IS_VAR == IS_UNUSED) {
                   18070:                ZEND_VM_NEXT_OPCODE();
                   18071: #if 0 || IS_VAR != IS_UNUSED
                   18072:        } else {
                   18073:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18074: #endif
                   18075:        }
                   18076: }
                   18077: 
1.1.1.2   misho    18078: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18079: {
                   18080:        USE_OPLINE
                   18081:        zval tmp, *varname;
                   18082:        HashTable *target_symbol_table;
                   18083:        zend_free_op free_op1;
                   18084: 
                   18085:        SAVE_OPLINE();
                   18086:        if (IS_VAR == IS_CV &&
                   18087:            IS_VAR == IS_UNUSED &&
                   18088:            (opline->extended_value & ZEND_QUICK_SET)) {
                   18089:                if (EG(active_symbol_table)) {
                   18090:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   18091: 
                   18092:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   18093:                        EX_CV(opline->op1.var) = NULL;
                   18094:                } else if (EX_CV(opline->op1.var)) {
                   18095:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   18096:                        EX_CV(opline->op1.var) = NULL;
                   18097:                }
                   18098:                CHECK_EXCEPTION();
                   18099:                ZEND_VM_NEXT_OPCODE();
                   18100:        }
                   18101: 
                   18102:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   18103: 
                   18104:        if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   18105:                ZVAL_COPY_VALUE(&tmp, varname);
                   18106:                zval_copy_ctor(&tmp);
                   18107:                convert_to_string(&tmp);
                   18108:                varname = &tmp;
                   18109:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   18110:                Z_ADDREF_P(varname);
                   18111:        }
                   18112: 
                   18113:        if (IS_VAR != IS_UNUSED) {
                   18114:                zend_class_entry *ce;
                   18115: 
                   18116:                if (IS_VAR == IS_CONST) {
                   18117:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   18118:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   18119:                        } else {
                   18120:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    18121:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    18122:                                        if (IS_VAR != IS_CONST && varname == &tmp) {
                   18123:                                                zval_dtor(&tmp);
                   18124:                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   18125:                                                zval_ptr_dtor(&varname);
                   18126:                                        }
                   18127:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.4   misho    18128:                                        HANDLE_EXCEPTION();
                   18129:                                }
                   18130:                                if (UNEXPECTED(ce == NULL)) {
                   18131:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    18132:                                }
                   18133:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   18134:                        }
                   18135:                } else {
                   18136:                        ce = EX_T(opline->op2.var).class_entry;
                   18137:                }
                   18138:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   18139:        } else {
                   18140:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   18141: 
                   18142:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   18143:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   18144:        }
                   18145: 
                   18146:        if (IS_VAR != IS_CONST && varname == &tmp) {
                   18147:                zval_dtor(&tmp);
                   18148:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   18149:                zval_ptr_dtor(&varname);
                   18150:        }
                   18151:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18152:        CHECK_EXCEPTION();
                   18153:        ZEND_VM_NEXT_OPCODE();
                   18154: }
                   18155: 
1.1       misho    18156: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18157: {
1.1.1.2   misho    18158:        USE_OPLINE
1.1       misho    18159:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    18160:        zval **container;
1.1       misho    18161:        zval *offset;
1.1.1.2   misho    18162:        ulong hval;
1.1       misho    18163: 
1.1.1.2   misho    18164:        SAVE_OPLINE();
                   18165:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18166:        if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   18167:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   18168:        }
1.1.1.2   misho    18169:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    18170: 
                   18171:        if (IS_VAR != IS_VAR || container) {
                   18172:                switch (Z_TYPE_PP(container)) {
                   18173:                        case IS_ARRAY: {
                   18174:                                HashTable *ht = Z_ARRVAL_PP(container);
                   18175: 
                   18176:                                switch (Z_TYPE_P(offset)) {
                   18177:                                        case IS_DOUBLE:
1.1.1.2   misho    18178:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    18179:                                                zend_hash_index_del(ht, hval);
                   18180:                                                break;
1.1       misho    18181:                                        case IS_RESOURCE:
                   18182:                                        case IS_BOOL:
                   18183:                                        case IS_LONG:
1.1.1.2   misho    18184:                                                hval = Z_LVAL_P(offset);
                   18185:                                                zend_hash_index_del(ht, hval);
1.1       misho    18186:                                                break;
                   18187:                                        case IS_STRING:
                   18188:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   18189:                                                        Z_ADDREF_P(offset);
                   18190:                                                }
1.1.1.2   misho    18191:                                                if (IS_VAR == IS_CONST) {
                   18192:                                                        hval = Z_HASH_P(offset);
                   18193:                                                } else {
                   18194:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   18195:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   18196:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   18197:                                                        } else {
                   18198:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    18199:                                                        }
                   18200:                                                }
1.1.1.2   misho    18201:                                                if (ht == &EG(symbol_table)) {
                   18202:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   18203:                                                } else {
                   18204:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   18205:                                                }
                   18206:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   18207:                                                        zval_ptr_dtor(&offset);
                   18208:                                                }
                   18209:                                                break;
                   18210: num_index_dim:
                   18211:                                                zend_hash_index_del(ht, hval);
1.1       misho    18212:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   18213:                                                        zval_ptr_dtor(&offset);
                   18214:                                                }
                   18215:                                                break;
                   18216:                                        case IS_NULL:
                   18217:                                                zend_hash_del(ht, "", sizeof(""));
                   18218:                                                break;
                   18219:                                        default:
                   18220:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   18221:                                                break;
                   18222:                                }
                   18223:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18224:                                break;
                   18225:                        }
                   18226:                        case IS_OBJECT:
1.1.1.2   misho    18227:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    18228:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   18229:                                }
                   18230:                                if (0) {
                   18231:                                        MAKE_REAL_ZVAL_PTR(offset);
                   18232:                                }
                   18233:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   18234:                                if (0) {
                   18235:                                        zval_ptr_dtor(&offset);
                   18236:                                } else {
                   18237:                                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18238:                                }
                   18239:                                break;
                   18240:                        case IS_STRING:
                   18241:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   18242:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   18243:                        default:
                   18244:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18245:                                break;
                   18246:                }
                   18247:        } else {
                   18248:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18249:        }
                   18250:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18251: 
1.1.1.2   misho    18252:        CHECK_EXCEPTION();
1.1       misho    18253:        ZEND_VM_NEXT_OPCODE();
                   18254: }
                   18255: 
                   18256: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18257: {
1.1.1.2   misho    18258:        USE_OPLINE
1.1       misho    18259:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    18260:        zval **container;
                   18261:        zval *offset;
                   18262: 
                   18263:        SAVE_OPLINE();
                   18264:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   18265:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    18266: 
                   18267:        if (IS_VAR != IS_VAR || container) {
                   18268:                if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   18269:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   18270:                }
                   18271:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   18272:                        if (0) {
                   18273:                                MAKE_REAL_ZVAL_PTR(offset);
                   18274:                        }
                   18275:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    18276:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    18277:                        } else {
                   18278:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   18279:                        }
                   18280:                        if (0) {
                   18281:                                zval_ptr_dtor(&offset);
                   18282:                        } else {
                   18283:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18284:                        }
                   18285:                } else {
                   18286:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18287:                }
                   18288:        } else {
                   18289:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18290:        }
                   18291:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18292: 
1.1.1.2   misho    18293:        CHECK_EXCEPTION();
                   18294:        ZEND_VM_NEXT_OPCODE();
                   18295: }
                   18296: 
                   18297: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18298: {
                   18299:        USE_OPLINE
                   18300:        zval **value;
                   18301:        zend_bool isset = 1;
                   18302: 
                   18303:        SAVE_OPLINE();
                   18304:        if (IS_VAR == IS_CV &&
                   18305:            IS_VAR == IS_UNUSED &&
                   18306:            (opline->extended_value & ZEND_QUICK_SET)) {
                   18307:                if (EX_CV(opline->op1.var)) {
                   18308:                        value = EX_CV(opline->op1.var);
                   18309:                } else if (EG(active_symbol_table)) {
                   18310:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   18311: 
                   18312:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   18313:                                isset = 0;
                   18314:                        }
                   18315:                } else {
                   18316:                        isset = 0;
                   18317:                }
                   18318:        } else {
                   18319:                HashTable *target_symbol_table;
                   18320:                zend_free_op free_op1;
                   18321:                zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   18322: 
                   18323:                if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   18324:                        ZVAL_COPY_VALUE(&tmp, varname);
                   18325:                        zval_copy_ctor(&tmp);
                   18326:                        convert_to_string(&tmp);
                   18327:                        varname = &tmp;
                   18328:                }
                   18329: 
                   18330:                if (IS_VAR != IS_UNUSED) {
                   18331:                        zend_class_entry *ce;
                   18332: 
                   18333:                        if (IS_VAR == IS_CONST) {
                   18334:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   18335:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   18336:                                } else {
                   18337:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   18338:                                        if (UNEXPECTED(ce == NULL)) {
                   18339:                                                CHECK_EXCEPTION();
                   18340:                                                ZEND_VM_NEXT_OPCODE();
                   18341:                                        }
                   18342:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   18343:                                }
                   18344:                        } else {
                   18345:                                ce = EX_T(opline->op2.var).class_entry;
                   18346:                        }
                   18347:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   18348:                        if (!value) {
                   18349:                                isset = 0;
                   18350:                        }
                   18351:                } else {
                   18352:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   18353:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   18354:                                isset = 0;
                   18355:                        }
                   18356:                }
                   18357: 
                   18358:                if (IS_VAR != IS_CONST && varname == &tmp) {
                   18359:                        zval_dtor(&tmp);
                   18360:                }
                   18361:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18362:        }
                   18363: 
                   18364:        if (opline->extended_value & ZEND_ISSET) {
                   18365:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   18366:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   18367:                } else {
                   18368:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   18369:                }
                   18370:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   18371:                if (!isset || !i_zend_is_true(*value)) {
                   18372:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   18373:                } else {
                   18374:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   18375:                }
                   18376:        }
                   18377: 
                   18378:        CHECK_EXCEPTION();
1.1       misho    18379:        ZEND_VM_NEXT_OPCODE();
                   18380: }
                   18381: 
                   18382: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   18383: {
1.1.1.2   misho    18384:        USE_OPLINE
                   18385:        zend_free_op free_op1, free_op2;
                   18386:        zval **container;
1.1       misho    18387:        zval **value = NULL;
                   18388:        int result = 0;
1.1.1.2   misho    18389:        ulong hval;
                   18390:        zval *offset;
1.1       misho    18391: 
1.1.1.2   misho    18392:        SAVE_OPLINE();
                   18393:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18394: 
1.1.1.2   misho    18395:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    18396: 
1.1.1.2   misho    18397:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   18398:                HashTable *ht;
                   18399:                int isset = 0;
1.1       misho    18400: 
1.1.1.2   misho    18401:                ht = Z_ARRVAL_PP(container);
                   18402: 
                   18403:                switch (Z_TYPE_P(offset)) {
                   18404:                        case IS_DOUBLE:
                   18405:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   18406:                                goto num_index_prop;
                   18407:                        case IS_RESOURCE:
                   18408:                        case IS_BOOL:
                   18409:                        case IS_LONG:
                   18410:                                hval = Z_LVAL_P(offset);
                   18411: num_index_prop:
                   18412:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   18413:                                        isset = 1;
                   18414:                                }
                   18415:                                break;
                   18416:                        case IS_STRING:
                   18417:                                if (IS_VAR == IS_CONST) {
                   18418:                                        hval = Z_HASH_P(offset);
                   18419:                                } else {
                   18420:                                        if (!prop_dim) {
                   18421:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    18422:                                        }
1.1.1.2   misho    18423:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   18424:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    18425:                                        } else {
1.1.1.2   misho    18426:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    18427:                                        }
1.1.1.2   misho    18428:                                }
                   18429:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   18430:                                        isset = 1;
                   18431:                                }
                   18432:                                break;
                   18433:                        case IS_NULL:
                   18434:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   18435:                                        isset = 1;
                   18436:                                }
                   18437:                                break;
                   18438:                        default:
                   18439:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   18440:                                break;
                   18441:                }
                   18442: 
                   18443:                if (opline->extended_value & ZEND_ISSET) {
                   18444:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   18445:                                result = 0;
                   18446:                        } else {
                   18447:                                result = isset;
1.1       misho    18448:                        }
1.1.1.2   misho    18449:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   18450:                        if (!isset || !i_zend_is_true(*value)) {
                   18451:                                result = 0;
                   18452:                        } else {
                   18453:                                result = 1;
1.1       misho    18454:                        }
1.1.1.2   misho    18455:                }
                   18456:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18457:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   18458:                if (0) {
                   18459:                        MAKE_REAL_ZVAL_PTR(offset);
                   18460:                }
                   18461:                if (prop_dim) {
                   18462:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   18463:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    18464:                        } else {
1.1.1.2   misho    18465:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   18466:                                result = 0;
1.1       misho    18467:                        }
1.1.1.2   misho    18468:                } else {
                   18469:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   18470:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    18471:                        } else {
1.1.1.2   misho    18472:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   18473:                                result = 0;
1.1       misho    18474:                        }
1.1.1.2   misho    18475:                }
                   18476:                if (0) {
                   18477:                        zval_ptr_dtor(&offset);
                   18478:                } else {
                   18479:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18480:                }
                   18481:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   18482:                zval tmp;
1.1       misho    18483: 
1.1.1.2   misho    18484:                if (Z_TYPE_P(offset) != IS_LONG) {
                   18485:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   18486:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   18487:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   18488:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    18489:                                zval_copy_ctor(&tmp);
                   18490:                                convert_to_long(&tmp);
                   18491:                                offset = &tmp;
1.1.1.2   misho    18492:                        } else {
                   18493:                                /* can not be converted to proper offset, return "not set" */
                   18494:                                result = 0;
1.1       misho    18495:                        }
1.1.1.2   misho    18496:                }
                   18497:                if (Z_TYPE_P(offset) == IS_LONG) {
                   18498:                        if (opline->extended_value & ZEND_ISSET) {
                   18499:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   18500:                                        result = 1;
                   18501:                                }
                   18502:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   18503:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   18504:                                        result = 1;
1.1       misho    18505:                                }
                   18506:                        }
                   18507:                }
1.1.1.2   misho    18508:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   18509:        } else {
                   18510:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    18511:        }
                   18512: 
1.1.1.2   misho    18513:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   18514:        if (opline->extended_value & ZEND_ISSET) {
                   18515:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   18516:        } else {
                   18517:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    18518:        }
                   18519: 
                   18520:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18521: 
1.1.1.2   misho    18522:        CHECK_EXCEPTION();
1.1       misho    18523:        ZEND_VM_NEXT_OPCODE();
                   18524: }
                   18525: 
                   18526: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18527: {
                   18528:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18529: }
                   18530: 
                   18531: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18532: {
                   18533:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18534: }
                   18535: 
                   18536: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   18537: {
1.1.1.2   misho    18538:        USE_OPLINE
1.1       misho    18539:        zend_free_op free_op1, free_op_data1;
1.1.1.2   misho    18540:        zval **object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18541:        zval *object;
                   18542:        zval *property = NULL;
1.1.1.2   misho    18543:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    18544:        int have_get_ptr = 0;
                   18545: 
1.1.1.2   misho    18546:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    18547:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   18548:        }
                   18549: 
                   18550:        make_real_object(object_ptr TSRMLS_CC);
                   18551:        object = *object_ptr;
                   18552: 
1.1.1.2   misho    18553:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    18554:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   18555: 
                   18556:                FREE_OP(free_op_data1);
                   18557: 
1.1.1.2   misho    18558:                if (RETURN_VALUE_USED(opline)) {
                   18559:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   18560:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   18561:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    18562:                }
                   18563:        } else {
                   18564:                /* here we are sure we are dealing with an object */
                   18565:                if (0) {
                   18566:                        MAKE_REAL_ZVAL_PTR(property);
                   18567:                }
                   18568: 
                   18569:                /* here property is a string */
                   18570:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   18571:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    18572:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    18573:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   18574:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   18575: 
                   18576:                                have_get_ptr = 1;
                   18577:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    18578:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    18579:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    18580:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   18581:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    18582:                                }
                   18583:                        }
                   18584:                }
                   18585: 
                   18586:                if (!have_get_ptr) {
                   18587:                        zval *z = NULL;
                   18588: 
                   18589:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   18590:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    18591:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    18592:                                }
                   18593:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   18594:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   18595:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   18596:                                }
                   18597:                        }
                   18598:                        if (z) {
                   18599:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   18600:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   18601: 
                   18602:                                        if (Z_REFCOUNT_P(z) == 0) {
                   18603:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   18604:                                                zval_dtor(z);
                   18605:                                                FREE_ZVAL(z);
                   18606:                                        }
                   18607:                                        z = value;
                   18608:                                }
                   18609:                                Z_ADDREF_P(z);
                   18610:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   18611:                                binary_op(z, z, value TSRMLS_CC);
                   18612:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    18613:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    18614:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   18615:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   18616:                                }
1.1.1.2   misho    18617:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    18618:                                        PZVAL_LOCK(z);
1.1.1.2   misho    18619:                                        EX_T(opline->result.var).var.ptr = z;
                   18620:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    18621:                                }
                   18622:                                zval_ptr_dtor(&z);
                   18623:                        } else {
                   18624:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    18625:                                if (RETURN_VALUE_USED(opline)) {
                   18626:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   18627:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   18628:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    18629:                                }
                   18630:                        }
                   18631:                }
                   18632: 
                   18633:                if (0) {
                   18634:                        zval_ptr_dtor(&property);
                   18635:                } else {
                   18636: 
                   18637:                }
                   18638:                FREE_OP(free_op_data1);
                   18639:        }
                   18640: 
                   18641:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18642:        /* assign_obj has two opcodes! */
1.1.1.2   misho    18643:        CHECK_EXCEPTION();
1.1       misho    18644:        ZEND_VM_INC_OPCODE();
                   18645:        ZEND_VM_NEXT_OPCODE();
                   18646: }
                   18647: 
                   18648: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   18649: {
1.1.1.2   misho    18650:        USE_OPLINE
1.1       misho    18651:        zend_free_op free_op1, free_op_data2, free_op_data1;
                   18652:        zval **var_ptr;
                   18653:        zval *value;
                   18654: 
1.1.1.2   misho    18655:        SAVE_OPLINE();
1.1       misho    18656:        switch (opline->extended_value) {
                   18657:                case ZEND_ASSIGN_OBJ:
                   18658:                        return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18659:                        break;
                   18660:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    18661:                                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18662: 
1.1.1.2   misho    18663:                                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    18664:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    18665:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    18666:                                        if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
                   18667:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   18668:                                        }
                   18669:                                        return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18670:                                } else {
                   18671:                                        zval *dim = NULL;
                   18672: 
1.1.1.2   misho    18673:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
                   18674:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   18675:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    18676:                                }
                   18677:                        }
                   18678:                        break;
                   18679:                default:
                   18680:                        value = NULL;
1.1.1.2   misho    18681:                        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18682:                        /* do nothing */
                   18683:                        break;
                   18684:        }
                   18685: 
1.1.1.2   misho    18686:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    18687:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   18688:        }
                   18689: 
1.1.1.2   misho    18690:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   18691:                if (RETURN_VALUE_USED(opline)) {
                   18692:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   18693:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    18694:                }
                   18695: 
                   18696:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    18697:                CHECK_EXCEPTION();
                   18698:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   18699:                        ZEND_VM_INC_OPCODE();
                   18700:                }
1.1       misho    18701:                ZEND_VM_NEXT_OPCODE();
                   18702:        }
                   18703: 
                   18704:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   18705: 
1.1.1.2   misho    18706:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   18707:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    18708:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   18709:                /* proxy object */
                   18710:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   18711:                Z_ADDREF_P(objval);
                   18712:                binary_op(objval, objval, value TSRMLS_CC);
                   18713:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   18714:                zval_ptr_dtor(&objval);
                   18715:        } else {
                   18716:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   18717:        }
                   18718: 
1.1.1.2   misho    18719:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    18720:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    18721:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    18722:        }
                   18723: 
                   18724:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   18725:                FREE_OP(free_op_data1);
                   18726:                FREE_OP_VAR_PTR(free_op_data2);
1.1.1.2   misho    18727:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18728:                CHECK_EXCEPTION();
                   18729:                ZEND_VM_INC_OPCODE();
                   18730:        } else {
                   18731:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18732:                CHECK_EXCEPTION();
1.1       misho    18733:        }
                   18734:        ZEND_VM_NEXT_OPCODE();
                   18735: }
                   18736: 
                   18737: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18738: {
                   18739:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18740: }
                   18741: 
                   18742: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18743: {
                   18744:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18745: }
                   18746: 
                   18747: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18748: {
                   18749:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18750: }
                   18751: 
                   18752: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18753: {
                   18754:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18755: }
                   18756: 
                   18757: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18758: {
                   18759:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18760: }
                   18761: 
                   18762: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18763: {
                   18764:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18765: }
                   18766: 
                   18767: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18768: {
                   18769:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18770: }
                   18771: 
                   18772: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18773: {
                   18774:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18775: }
                   18776: 
                   18777: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18778: {
                   18779:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18780: }
                   18781: 
                   18782: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18783: {
                   18784:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18785: }
                   18786: 
                   18787: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18788: {
                   18789:        return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18790: }
                   18791: 
1.1.1.2   misho    18792: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
                   18793: {
                   18794:        USE_OPLINE
                   18795:        zend_free_op free_op1;
                   18796:        zval *varname;
                   18797:        zval **retval;
                   18798:        zval tmp_varname;
                   18799:        HashTable *target_symbol_table;
                   18800:        ulong hash_value;
                   18801: 
                   18802:        SAVE_OPLINE();
                   18803:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   18804: 
                   18805:        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   18806:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   18807:                zval_copy_ctor(&tmp_varname);
                   18808:                Z_SET_REFCOUNT(tmp_varname, 1);
                   18809:                Z_UNSET_ISREF(tmp_varname);
                   18810:                convert_to_string(&tmp_varname);
                   18811:                varname = &tmp_varname;
                   18812:        }
                   18813: 
                   18814:        if (IS_UNUSED != IS_UNUSED) {
                   18815:                zend_class_entry *ce;
                   18816: 
                   18817:                if (IS_UNUSED == IS_CONST) {
                   18818:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   18819:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   18820:                        } else {
                   18821:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   18822:                                if (UNEXPECTED(ce == NULL)) {
                   18823:                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   18824:                                                zval_dtor(&tmp_varname);
                   18825:                                        }
                   18826:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18827:                                        CHECK_EXCEPTION();
                   18828:                                        ZEND_VM_NEXT_OPCODE();
                   18829:                                }
                   18830:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   18831:                        }
                   18832:                } else {
                   18833:                        ce = EX_T(opline->op2.var).class_entry;
                   18834:                }
                   18835:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   18836:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18837:        } else {
                   18838:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   18839: /*
                   18840:                if (!target_symbol_table) {
                   18841:                        CHECK_EXCEPTION();
                   18842:                        ZEND_VM_NEXT_OPCODE();
                   18843:                }
                   18844: */
                   18845:                if (IS_VAR == IS_CONST) {
                   18846:                        hash_value = Z_HASH_P(varname);
                   18847:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   18848:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   18849:                } else {
                   18850:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   18851:                }
                   18852: 
                   18853:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   18854:                        switch (type) {
                   18855:                                case BP_VAR_R:
                   18856:                                case BP_VAR_UNSET:
                   18857:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   18858:                                        /* break missing intentionally */
                   18859:                                case BP_VAR_IS:
                   18860:                                        retval = &EG(uninitialized_zval_ptr);
                   18861:                                        break;
                   18862:                                case BP_VAR_RW:
                   18863:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   18864:                                        /* break missing intentionally */
                   18865:                                case BP_VAR_W:
                   18866:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   18867:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   18868:                                        break;
                   18869:                                EMPTY_SWITCH_DEFAULT_CASE()
                   18870:                        }
                   18871:                }
                   18872:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   18873:                        case ZEND_FETCH_GLOBAL:
                   18874:                                if (IS_VAR != IS_TMP_VAR) {
                   18875:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18876:                                }
                   18877:                                break;
                   18878:                        case ZEND_FETCH_LOCAL:
                   18879:                                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18880:                                break;
                   18881:                        case ZEND_FETCH_STATIC:
                   18882:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   18883:                                break;
                   18884:                        case ZEND_FETCH_GLOBAL_LOCK:
                   18885:                                if (IS_VAR == IS_VAR && !free_op1.var) {
                   18886:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   18887:                                }
                   18888:                                break;
                   18889:                }
                   18890:        }
                   18891: 
                   18892: 
                   18893:        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                   18894:                zval_dtor(&tmp_varname);
                   18895:        }
                   18896:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   18897:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   18898:        }
                   18899:        PZVAL_LOCK(*retval);
                   18900:        switch (type) {
                   18901:                case BP_VAR_R:
                   18902:                case BP_VAR_IS:
                   18903:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   18904:                        break;
                   18905:                case BP_VAR_UNSET: {
                   18906:                        zend_free_op free_res;
                   18907: 
                   18908:                        PZVAL_UNLOCK(*retval, &free_res);
                   18909:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   18910:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   18911:                        }
                   18912:                        PZVAL_LOCK(*retval);
                   18913:                        FREE_OP_VAR_PTR(free_res);
                   18914:                }
                   18915:                /* break missing intentionally */
                   18916:                default:
                   18917:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   18918:                        break;
                   18919:        }
                   18920:        CHECK_EXCEPTION();
                   18921:        ZEND_VM_NEXT_OPCODE();
                   18922: }
                   18923: 
                   18924: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18925: {
                   18926:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18927: }
                   18928: 
                   18929: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18930: {
                   18931:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18932: }
                   18933: 
                   18934: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18935: {
                   18936:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18937: }
                   18938: 
                   18939: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18940: {
                   18941:        USE_OPLINE
                   18942: 
                   18943:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18944: }
                   18945: 
                   18946: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18947: {
                   18948:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18949: }
                   18950: 
                   18951: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18952: {
                   18953:        return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   18954: }
                   18955: 
1.1       misho    18956: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18957: {
1.1.1.2   misho    18958:        USE_OPLINE
1.1       misho    18959:        zend_free_op free_op1;
1.1.1.2   misho    18960:        zval **container;
                   18961: 
                   18962:        SAVE_OPLINE();
                   18963:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    18964: 
1.1.1.2   misho    18965:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    18966:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   18967:        }
1.1.1.2   misho    18968:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
1.1       misho    18969: 
1.1.1.2   misho    18970:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   18971:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    18972:        }
                   18973:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   18974: 
                   18975:        /* We are going to assign the result by reference */
1.1.1.2   misho    18976:        if (UNEXPECTED(opline->extended_value != 0)) {
                   18977:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   18978: 
                   18979:                if (retval_ptr) {
                   18980:                        Z_DELREF_PP(retval_ptr);
                   18981:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   18982:                        Z_ADDREF_PP(retval_ptr);
                   18983:                }
1.1       misho    18984:        }
                   18985: 
1.1.1.2   misho    18986:        CHECK_EXCEPTION();
1.1       misho    18987:        ZEND_VM_NEXT_OPCODE();
                   18988: }
                   18989: 
                   18990: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   18991: {
1.1.1.2   misho    18992:        USE_OPLINE
1.1       misho    18993:        zend_free_op free_op1;
1.1.1.2   misho    18994:        zval **container;
1.1       misho    18995: 
1.1.1.2   misho    18996:        SAVE_OPLINE();
                   18997:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   18998: 
                   18999:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    19000:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   19001:        }
1.1.1.2   misho    19002:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
1.1       misho    19003: 
1.1.1.2   misho    19004:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   19005:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    19006:        }
                   19007:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    19008:        CHECK_EXCEPTION();
1.1       misho    19009:        ZEND_VM_NEXT_OPCODE();
                   19010: }
                   19011: 
                   19012: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19013: {
1.1.1.2   misho    19014:        USE_OPLINE
1.1       misho    19015:        zend_free_op free_op1;
                   19016: 
1.1.1.2   misho    19017:        SAVE_OPLINE();
                   19018: 
                   19019:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    19020:                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
        !          19021: 
1.1.1.2   misho    19022:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    19023:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   19024:                }
1.1.1.2   misho    19025:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
                   19026:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   19027:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    19028:                }
1.1.1.5 ! misho    19029: 
        !          19030:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    19031:        } else {
1.1.1.5 ! misho    19032:                zval *container;
        !          19033: 
1.1       misho    19034:                if (IS_UNUSED == IS_UNUSED) {
                   19035:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   19036:                }
1.1.1.5 ! misho    19037:                container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    19038:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_R TSRMLS_CC);
1.1       misho    19039: 
1.1.1.5 ! misho    19040:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        !          19041:        }
1.1.1.2   misho    19042:        CHECK_EXCEPTION();
1.1       misho    19043:        ZEND_VM_NEXT_OPCODE();
                   19044: }
                   19045: 
                   19046: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19047: {
1.1.1.2   misho    19048:        USE_OPLINE
1.1       misho    19049:        zend_free_op free_op1;
1.1.1.2   misho    19050:        zval **object_ptr;
1.1       misho    19051: 
1.1.1.2   misho    19052:        SAVE_OPLINE();
                   19053:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   19054: 
                   19055:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    19056:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   19057:        }
                   19058:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   19059: 
                   19060:                zval *property_name = NULL;
                   19061: 
                   19062:                if (0) {
                   19063:                        MAKE_REAL_ZVAL_PTR(property_name);
                   19064:                }
1.1.1.2   misho    19065:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    19066:                if (0) {
                   19067:                        zval_ptr_dtor(&property_name);
                   19068:                } else {
                   19069: 
                   19070:                }
                   19071:        } else {
                   19072:                zend_free_op free_op_data1, free_op_data2;
                   19073:                zval *value;
                   19074:                zval *dim = NULL;
                   19075:                zval **variable_ptr_ptr;
                   19076: 
1.1.1.2   misho    19077:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_UNUSED, BP_VAR_W TSRMLS_CC);
                   19078: 
                   19079:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   19080:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   19081:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   19082:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   19083:                                if (RETURN_VALUE_USED(opline)) {
                   19084:                                        zval *retval;
1.1       misho    19085: 
1.1.1.2   misho    19086:                                        ALLOC_ZVAL(retval);
                   19087:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   19088:                                        INIT_PZVAL(retval);
                   19089:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   19090:                                }
                   19091:                        } else if (RETURN_VALUE_USED(opline)) {
                   19092:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   19093:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   19094:                        }
                   19095:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   19096:                        if (IS_TMP_FREE(free_op_data1)) {
                   19097:                                zval_dtor(value);
                   19098:                        }
                   19099:                        if (RETURN_VALUE_USED(opline)) {
                   19100:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   19101:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   19102:                        }
                   19103:                } else {
                   19104:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   19105:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   19106:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   19107:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   19108:                        } else {
                   19109:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   19110:                        }
                   19111:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    19112:                                PZVAL_LOCK(value);
1.1.1.2   misho    19113:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    19114:                        }
                   19115:                }
                   19116:                FREE_OP_VAR_PTR(free_op_data2);
                   19117:                FREE_OP_IF_VAR(free_op_data1);
                   19118:        }
                   19119:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19120:        /* assign_dim has two opcodes! */
1.1.1.2   misho    19121:        CHECK_EXCEPTION();
1.1       misho    19122:        ZEND_VM_INC_OPCODE();
                   19123:        ZEND_VM_NEXT_OPCODE();
                   19124: }
                   19125: 
                   19126: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19127: {
1.1.1.2   misho    19128:        USE_OPLINE
1.1       misho    19129:        zval *function_name;
                   19130:        zend_class_entry *ce;
                   19131: 
1.1.1.2   misho    19132:        SAVE_OPLINE();
1.1       misho    19133:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   19134: 
                   19135:        if (IS_VAR == IS_CONST) {
                   19136:                /* no function found. try a static method in class */
1.1.1.2   misho    19137:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   19138:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   19139:                } else {
                   19140:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    19141:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   19142:                                HANDLE_EXCEPTION();
                   19143:                        }
1.1.1.2   misho    19144:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    19145:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    19146:                        }
                   19147:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    19148:                }
                   19149:                EX(called_scope) = ce;
                   19150:        } else {
1.1.1.2   misho    19151:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    19152: 
1.1.1.2   misho    19153:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    19154:                        EX(called_scope) = EG(called_scope);
                   19155:                } else {
                   19156:                        EX(called_scope) = ce;
                   19157:                }
                   19158:        }
1.1.1.2   misho    19159: 
                   19160:        if (IS_VAR == IS_CONST &&
                   19161:            IS_UNUSED == IS_CONST &&
                   19162:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   19163:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   19164:        } else if (IS_VAR != IS_CONST &&
                   19165:                   IS_UNUSED == IS_CONST &&
                   19166:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   19167:                /* do nothing */
                   19168:        } else if (IS_UNUSED != IS_UNUSED) {
1.1       misho    19169:                char *function_name_strval = NULL;
                   19170:                int function_name_strlen = 0;
                   19171: 
                   19172: 
                   19173:                if (IS_UNUSED == IS_CONST) {
1.1.1.2   misho    19174:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   19175:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    19176:                } else {
                   19177:                        function_name = NULL;
                   19178: 
1.1.1.2   misho    19179:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    19180:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   19181:                        } else {
                   19182:                                function_name_strval = Z_STRVAL_P(function_name);
                   19183:                                function_name_strlen = Z_STRLEN_P(function_name);
                   19184:                        }
                   19185:                }
                   19186: 
                   19187:                if (function_name_strval) {
                   19188:                        if (ce->get_static_method) {
                   19189:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   19190:                        } else {
1.1.1.2   misho    19191:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_UNUSED == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    19192:                        }
1.1.1.2   misho    19193:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    19194:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   19195:                        }
1.1.1.2   misho    19196:                        if (IS_UNUSED == IS_CONST &&
                   19197:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   19198:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   19199:                                if (IS_VAR == IS_CONST) {
                   19200:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   19201:                                } else {
                   19202:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   19203:                                }
                   19204:                        }
1.1       misho    19205:                }
                   19206:                if (IS_UNUSED != IS_CONST) {
                   19207: 
                   19208:                }
                   19209:        } else {
1.1.1.2   misho    19210:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    19211:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   19212:                }
                   19213:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    19214:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    19215:                }
                   19216:                EX(fbc) = ce->constructor;
                   19217:        }
                   19218: 
                   19219:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   19220:                EX(object) = NULL;
                   19221:        } else {
                   19222:                if (EG(This) &&
                   19223:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   19224:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   19225:                    /* We are calling method of the other (incompatible) class,
                   19226:                       but passing $this. This is done for compatibility with php-4. */
                   19227:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    19228:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    19229:                        } else {
                   19230:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    19231:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    19232:                        }
                   19233:                }
                   19234:                if ((EX(object) = EG(This))) {
                   19235:                        Z_ADDREF_P(EX(object));
                   19236:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   19237:                }
                   19238:        }
                   19239: 
1.1.1.2   misho    19240:        CHECK_EXCEPTION();
1.1       misho    19241:        ZEND_VM_NEXT_OPCODE();
                   19242: }
                   19243: 
                   19244: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19245: {
1.1.1.2   misho    19246:        USE_OPLINE
1.1       misho    19247:        zend_free_op free_op1;
                   19248:        zval *expr_ptr;
                   19249: 
1.1.1.2   misho    19250:        SAVE_OPLINE();
                   19251:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   19252:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    19253: 
1.1.1.2   misho    19254:                if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   19255:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   19256:                }
                   19257:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    19258:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    19259:                Z_ADDREF_P(expr_ptr);
1.1       misho    19260:        } else {
1.1.1.2   misho    19261:                expr_ptr=_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   19262:                if (0) { /* temporary variable */
                   19263:                        zval *new_expr;
1.1       misho    19264: 
1.1.1.2   misho    19265:                        ALLOC_ZVAL(new_expr);
                   19266:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   19267:                        expr_ptr = new_expr;
                   19268:                } else if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    19269:                        zval *new_expr;
                   19270: 
                   19271:                        ALLOC_ZVAL(new_expr);
                   19272:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   19273:                        expr_ptr = new_expr;
                   19274:                        zendi_zval_copy_ctor(*expr_ptr);
                   19275:                } else {
                   19276:                        Z_ADDREF_P(expr_ptr);
                   19277:                }
                   19278:        }
1.1.1.2   misho    19279: 
                   19280:        if (IS_UNUSED != IS_UNUSED) {
                   19281: 
                   19282:                zval *offset = NULL;
                   19283:                ulong hval;
                   19284: 
1.1       misho    19285:                switch (Z_TYPE_P(offset)) {
                   19286:                        case IS_DOUBLE:
1.1.1.2   misho    19287:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   19288:                                goto num_index;
1.1       misho    19289:                        case IS_LONG:
                   19290:                        case IS_BOOL:
1.1.1.2   misho    19291:                                hval = Z_LVAL_P(offset);
                   19292: num_index:
                   19293:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    19294:                                break;
                   19295:                        case IS_STRING:
1.1.1.2   misho    19296:                                if (IS_UNUSED == IS_CONST) {
                   19297:                                        hval = Z_HASH_P(offset);
                   19298:                                } else {
                   19299:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   19300:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   19301:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   19302:                                        } else {
                   19303:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   19304:                                        }
                   19305:                                }
                   19306:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    19307:                                break;
                   19308:                        case IS_NULL:
1.1.1.2   misho    19309:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    19310:                                break;
                   19311:                        default:
                   19312:                                zend_error(E_WARNING, "Illegal offset type");
                   19313:                                zval_ptr_dtor(&expr_ptr);
                   19314:                                /* do nothing */
                   19315:                                break;
                   19316:                }
1.1.1.2   misho    19317: 
                   19318:        } else {
                   19319:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
                   19320:        }
                   19321:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   19322:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19323:        } else {
                   19324:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19325:        }
                   19326:        CHECK_EXCEPTION();
                   19327:        ZEND_VM_NEXT_OPCODE();
                   19328: }
                   19329: 
                   19330: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19331: {
                   19332:        USE_OPLINE
                   19333: 
                   19334:        array_init(&EX_T(opline->result.var).tmp_var);
                   19335:        if (IS_VAR == IS_UNUSED) {
                   19336:                ZEND_VM_NEXT_OPCODE();
                   19337: #if 0 || IS_VAR != IS_UNUSED
                   19338:        } else {
                   19339:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   19340: #endif
                   19341:        }
                   19342: }
                   19343: 
                   19344: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19345: {
                   19346:        USE_OPLINE
                   19347:        zval tmp, *varname;
                   19348:        HashTable *target_symbol_table;
                   19349:        zend_free_op free_op1;
                   19350: 
                   19351:        SAVE_OPLINE();
                   19352:        if (IS_VAR == IS_CV &&
                   19353:            IS_UNUSED == IS_UNUSED &&
                   19354:            (opline->extended_value & ZEND_QUICK_SET)) {
                   19355:                if (EG(active_symbol_table)) {
                   19356:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   19357: 
                   19358:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   19359:                        EX_CV(opline->op1.var) = NULL;
                   19360:                } else if (EX_CV(opline->op1.var)) {
                   19361:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   19362:                        EX_CV(opline->op1.var) = NULL;
                   19363:                }
                   19364:                CHECK_EXCEPTION();
                   19365:                ZEND_VM_NEXT_OPCODE();
                   19366:        }
                   19367: 
                   19368:        varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   19369: 
                   19370:        if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   19371:                ZVAL_COPY_VALUE(&tmp, varname);
                   19372:                zval_copy_ctor(&tmp);
                   19373:                convert_to_string(&tmp);
                   19374:                varname = &tmp;
                   19375:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   19376:                Z_ADDREF_P(varname);
                   19377:        }
                   19378: 
                   19379:        if (IS_UNUSED != IS_UNUSED) {
                   19380:                zend_class_entry *ce;
                   19381: 
                   19382:                if (IS_UNUSED == IS_CONST) {
                   19383:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   19384:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   19385:                        } else {
                   19386:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    19387:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    19388:                                        if (IS_VAR != IS_CONST && varname == &tmp) {
                   19389:                                                zval_dtor(&tmp);
                   19390:                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   19391:                                                zval_ptr_dtor(&varname);
                   19392:                                        }
                   19393:                                        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.4   misho    19394:                                        HANDLE_EXCEPTION();
                   19395:                                }
                   19396:                                if (UNEXPECTED(ce == NULL)) {
                   19397:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    19398:                                }
                   19399:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   19400:                        }
                   19401:                } else {
                   19402:                        ce = EX_T(opline->op2.var).class_entry;
                   19403:                }
                   19404:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   19405:        } else {
                   19406:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   19407: 
                   19408:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   19409:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   19410:        }
                   19411: 
                   19412:        if (IS_VAR != IS_CONST && varname == &tmp) {
                   19413:                zval_dtor(&tmp);
                   19414:        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                   19415:                zval_ptr_dtor(&varname);
                   19416:        }
                   19417:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19418:        CHECK_EXCEPTION();
                   19419:        ZEND_VM_NEXT_OPCODE();
                   19420: }
                   19421: 
                   19422: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19423: {
                   19424:        USE_OPLINE
                   19425:        zval **value;
                   19426:        zend_bool isset = 1;
                   19427: 
                   19428:        SAVE_OPLINE();
                   19429:        if (IS_VAR == IS_CV &&
                   19430:            IS_UNUSED == IS_UNUSED &&
                   19431:            (opline->extended_value & ZEND_QUICK_SET)) {
                   19432:                if (EX_CV(opline->op1.var)) {
                   19433:                        value = EX_CV(opline->op1.var);
                   19434:                } else if (EG(active_symbol_table)) {
                   19435:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   19436: 
                   19437:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   19438:                                isset = 0;
                   19439:                        }
                   19440:                } else {
                   19441:                        isset = 0;
                   19442:                }
                   19443:        } else {
                   19444:                HashTable *target_symbol_table;
                   19445:                zend_free_op free_op1;
                   19446:                zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   19447: 
                   19448:                if (IS_VAR != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   19449:                        ZVAL_COPY_VALUE(&tmp, varname);
                   19450:                        zval_copy_ctor(&tmp);
                   19451:                        convert_to_string(&tmp);
                   19452:                        varname = &tmp;
                   19453:                }
                   19454: 
                   19455:                if (IS_UNUSED != IS_UNUSED) {
                   19456:                        zend_class_entry *ce;
                   19457: 
                   19458:                        if (IS_UNUSED == IS_CONST) {
                   19459:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   19460:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   19461:                                } else {
                   19462:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   19463:                                        if (UNEXPECTED(ce == NULL)) {
                   19464:                                                CHECK_EXCEPTION();
                   19465:                                                ZEND_VM_NEXT_OPCODE();
                   19466:                                        }
                   19467:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   19468:                                }
                   19469:                        } else {
                   19470:                                ce = EX_T(opline->op2.var).class_entry;
                   19471:                        }
                   19472:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   19473:                        if (!value) {
                   19474:                                isset = 0;
                   19475:                        }
                   19476:                } else {
                   19477:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   19478:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   19479:                                isset = 0;
                   19480:                        }
                   19481:                }
                   19482: 
                   19483:                if (IS_VAR != IS_CONST && varname == &tmp) {
                   19484:                        zval_dtor(&tmp);
                   19485:                }
1.1       misho    19486:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19487:        }
1.1.1.2   misho    19488: 
                   19489:        if (opline->extended_value & ZEND_ISSET) {
                   19490:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   19491:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   19492:                } else {
                   19493:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   19494:                }
                   19495:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   19496:                if (!isset || !i_zend_is_true(*value)) {
                   19497:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   19498:                } else {
                   19499:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   19500:                }
                   19501:        }
                   19502: 
                   19503:        CHECK_EXCEPTION();
1.1       misho    19504:        ZEND_VM_NEXT_OPCODE();
                   19505: }
                   19506: 
1.1.1.2   misho    19507: static int ZEND_FASTCALL  ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    19508: {
1.1.1.2   misho    19509:        USE_OPLINE
                   19510:        zval *var_ptr, *new_zv;
1.1       misho    19511: 
1.1.1.2   misho    19512:        SAVE_OPLINE();
                   19513:        var_ptr = EX_T(opline->op1.var).var.ptr;
                   19514:        if (Z_TYPE_P(var_ptr) != IS_OBJECT &&
                   19515:            !PZVAL_IS_REF(var_ptr) &&
                   19516:            Z_REFCOUNT_P(var_ptr) > 1) {
                   19517: 
                   19518:                Z_DELREF_P(var_ptr);
                   19519:                ALLOC_ZVAL(new_zv);
                   19520:                INIT_PZVAL_COPY(new_zv, var_ptr);
                   19521:                var_ptr = new_zv;
                   19522:                zval_copy_ctor(var_ptr);
                   19523:                EX_T(opline->op1.var).var.ptr = var_ptr;
1.1       misho    19524:        }
1.1.1.2   misho    19525:        ZEND_VM_NEXT_OPCODE();
1.1       misho    19526: }
                   19527: 
                   19528: static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19529: {
1.1.1.2   misho    19530:        USE_OPLINE
1.1       misho    19531:        zend_free_op free_op1;
                   19532: 
1.1.1.2   misho    19533:        SAVE_OPLINE();
                   19534:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   19535:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19536:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19537:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19538: 
1.1.1.2   misho    19539:        CHECK_EXCEPTION();
1.1       misho    19540:        ZEND_VM_NEXT_OPCODE();
                   19541: }
                   19542: 
                   19543: static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19544: {
1.1.1.2   misho    19545:        USE_OPLINE
1.1       misho    19546:        zend_free_op free_op1;
                   19547: 
1.1.1.2   misho    19548:        SAVE_OPLINE();
                   19549:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   19550:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19551:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19552:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19553: 
1.1.1.2   misho    19554:        CHECK_EXCEPTION();
1.1       misho    19555:        ZEND_VM_NEXT_OPCODE();
                   19556: }
                   19557: 
                   19558: static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19559: {
1.1.1.2   misho    19560:        USE_OPLINE
1.1       misho    19561:        zend_free_op free_op1;
                   19562: 
1.1.1.2   misho    19563:        SAVE_OPLINE();
                   19564:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   19565:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19566:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19567:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19568: 
1.1.1.2   misho    19569:        CHECK_EXCEPTION();
1.1       misho    19570:        ZEND_VM_NEXT_OPCODE();
                   19571: }
                   19572: 
                   19573: static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19574: {
1.1.1.2   misho    19575:        USE_OPLINE
1.1       misho    19576:        zend_free_op free_op1;
                   19577: 
1.1.1.2   misho    19578:        SAVE_OPLINE();
                   19579:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   19580:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19581:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19582:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19583: 
1.1.1.2   misho    19584:        CHECK_EXCEPTION();
1.1       misho    19585:        ZEND_VM_NEXT_OPCODE();
                   19586: }
                   19587: 
                   19588: static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19589: {
1.1.1.2   misho    19590:        USE_OPLINE
1.1       misho    19591:        zend_free_op free_op1;
                   19592: 
1.1.1.2   misho    19593:        SAVE_OPLINE();
                   19594:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   19595:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19596:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19597:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19598: 
1.1.1.2   misho    19599:        CHECK_EXCEPTION();
1.1       misho    19600:        ZEND_VM_NEXT_OPCODE();
                   19601: }
                   19602: 
                   19603: static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19604: {
1.1.1.2   misho    19605:        USE_OPLINE
1.1       misho    19606:        zend_free_op free_op1;
                   19607: 
1.1.1.2   misho    19608:        SAVE_OPLINE();
                   19609:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   19610:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19611:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19612:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19613: 
1.1.1.2   misho    19614:        CHECK_EXCEPTION();
1.1       misho    19615:        ZEND_VM_NEXT_OPCODE();
                   19616: }
                   19617: 
                   19618: static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19619: {
1.1.1.2   misho    19620:        USE_OPLINE
1.1       misho    19621:        zend_free_op free_op1;
                   19622: 
1.1.1.2   misho    19623:        SAVE_OPLINE();
                   19624:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   19625:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19626:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19627:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19628: 
1.1.1.2   misho    19629:        CHECK_EXCEPTION();
1.1       misho    19630:        ZEND_VM_NEXT_OPCODE();
                   19631: }
                   19632: 
                   19633: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19634: {
1.1.1.2   misho    19635:        USE_OPLINE
1.1       misho    19636:        zend_free_op free_op1;
                   19637: 
1.1.1.2   misho    19638:        SAVE_OPLINE();
                   19639:        concat_function(&EX_T(opline->result.var).tmp_var,
                   19640:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19641:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19642:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19643: 
1.1.1.2   misho    19644:        CHECK_EXCEPTION();
1.1       misho    19645:        ZEND_VM_NEXT_OPCODE();
                   19646: }
                   19647: 
                   19648: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19649: {
1.1.1.2   misho    19650:        USE_OPLINE
1.1       misho    19651:        zend_free_op free_op1;
                   19652: 
1.1.1.2   misho    19653:        SAVE_OPLINE();
                   19654:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   19655:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19656:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19657:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19658: 
1.1.1.2   misho    19659:        CHECK_EXCEPTION();
1.1       misho    19660:        ZEND_VM_NEXT_OPCODE();
                   19661: }
                   19662: 
                   19663: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19664: {
1.1.1.2   misho    19665:        USE_OPLINE
1.1       misho    19666:        zend_free_op free_op1;
1.1.1.2   misho    19667:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    19668: 
1.1.1.2   misho    19669:        SAVE_OPLINE();
1.1       misho    19670:        is_identical_function(result,
1.1.1.2   misho    19671:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19672:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19673:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   19674:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19675: 
1.1.1.2   misho    19676:        CHECK_EXCEPTION();
1.1       misho    19677:        ZEND_VM_NEXT_OPCODE();
                   19678: }
                   19679: 
                   19680: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19681: {
1.1.1.2   misho    19682:        USE_OPLINE
1.1       misho    19683:        zend_free_op free_op1;
1.1.1.2   misho    19684:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    19685: 
1.1.1.2   misho    19686:        SAVE_OPLINE();
                   19687:        ZVAL_BOOL(result, fast_equal_function(result,
                   19688:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19689:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    19690:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19691: 
1.1.1.2   misho    19692:        CHECK_EXCEPTION();
1.1       misho    19693:        ZEND_VM_NEXT_OPCODE();
                   19694: }
                   19695: 
                   19696: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19697: {
1.1.1.2   misho    19698:        USE_OPLINE
1.1       misho    19699:        zend_free_op free_op1;
1.1.1.2   misho    19700:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    19701: 
1.1.1.2   misho    19702:        SAVE_OPLINE();
                   19703:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   19704:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19705:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    19706:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19707: 
1.1.1.2   misho    19708:        CHECK_EXCEPTION();
1.1       misho    19709:        ZEND_VM_NEXT_OPCODE();
                   19710: }
                   19711: 
                   19712: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19713: {
1.1.1.2   misho    19714:        USE_OPLINE
1.1       misho    19715:        zend_free_op free_op1;
1.1.1.2   misho    19716:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    19717: 
1.1.1.2   misho    19718:        SAVE_OPLINE();
                   19719:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   19720:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19721:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    19722:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19723: 
1.1.1.2   misho    19724:        CHECK_EXCEPTION();
1.1       misho    19725:        ZEND_VM_NEXT_OPCODE();
                   19726: }
                   19727: 
                   19728: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19729: {
1.1.1.2   misho    19730:        USE_OPLINE
1.1       misho    19731:        zend_free_op free_op1;
1.1.1.2   misho    19732:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    19733: 
1.1.1.2   misho    19734:        SAVE_OPLINE();
                   19735:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   19736:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19737:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    19738:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19739: 
1.1.1.2   misho    19740:        CHECK_EXCEPTION();
1.1       misho    19741:        ZEND_VM_NEXT_OPCODE();
                   19742: }
                   19743: 
                   19744: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19745: {
1.1.1.2   misho    19746:        USE_OPLINE
1.1       misho    19747:        zend_free_op free_op1;
                   19748: 
1.1.1.2   misho    19749:        SAVE_OPLINE();
                   19750:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   19751:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19752:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19753:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19754: 
1.1.1.2   misho    19755:        CHECK_EXCEPTION();
1.1       misho    19756:        ZEND_VM_NEXT_OPCODE();
                   19757: }
                   19758: 
                   19759: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19760: {
1.1.1.2   misho    19761:        USE_OPLINE
1.1       misho    19762:        zend_free_op free_op1;
                   19763: 
1.1.1.2   misho    19764:        SAVE_OPLINE();
                   19765:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   19766:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19767:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19768:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19769: 
1.1.1.2   misho    19770:        CHECK_EXCEPTION();
1.1       misho    19771:        ZEND_VM_NEXT_OPCODE();
                   19772: }
                   19773: 
                   19774: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19775: {
1.1.1.2   misho    19776:        USE_OPLINE
1.1       misho    19777:        zend_free_op free_op1;
                   19778: 
1.1.1.2   misho    19779:        SAVE_OPLINE();
                   19780:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   19781:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19782:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19783:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19784: 
1.1.1.2   misho    19785:        CHECK_EXCEPTION();
1.1       misho    19786:        ZEND_VM_NEXT_OPCODE();
                   19787: }
                   19788: 
                   19789: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   19790: {
1.1.1.2   misho    19791:        USE_OPLINE
1.1       misho    19792:        zend_free_op free_op1;
                   19793: 
1.1.1.2   misho    19794:        SAVE_OPLINE();
                   19795:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   19796:                _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   19797:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    19798:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19799: 
1.1.1.2   misho    19800:        CHECK_EXCEPTION();
1.1       misho    19801:        ZEND_VM_NEXT_OPCODE();
                   19802: }
                   19803: 
                   19804: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   19805: {
1.1.1.2   misho    19806:        USE_OPLINE
1.1       misho    19807:        zend_free_op free_op1, free_op_data1;
1.1.1.2   misho    19808:        zval **object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    19809:        zval *object;
1.1.1.2   misho    19810:        zval *property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   19811:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    19812:        int have_get_ptr = 0;
                   19813: 
1.1.1.2   misho    19814:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    19815:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   19816:        }
                   19817: 
                   19818:        make_real_object(object_ptr TSRMLS_CC);
                   19819:        object = *object_ptr;
                   19820: 
1.1.1.2   misho    19821:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    19822:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   19823: 
                   19824:                FREE_OP(free_op_data1);
                   19825: 
1.1.1.2   misho    19826:                if (RETURN_VALUE_USED(opline)) {
                   19827:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   19828:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   19829:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    19830:                }
                   19831:        } else {
                   19832:                /* here we are sure we are dealing with an object */
                   19833:                if (0) {
                   19834:                        MAKE_REAL_ZVAL_PTR(property);
                   19835:                }
                   19836: 
                   19837:                /* here property is a string */
                   19838:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   19839:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    19840:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    19841:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   19842:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   19843: 
                   19844:                                have_get_ptr = 1;
                   19845:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    19846:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    19847:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    19848:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   19849:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    19850:                                }
                   19851:                        }
                   19852:                }
                   19853: 
                   19854:                if (!have_get_ptr) {
                   19855:                        zval *z = NULL;
                   19856: 
                   19857:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   19858:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    19859:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    19860:                                }
                   19861:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   19862:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   19863:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   19864:                                }
                   19865:                        }
                   19866:                        if (z) {
                   19867:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   19868:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   19869: 
                   19870:                                        if (Z_REFCOUNT_P(z) == 0) {
                   19871:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   19872:                                                zval_dtor(z);
                   19873:                                                FREE_ZVAL(z);
                   19874:                                        }
                   19875:                                        z = value;
                   19876:                                }
                   19877:                                Z_ADDREF_P(z);
                   19878:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   19879:                                binary_op(z, z, value TSRMLS_CC);
                   19880:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    19881:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    19882:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   19883:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   19884:                                }
1.1.1.2   misho    19885:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    19886:                                        PZVAL_LOCK(z);
1.1.1.2   misho    19887:                                        EX_T(opline->result.var).var.ptr = z;
                   19888:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    19889:                                }
                   19890:                                zval_ptr_dtor(&z);
                   19891:                        } else {
                   19892:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    19893:                                if (RETURN_VALUE_USED(opline)) {
                   19894:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   19895:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   19896:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    19897:                                }
                   19898:                        }
                   19899:                }
                   19900: 
                   19901:                if (0) {
                   19902:                        zval_ptr_dtor(&property);
                   19903:                } else {
                   19904: 
                   19905:                }
                   19906:                FREE_OP(free_op_data1);
                   19907:        }
                   19908: 
                   19909:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19910:        /* assign_obj has two opcodes! */
1.1.1.2   misho    19911:        CHECK_EXCEPTION();
1.1       misho    19912:        ZEND_VM_INC_OPCODE();
                   19913:        ZEND_VM_NEXT_OPCODE();
                   19914: }
                   19915: 
                   19916: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   19917: {
1.1.1.2   misho    19918:        USE_OPLINE
1.1       misho    19919:        zend_free_op free_op1, free_op_data2, free_op_data1;
                   19920:        zval **var_ptr;
                   19921:        zval *value;
                   19922: 
1.1.1.2   misho    19923:        SAVE_OPLINE();
1.1       misho    19924:        switch (opline->extended_value) {
                   19925:                case ZEND_ASSIGN_OBJ:
                   19926:                        return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   19927:                        break;
                   19928:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    19929:                                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    19930: 
1.1.1.2   misho    19931:                                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    19932:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    19933:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    19934:                                        if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
                   19935:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   19936:                                        }
                   19937:                                        return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   19938:                                } else {
1.1.1.2   misho    19939:                                        zval *dim = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    19940: 
1.1.1.2   misho    19941:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
                   19942:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   19943:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    19944:                                }
                   19945:                        }
                   19946:                        break;
                   19947:                default:
1.1.1.2   misho    19948:                        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   19949:                        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    19950:                        /* do nothing */
                   19951:                        break;
                   19952:        }
                   19953: 
1.1.1.2   misho    19954:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    19955:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   19956:        }
                   19957: 
1.1.1.2   misho    19958:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   19959:                if (RETURN_VALUE_USED(opline)) {
                   19960:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   19961:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    19962:                }
                   19963: 
                   19964:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    19965:                CHECK_EXCEPTION();
                   19966:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   19967:                        ZEND_VM_INC_OPCODE();
                   19968:                }
1.1       misho    19969:                ZEND_VM_NEXT_OPCODE();
                   19970:        }
                   19971: 
                   19972:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   19973: 
1.1.1.2   misho    19974:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   19975:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    19976:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   19977:                /* proxy object */
                   19978:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   19979:                Z_ADDREF_P(objval);
                   19980:                binary_op(objval, objval, value TSRMLS_CC);
                   19981:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   19982:                zval_ptr_dtor(&objval);
                   19983:        } else {
                   19984:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   19985:        }
                   19986: 
1.1.1.2   misho    19987:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    19988:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    19989:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    19990:        }
                   19991: 
                   19992:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   19993:                FREE_OP(free_op_data1);
                   19994:                FREE_OP_VAR_PTR(free_op_data2);
1.1.1.2   misho    19995:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   19996:                CHECK_EXCEPTION();
                   19997:                ZEND_VM_INC_OPCODE();
                   19998:        } else {
                   19999:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20000:                CHECK_EXCEPTION();
1.1       misho    20001:        }
                   20002:        ZEND_VM_NEXT_OPCODE();
                   20003: }
                   20004: 
                   20005: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20006: {
                   20007:        return zend_binary_assign_op_helper_SPEC_VAR_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20008: }
                   20009: 
                   20010: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20011: {
                   20012:        return zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20013: }
                   20014: 
                   20015: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20016: {
                   20017:        return zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20018: }
                   20019: 
                   20020: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20021: {
                   20022:        return zend_binary_assign_op_helper_SPEC_VAR_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20023: }
                   20024: 
                   20025: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20026: {
                   20027:        return zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20028: }
                   20029: 
                   20030: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20031: {
                   20032:        return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20033: }
                   20034: 
                   20035: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20036: {
                   20037:        return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20038: }
                   20039: 
                   20040: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20041: {
                   20042:        return zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20043: }
                   20044: 
                   20045: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20046: {
                   20047:        return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20048: }
                   20049: 
                   20050: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20051: {
                   20052:        return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20053: }
                   20054: 
                   20055: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20056: {
                   20057:        return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20058: }
                   20059: 
                   20060: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   20061: {
1.1.1.2   misho    20062:        USE_OPLINE
1.1       misho    20063:        zend_free_op free_op1;
1.1.1.2   misho    20064:        zval **object_ptr;
1.1       misho    20065:        zval *object;
1.1.1.2   misho    20066:        zval *property;
                   20067:        zval **retval;
1.1       misho    20068:        int have_get_ptr = 0;
                   20069: 
1.1.1.2   misho    20070:        SAVE_OPLINE();
                   20071:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20072:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20073:        retval = &EX_T(opline->result.var).var.ptr;
                   20074: 
                   20075:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    20076:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   20077:        }
                   20078: 
                   20079:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   20080:        object = *object_ptr;
                   20081: 
1.1.1.2   misho    20082:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    20083:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   20084: 
1.1.1.2   misho    20085:                if (RETURN_VALUE_USED(opline)) {
                   20086:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   20087:                        *retval = &EG(uninitialized_zval);
1.1       misho    20088:                }
                   20089:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20090:                CHECK_EXCEPTION();
1.1       misho    20091:                ZEND_VM_NEXT_OPCODE();
                   20092:        }
                   20093: 
                   20094:        /* here we are sure we are dealing with an object */
                   20095: 
                   20096:        if (0) {
                   20097:                MAKE_REAL_ZVAL_PTR(property);
                   20098:        }
                   20099: 
                   20100:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    20101:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20102:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   20103:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   20104: 
                   20105:                        have_get_ptr = 1;
                   20106:                        incdec_op(*zptr);
1.1.1.2   misho    20107:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    20108:                                *retval = *zptr;
                   20109:                                PZVAL_LOCK(*retval);
                   20110:                        }
                   20111:                }
                   20112:        }
                   20113: 
                   20114:        if (!have_get_ptr) {
                   20115:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    20116:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20117: 
1.1.1.2   misho    20118:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    20119:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   20120: 
                   20121:                                if (Z_REFCOUNT_P(z) == 0) {
                   20122:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   20123:                                        zval_dtor(z);
                   20124:                                        FREE_ZVAL(z);
                   20125:                                }
                   20126:                                z = value;
                   20127:                        }
                   20128:                        Z_ADDREF_P(z);
                   20129:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   20130:                        incdec_op(z);
                   20131:                        *retval = z;
1.1.1.2   misho    20132:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   20133:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    20134:                        zval_ptr_dtor(&z);
                   20135:                } else {
                   20136:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    20137:                        if (RETURN_VALUE_USED(opline)) {
                   20138:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   20139:                                *retval = &EG(uninitialized_zval);
1.1       misho    20140:                        }
                   20141:                }
                   20142:        }
                   20143: 
                   20144:        if (0) {
                   20145:                zval_ptr_dtor(&property);
                   20146:        } else {
                   20147: 
                   20148:        }
                   20149:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20150:        CHECK_EXCEPTION();
1.1       misho    20151:        ZEND_VM_NEXT_OPCODE();
                   20152: }
                   20153: 
                   20154: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20155: {
                   20156:        return zend_pre_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20157: }
                   20158: 
                   20159: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20160: {
                   20161:        return zend_pre_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20162: }
                   20163: 
                   20164: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   20165: {
1.1.1.2   misho    20166:        USE_OPLINE
1.1       misho    20167:        zend_free_op free_op1;
1.1.1.2   misho    20168:        zval **object_ptr;
1.1       misho    20169:        zval *object;
1.1.1.2   misho    20170:        zval *property;
                   20171:        zval *retval;
1.1       misho    20172:        int have_get_ptr = 0;
                   20173: 
1.1.1.2   misho    20174:        SAVE_OPLINE();
                   20175:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20176:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20177:        retval = &EX_T(opline->result.var).tmp_var;
                   20178: 
                   20179:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    20180:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   20181:        }
                   20182: 
                   20183:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   20184:        object = *object_ptr;
                   20185: 
1.1.1.2   misho    20186:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    20187:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   20188: 
1.1.1.2   misho    20189:                ZVAL_NULL(retval);
1.1       misho    20190:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20191:                CHECK_EXCEPTION();
1.1       misho    20192:                ZEND_VM_NEXT_OPCODE();
                   20193:        }
                   20194: 
                   20195:        /* here we are sure we are dealing with an object */
                   20196: 
                   20197:        if (0) {
                   20198:                MAKE_REAL_ZVAL_PTR(property);
                   20199:        }
                   20200: 
                   20201:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    20202:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20203:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   20204:                        have_get_ptr = 1;
                   20205:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   20206: 
1.1.1.2   misho    20207:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    20208:                        zendi_zval_copy_ctor(*retval);
                   20209: 
                   20210:                        incdec_op(*zptr);
                   20211: 
                   20212:                }
                   20213:        }
                   20214: 
                   20215:        if (!have_get_ptr) {
                   20216:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    20217:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20218:                        zval *z_copy;
                   20219: 
1.1.1.2   misho    20220:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    20221:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   20222: 
                   20223:                                if (Z_REFCOUNT_P(z) == 0) {
                   20224:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   20225:                                        zval_dtor(z);
                   20226:                                        FREE_ZVAL(z);
                   20227:                                }
                   20228:                                z = value;
                   20229:                        }
1.1.1.2   misho    20230:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    20231:                        zendi_zval_copy_ctor(*retval);
                   20232:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    20233:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    20234:                        zendi_zval_copy_ctor(*z_copy);
                   20235:                        incdec_op(z_copy);
                   20236:                        Z_ADDREF_P(z);
1.1.1.2   misho    20237:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20238:                        zval_ptr_dtor(&z_copy);
                   20239:                        zval_ptr_dtor(&z);
                   20240:                } else {
                   20241:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    20242:                        ZVAL_NULL(retval);
1.1       misho    20243:                }
                   20244:        }
                   20245: 
                   20246:        if (0) {
                   20247:                zval_ptr_dtor(&property);
                   20248:        } else {
                   20249: 
                   20250:        }
                   20251:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20252:        CHECK_EXCEPTION();
1.1       misho    20253:        ZEND_VM_NEXT_OPCODE();
                   20254: }
                   20255: 
                   20256: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20257: {
                   20258:        return zend_post_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20259: }
                   20260: 
                   20261: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20262: {
                   20263:        return zend_post_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20264: }
                   20265: 
                   20266: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20267: {
1.1.1.2   misho    20268:        USE_OPLINE
1.1       misho    20269:        zend_free_op free_op1;
1.1.1.5 ! misho    20270:        zval *container;
1.1       misho    20271: 
1.1.1.2   misho    20272:        SAVE_OPLINE();
                   20273: 
1.1.1.5 ! misho    20274:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          20275:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    20276:        }
1.1.1.5 ! misho    20277:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    20278:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
1.1       misho    20279: 
                   20280:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20281:        CHECK_EXCEPTION();
1.1       misho    20282:        ZEND_VM_NEXT_OPCODE();
                   20283: }
                   20284: 
                   20285: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20286: {
1.1.1.2   misho    20287:        USE_OPLINE
1.1       misho    20288:        zend_free_op free_op1;
1.1.1.2   misho    20289:        zval **container;
1.1       misho    20290: 
1.1.1.2   misho    20291:        SAVE_OPLINE();
                   20292:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20293: 
                   20294:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20295:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20296:        }
1.1.1.2   misho    20297:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
1.1       misho    20298: 
1.1.1.2   misho    20299:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20300:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20301:        }
                   20302:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20303: 
                   20304:        /* We are going to assign the result by reference */
1.1.1.2   misho    20305:        if (UNEXPECTED(opline->extended_value != 0)) {
                   20306:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   20307: 
                   20308:                if (retval_ptr) {
                   20309:                        Z_DELREF_PP(retval_ptr);
                   20310:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   20311:                        Z_ADDREF_PP(retval_ptr);
                   20312:                }
1.1       misho    20313:        }
                   20314: 
1.1.1.2   misho    20315:        CHECK_EXCEPTION();
1.1       misho    20316:        ZEND_VM_NEXT_OPCODE();
                   20317: }
                   20318: 
                   20319: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20320: {
1.1.1.2   misho    20321:        USE_OPLINE
1.1       misho    20322:        zend_free_op free_op1;
1.1.1.2   misho    20323:        zval **container;
                   20324: 
                   20325:        SAVE_OPLINE();
                   20326:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20327: 
1.1.1.2   misho    20328:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20329:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20330:        }
1.1.1.2   misho    20331:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_RW TSRMLS_CC);
1.1       misho    20332: 
1.1.1.2   misho    20333:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20334:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20335:        }
                   20336:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20337:        CHECK_EXCEPTION();
1.1       misho    20338:        ZEND_VM_NEXT_OPCODE();
                   20339: }
                   20340: 
                   20341: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20342: {
1.1.1.2   misho    20343:        USE_OPLINE
1.1       misho    20344:        zend_free_op free_op1;
1.1.1.5 ! misho    20345:        zval *container;
1.1       misho    20346: 
1.1.1.2   misho    20347:        SAVE_OPLINE();
1.1.1.5 ! misho    20348:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    20349:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
1.1       misho    20350: 
                   20351:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20352:        CHECK_EXCEPTION();
1.1       misho    20353:        ZEND_VM_NEXT_OPCODE();
                   20354: }
                   20355: 
                   20356: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20357: {
1.1.1.2   misho    20358:        USE_OPLINE
1.1       misho    20359:        zend_free_op free_op1;
                   20360: 
1.1.1.2   misho    20361:        SAVE_OPLINE();
                   20362: 
                   20363:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    20364:                zval **container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
        !          20365: 
1.1.1.2   misho    20366:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20367:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20368:                }
1.1.1.2   misho    20369:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
                   20370:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20371:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20372:                }
1.1.1.5 ! misho    20373: 
        !          20374:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1       misho    20375:        } else {
1.1.1.5 ! misho    20376:                zval *container;
        !          20377: 
1.1       misho    20378:                if (IS_CV == IS_UNUSED) {
                   20379:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   20380:                }
1.1.1.5 ! misho    20381:                container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1.1.2   misho    20382:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
1.1       misho    20383: 
1.1.1.5 ! misho    20384:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
        !          20385:        }
1.1.1.2   misho    20386:        CHECK_EXCEPTION();
1.1       misho    20387:        ZEND_VM_NEXT_OPCODE();
                   20388: }
                   20389: 
                   20390: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20391: {
1.1.1.2   misho    20392:        USE_OPLINE
1.1       misho    20393:        zend_free_op free_op1;
1.1.1.2   misho    20394:        zval **container;
                   20395: 
                   20396:        SAVE_OPLINE();
                   20397:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20398: 
                   20399:        if (IS_VAR == IS_CV) {
                   20400:                if (container != &EG(uninitialized_zval_ptr)) {
                   20401:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   20402:                }
                   20403:        }
1.1.1.2   misho    20404:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20405:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20406:        }
1.1.1.2   misho    20407:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    20408: 
1.1.1.2   misho    20409:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20410:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20411:        }
                   20412:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20413:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    20414:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   20415:        } else {
                   20416:                zend_free_op free_res;
1.1.1.2   misho    20417:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    20418: 
1.1.1.2   misho    20419:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   20420:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   20421:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    20422:                }
1.1.1.2   misho    20423:                PZVAL_LOCK(*retval_ptr);
1.1       misho    20424:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    20425:                CHECK_EXCEPTION();
                   20426:                ZEND_VM_NEXT_OPCODE();
1.1       misho    20427:        }
                   20428: }
                   20429: 
1.1.1.2   misho    20430: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_CV(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    20431: {
1.1.1.2   misho    20432:        USE_OPLINE
1.1       misho    20433:        zend_free_op free_op1;
1.1.1.2   misho    20434:        zval *container;
1.1       misho    20435: 
1.1.1.2   misho    20436:        zval *offset;
1.1       misho    20437: 
1.1.1.2   misho    20438:        SAVE_OPLINE();
                   20439:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20440:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20441: 
                   20442:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   20443:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   20444:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   20445:                PZVAL_LOCK(&EG(uninitialized_zval));
                   20446:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    20447: 
                   20448:        } else {
                   20449:                zval *retval;
                   20450: 
                   20451:                if (0) {
                   20452:                        MAKE_REAL_ZVAL_PTR(offset);
                   20453:                }
                   20454: 
                   20455:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    20456:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20457: 
1.1.1.2   misho    20458:                PZVAL_LOCK(retval);
                   20459:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    20460: 
                   20461:                if (0) {
                   20462:                        zval_ptr_dtor(&offset);
                   20463:                } else {
                   20464: 
                   20465:                }
                   20466:        }
                   20467: 
                   20468:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20469:        CHECK_EXCEPTION();
1.1       misho    20470:        ZEND_VM_NEXT_OPCODE();
                   20471: }
                   20472: 
                   20473: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20474: {
1.1.1.2   misho    20475:        return zend_fetch_property_address_read_helper_SPEC_VAR_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    20476: }
                   20477: 
                   20478: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20479: {
1.1.1.2   misho    20480:        USE_OPLINE
1.1       misho    20481:        zend_free_op free_op1;
1.1.1.2   misho    20482:        zval *property;
1.1       misho    20483:        zval **container;
                   20484: 
1.1.1.2   misho    20485:        SAVE_OPLINE();
                   20486:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20487: 
1.1       misho    20488:        if (IS_VAR == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    20489:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   20490:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    20491:        }
                   20492: 
                   20493:        if (0) {
                   20494:                MAKE_REAL_ZVAL_PTR(property);
                   20495:        }
1.1.1.2   misho    20496:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20497:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20498:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   20499:        }
1.1.1.2   misho    20500: 
                   20501:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    20502:        if (0) {
                   20503:                zval_ptr_dtor(&property);
                   20504:        } else {
                   20505: 
                   20506:        }
1.1.1.2   misho    20507:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20508:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20509:        }
                   20510:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20511: 
                   20512:        /* We are going to assign the result by reference */
                   20513:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    20514:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   20515: 
                   20516:                Z_DELREF_PP(retval_ptr);
                   20517:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   20518:                Z_ADDREF_PP(retval_ptr);
                   20519:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   20520:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    20521:        }
                   20522: 
1.1.1.2   misho    20523:        CHECK_EXCEPTION();
1.1       misho    20524:        ZEND_VM_NEXT_OPCODE();
                   20525: }
                   20526: 
                   20527: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20528: {
1.1.1.2   misho    20529:        USE_OPLINE
1.1       misho    20530:        zend_free_op free_op1;
1.1.1.2   misho    20531:        zval *property;
                   20532:        zval **container;
                   20533: 
                   20534:        SAVE_OPLINE();
                   20535:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20536:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20537: 
                   20538:        if (0) {
                   20539:                MAKE_REAL_ZVAL_PTR(property);
                   20540:        }
1.1.1.2   misho    20541:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20542:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   20543:        }
1.1.1.2   misho    20544:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    20545:        if (0) {
                   20546:                zval_ptr_dtor(&property);
                   20547:        } else {
                   20548: 
                   20549:        }
1.1.1.2   misho    20550:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20551:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20552:        }
                   20553:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20554:        CHECK_EXCEPTION();
1.1       misho    20555:        ZEND_VM_NEXT_OPCODE();
                   20556: }
                   20557: 
                   20558: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20559: {
1.1.1.2   misho    20560:        USE_OPLINE
                   20561:        zend_free_op free_op1;
                   20562:        zval *container;
                   20563: 
                   20564:        zval *offset;
                   20565: 
                   20566:        SAVE_OPLINE();
                   20567:        container = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20568:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20569: 
                   20570:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   20571:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   20572:                PZVAL_LOCK(&EG(uninitialized_zval));
                   20573:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   20574: 
                   20575:        } else {
                   20576:                zval *retval;
                   20577: 
                   20578:                if (0) {
                   20579:                        MAKE_REAL_ZVAL_PTR(offset);
                   20580:                }
                   20581: 
                   20582:                /* here we are sure we are dealing with an object */
                   20583:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   20584: 
                   20585:                PZVAL_LOCK(retval);
                   20586:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   20587: 
                   20588:                if (0) {
                   20589:                        zval_ptr_dtor(&offset);
                   20590:                } else {
                   20591: 
                   20592:                }
                   20593:        }
                   20594: 
                   20595:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20596:        CHECK_EXCEPTION();
                   20597:        ZEND_VM_NEXT_OPCODE();
1.1       misho    20598: }
                   20599: 
                   20600: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20601: {
1.1.1.2   misho    20602:        USE_OPLINE
1.1       misho    20603: 
1.1.1.2   misho    20604:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    20605:                /* Behave like FETCH_OBJ_W */
                   20606:                zend_free_op free_op1;
1.1.1.2   misho    20607:                zval *property;
                   20608:                zval **container;
                   20609: 
                   20610:                SAVE_OPLINE();
                   20611:                property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20612:                container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20613: 
                   20614:                if (0) {
                   20615:                        MAKE_REAL_ZVAL_PTR(property);
                   20616:                }
1.1.1.2   misho    20617:                if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20618:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   20619:                }
1.1.1.2   misho    20620:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    20621:                if (0) {
                   20622:                        zval_ptr_dtor(&property);
                   20623:                } else {
                   20624: 
                   20625:                }
1.1.1.2   misho    20626:                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20627:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20628:                }
                   20629:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
1.1.1.2   misho    20630:                CHECK_EXCEPTION();
1.1       misho    20631:                ZEND_VM_NEXT_OPCODE();
                   20632:        } else {
1.1.1.2   misho    20633:                return zend_fetch_property_address_read_helper_SPEC_VAR_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    20634:        }
                   20635: }
                   20636: 
                   20637: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20638: {
1.1.1.2   misho    20639:        USE_OPLINE
1.1       misho    20640:        zend_free_op free_op1, free_res;
1.1.1.2   misho    20641:        zval **container;
                   20642:        zval *property;
                   20643: 
                   20644:        SAVE_OPLINE();
                   20645:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20646:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20647: 
                   20648:        if (IS_VAR == IS_CV) {
                   20649:                if (container != &EG(uninitialized_zval_ptr)) {
                   20650:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   20651:                }
                   20652:        }
                   20653:        if (0) {
                   20654:                MAKE_REAL_ZVAL_PTR(property);
                   20655:        }
1.1.1.2   misho    20656:        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    20657:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   20658:        }
1.1.1.2   misho    20659:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    20660:        if (0) {
                   20661:                zval_ptr_dtor(&property);
                   20662:        } else {
                   20663: 
                   20664:        }
1.1.1.2   misho    20665:        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                   20666:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    20667:        }
                   20668:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20669: 
1.1.1.2   misho    20670:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   20671:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   20672:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    20673:        }
1.1.1.2   misho    20674:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    20675:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    20676:        CHECK_EXCEPTION();
1.1       misho    20677:        ZEND_VM_NEXT_OPCODE();
                   20678: }
                   20679: 
                   20680: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20681: {
1.1.1.2   misho    20682:        USE_OPLINE
1.1       misho    20683:        zend_free_op free_op1;
1.1.1.2   misho    20684:        zval **object_ptr;
                   20685:        zval *property_name;
                   20686: 
                   20687:        SAVE_OPLINE();
                   20688:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20689:        property_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20690: 
                   20691:        if (0) {
                   20692:                MAKE_REAL_ZVAL_PTR(property_name);
                   20693:        }
1.1.1.2   misho    20694:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    20695:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20696:        }
1.1.1.2   misho    20697:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20698:        if (0) {
                   20699:                zval_ptr_dtor(&property_name);
                   20700:        } else {
                   20701: 
                   20702:        }
                   20703:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20704:        /* assign_obj has two opcodes! */
1.1.1.2   misho    20705:        CHECK_EXCEPTION();
1.1       misho    20706:        ZEND_VM_INC_OPCODE();
                   20707:        ZEND_VM_NEXT_OPCODE();
                   20708: }
                   20709: 
                   20710: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20711: {
1.1.1.2   misho    20712:        USE_OPLINE
1.1       misho    20713:        zend_free_op free_op1;
1.1.1.2   misho    20714:        zval **object_ptr;
                   20715: 
                   20716:        SAVE_OPLINE();
                   20717:        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20718: 
1.1.1.2   misho    20719:        if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    20720:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   20721:        }
                   20722:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   20723: 
1.1.1.2   misho    20724:                zval *property_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20725: 
                   20726:                if (0) {
                   20727:                        MAKE_REAL_ZVAL_PTR(property_name);
                   20728:                }
1.1.1.2   misho    20729:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    20730:                if (0) {
                   20731:                        zval_ptr_dtor(&property_name);
                   20732:                } else {
                   20733: 
                   20734:                }
                   20735:        } else {
                   20736:                zend_free_op free_op_data1, free_op_data2;
                   20737:                zval *value;
1.1.1.2   misho    20738:                zval *dim = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20739:                zval **variable_ptr_ptr;
                   20740: 
1.1.1.2   misho    20741:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_CV, BP_VAR_W TSRMLS_CC);
1.1       misho    20742: 
1.1.1.2   misho    20743:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   20744:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   20745:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   20746:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   20747:                                if (RETURN_VALUE_USED(opline)) {
                   20748:                                        zval *retval;
                   20749: 
                   20750:                                        ALLOC_ZVAL(retval);
                   20751:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   20752:                                        INIT_PZVAL(retval);
                   20753:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   20754:                                }
                   20755:                        } else if (RETURN_VALUE_USED(opline)) {
                   20756:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   20757:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   20758:                        }
                   20759:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   20760:                        if (IS_TMP_FREE(free_op_data1)) {
                   20761:                                zval_dtor(value);
                   20762:                        }
                   20763:                        if (RETURN_VALUE_USED(opline)) {
                   20764:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   20765:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   20766:                        }
                   20767:                } else {
                   20768:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   20769:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20770:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   20771:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20772:                        } else {
                   20773:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20774:                        }
                   20775:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    20776:                                PZVAL_LOCK(value);
1.1.1.2   misho    20777:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    20778:                        }
                   20779:                }
                   20780:                FREE_OP_VAR_PTR(free_op_data2);
                   20781:                FREE_OP_IF_VAR(free_op_data1);
                   20782:        }
                   20783:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20784:        /* assign_dim has two opcodes! */
1.1.1.2   misho    20785:        CHECK_EXCEPTION();
1.1       misho    20786:        ZEND_VM_INC_OPCODE();
                   20787:        ZEND_VM_NEXT_OPCODE();
                   20788: }
                   20789: 
                   20790: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20791: {
1.1.1.2   misho    20792:        USE_OPLINE
1.1       misho    20793:        zend_free_op free_op1;
1.1.1.2   misho    20794:        zval *value;
                   20795:        zval **variable_ptr_ptr;
1.1       misho    20796: 
1.1.1.2   misho    20797:        SAVE_OPLINE();
                   20798:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   20799:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20800: 
                   20801:        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   20802:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_CV TSRMLS_CC)) {
                   20803:                        if (RETURN_VALUE_USED(opline)) {
                   20804:                                zval *retval;
                   20805: 
                   20806:                                ALLOC_ZVAL(retval);
                   20807:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   20808:                                INIT_PZVAL(retval);
                   20809:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   20810:                        }
                   20811:                } else if (RETURN_VALUE_USED(opline)) {
                   20812:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   20813:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   20814:                }
                   20815:        } else if (IS_VAR == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   20816:                if (0) {
                   20817:                        zval_dtor(value);
                   20818:                }
                   20819:                if (RETURN_VALUE_USED(opline)) {
                   20820:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   20821:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   20822:                }
                   20823:        } else {
                   20824:                if (IS_CV == IS_TMP_VAR) {
                   20825:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20826:                } else if (IS_CV == IS_CONST) {
                   20827:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20828:                } else {
                   20829:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   20830:                }
                   20831:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    20832:                        PZVAL_LOCK(value);
1.1.1.2   misho    20833:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    20834:                }
                   20835:        }
                   20836: 
                   20837:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20838: 
                   20839:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   20840: 
1.1.1.2   misho    20841:        CHECK_EXCEPTION();
1.1       misho    20842:        ZEND_VM_NEXT_OPCODE();
                   20843: }
                   20844: 
                   20845: static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20846: {
1.1.1.2   misho    20847:        USE_OPLINE
1.1       misho    20848:        zend_free_op free_op1, free_op2;
                   20849:        zval **variable_ptr_ptr;
1.1.1.2   misho    20850:        zval **value_ptr_ptr;
                   20851: 
                   20852:        SAVE_OPLINE();
                   20853:        value_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20854: 
                   20855:        if (IS_CV == IS_VAR &&
                   20856:            value_ptr_ptr &&
                   20857:            !Z_ISREF_PP(value_ptr_ptr) &&
                   20858:            opline->extended_value == ZEND_RETURNS_FUNCTION &&
1.1.1.2   misho    20859:            !EX_T(opline->op2.var).var.fcall_returned_reference) {
1.1       misho    20860:                if (free_op2.var == NULL) {
                   20861:                        PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
                   20862:                }
                   20863:                zend_error(E_STRICT, "Only variables should be assigned by reference");
                   20864:                if (UNEXPECTED(EG(exception) != NULL)) {
                   20865: 
1.1.1.2   misho    20866:                        HANDLE_EXCEPTION();
1.1       misho    20867:                }
                   20868:                return ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   20869:        } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   20870:                PZVAL_LOCK(*value_ptr_ptr);
                   20871:        }
1.1.1.2   misho    20872:        if (IS_VAR == IS_VAR && UNEXPECTED(EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr)) {
1.1       misho    20873:                zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
                   20874:        }
                   20875: 
1.1.1.2   misho    20876:        variable_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   20877:        if ((IS_CV == IS_VAR && UNEXPECTED(value_ptr_ptr == NULL)) ||
                   20878:            (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL))) {
1.1       misho    20879:                zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
                   20880:        }
                   20881:        zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
                   20882: 
                   20883:        if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   20884:                Z_DELREF_PP(variable_ptr_ptr);
                   20885:        }
                   20886: 
1.1.1.2   misho    20887:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    20888:                PZVAL_LOCK(*variable_ptr_ptr);
1.1.1.2   misho    20889:                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
1.1       misho    20890:        }
                   20891: 
                   20892:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20893: 
1.1.1.2   misho    20894:        CHECK_EXCEPTION();
1.1       misho    20895:        ZEND_VM_NEXT_OPCODE();
                   20896: }
                   20897: 
                   20898: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20899: {
1.1.1.2   misho    20900:        USE_OPLINE
1.1       misho    20901:        zval *function_name;
                   20902:        char *function_name_strval;
                   20903:        int function_name_strlen;
                   20904:        zend_free_op free_op1;
                   20905: 
1.1.1.2   misho    20906:        SAVE_OPLINE();
1.1       misho    20907:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   20908: 
1.1.1.2   misho    20909:        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    20910: 
1.1.1.2   misho    20911:        if (IS_CV != IS_CONST &&
                   20912:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    20913:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   20914:        }
                   20915: 
                   20916:        function_name_strval = Z_STRVAL_P(function_name);
                   20917:        function_name_strlen = Z_STRLEN_P(function_name);
                   20918: 
1.1.1.2   misho    20919:        EX(object) = _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    20920: 
1.1.1.2   misho    20921:        if (EXPECTED(EX(object) != NULL) &&
                   20922:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   20923:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    20924: 
1.1.1.2   misho    20925:                if (IS_CV != IS_CONST ||
                   20926:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   20927:                    zval *object = EX(object);
                   20928: 
                   20929:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   20930:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   20931:                        }
                   20932: 
                   20933:                        /* First, locate the function. */
                   20934:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   20935:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   20936:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   20937:                        }
                   20938:                        if (IS_CV == IS_CONST &&
                   20939:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   20940:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   20941:                            EXPECTED(EX(object) == object)) {
                   20942:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   20943:                        }
1.1       misho    20944:                }
                   20945:        } else {
                   20946:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   20947:        }
                   20948: 
                   20949:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   20950:                EX(object) = NULL;
                   20951:        } else {
                   20952:                if (!PZVAL_IS_REF(EX(object))) {
                   20953:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   20954:                } else {
                   20955:                        zval *this_ptr;
                   20956:                        ALLOC_ZVAL(this_ptr);
                   20957:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   20958:                        zval_copy_ctor(this_ptr);
                   20959:                        EX(object) = this_ptr;
                   20960:                }
                   20961:        }
                   20962: 
                   20963:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   20964: 
1.1.1.2   misho    20965:        CHECK_EXCEPTION();
1.1       misho    20966:        ZEND_VM_NEXT_OPCODE();
                   20967: }
                   20968: 
                   20969: static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   20970: {
1.1.1.2   misho    20971:        USE_OPLINE
1.1       misho    20972:        zval *function_name;
                   20973:        zend_class_entry *ce;
                   20974: 
1.1.1.2   misho    20975:        SAVE_OPLINE();
1.1       misho    20976:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   20977: 
                   20978:        if (IS_VAR == IS_CONST) {
                   20979:                /* no function found. try a static method in class */
1.1.1.2   misho    20980:                if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   20981:                        ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   20982:                } else {
                   20983:                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    20984:                        if (UNEXPECTED(EG(exception) != NULL)) {
                   20985:                                HANDLE_EXCEPTION();
                   20986:                        }
1.1.1.2   misho    20987:                        if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    20988:                                zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    20989:                        }
                   20990:                        CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    20991:                }
                   20992:                EX(called_scope) = ce;
                   20993:        } else {
1.1.1.2   misho    20994:                ce = EX_T(opline->op1.var).class_entry;
1.1       misho    20995: 
1.1.1.2   misho    20996:                if (opline->extended_value == ZEND_FETCH_CLASS_PARENT || opline->extended_value == ZEND_FETCH_CLASS_SELF) {
1.1       misho    20997:                        EX(called_scope) = EG(called_scope);
                   20998:                } else {
                   20999:                        EX(called_scope) = ce;
                   21000:                }
                   21001:        }
1.1.1.2   misho    21002: 
                   21003:        if (IS_VAR == IS_CONST &&
                   21004:            IS_CV == IS_CONST &&
                   21005:            CACHED_PTR(opline->op2.literal->cache_slot)) {
                   21006:                EX(fbc) = CACHED_PTR(opline->op2.literal->cache_slot);
                   21007:        } else if (IS_VAR != IS_CONST &&
                   21008:                   IS_CV == IS_CONST &&
                   21009:                   (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce))) {
                   21010:                /* do nothing */
                   21011:        } else if (IS_CV != IS_UNUSED) {
1.1       misho    21012:                char *function_name_strval = NULL;
                   21013:                int function_name_strlen = 0;
                   21014: 
                   21015: 
                   21016:                if (IS_CV == IS_CONST) {
1.1.1.2   misho    21017:                        function_name_strval = Z_STRVAL_P(opline->op2.zv);
                   21018:                        function_name_strlen = Z_STRLEN_P(opline->op2.zv);
1.1       misho    21019:                } else {
1.1.1.2   misho    21020:                        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    21021: 
1.1.1.2   misho    21022:                        if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    21023:                                zend_error_noreturn(E_ERROR, "Function name must be a string");
                   21024:                        } else {
                   21025:                                function_name_strval = Z_STRVAL_P(function_name);
                   21026:                                function_name_strlen = Z_STRLEN_P(function_name);
                   21027:                        }
                   21028:                }
                   21029: 
                   21030:                if (function_name_strval) {
                   21031:                        if (ce->get_static_method) {
                   21032:                                EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
                   21033:                        } else {
1.1.1.2   misho    21034:                                EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
1.1       misho    21035:                        }
1.1.1.2   misho    21036:                        if (UNEXPECTED(EX(fbc) == NULL)) {
1.1       misho    21037:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                   21038:                        }
1.1.1.2   misho    21039:                        if (IS_CV == IS_CONST &&
                   21040:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   21041:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                   21042:                                if (IS_VAR == IS_CONST) {
                   21043:                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                   21044:                                } else {
                   21045:                                        CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, EX(fbc));
                   21046:                                }
                   21047:                        }
1.1       misho    21048:                }
                   21049:                if (IS_CV != IS_CONST) {
                   21050: 
                   21051:                }
                   21052:        } else {
1.1.1.2   misho    21053:                if (UNEXPECTED(ce->constructor == NULL)) {
1.1       misho    21054:                        zend_error_noreturn(E_ERROR, "Cannot call constructor");
                   21055:                }
                   21056:                if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1.1.1.2   misho    21057:                        zend_error_noreturn(E_ERROR, "Cannot call private %s::__construct()", ce->name);
1.1       misho    21058:                }
                   21059:                EX(fbc) = ce->constructor;
                   21060:        }
                   21061: 
                   21062:        if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
                   21063:                EX(object) = NULL;
                   21064:        } else {
                   21065:                if (EG(This) &&
                   21066:                    Z_OBJ_HT_P(EG(This))->get_class_entry &&
                   21067:                    !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
                   21068:                    /* We are calling method of the other (incompatible) class,
                   21069:                       but passing $this. This is done for compatibility with php-4. */
                   21070:                        if (EX(fbc)->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1.1.1.2   misho    21071:                                zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    21072:                        } else {
                   21073:                                /* An internal function assumes $this is present and won't check that. So PHP would crash by allowing the call. */
1.1.1.2   misho    21074:                                zend_error_noreturn(E_ERROR, "Non-static method %s::%s() cannot be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1.1       misho    21075:                        }
                   21076:                }
                   21077:                if ((EX(object) = EG(This))) {
                   21078:                        Z_ADDREF_P(EX(object));
                   21079:                        EX(called_scope) = Z_OBJCE_P(EX(object));
                   21080:                }
                   21081:        }
                   21082: 
1.1.1.2   misho    21083:        CHECK_EXCEPTION();
1.1       misho    21084:        ZEND_VM_NEXT_OPCODE();
                   21085: }
                   21086: 
                   21087: static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21088: {
1.1.1.2   misho    21089:        USE_OPLINE
1.1       misho    21090:        zend_free_op free_op1;
                   21091: 
1.1.1.2   misho    21092:        SAVE_OPLINE();
1.1       misho    21093:        if (IS_VAR==IS_VAR) {
1.1.1.2   misho    21094:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    21095:        }
1.1.1.2   misho    21096:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   21097:                                 _get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC),
                   21098:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
                   21099: 
                   21100:        CHECK_EXCEPTION();
1.1       misho    21101:        ZEND_VM_NEXT_OPCODE();
                   21102: }
                   21103: 
                   21104: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21105: {
1.1.1.2   misho    21106:        USE_OPLINE
1.1       misho    21107:        zend_free_op free_op1;
                   21108:        zval *expr_ptr;
                   21109: 
1.1.1.2   misho    21110:        SAVE_OPLINE();
                   21111:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
                   21112:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    21113: 
1.1.1.2   misho    21114:                if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   21115:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   21116:                }
                   21117:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    21118:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    21119:                Z_ADDREF_P(expr_ptr);
1.1       misho    21120:        } else {
1.1.1.2   misho    21121:                expr_ptr=_get_zval_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   21122:                if (0) { /* temporary variable */
                   21123:                        zval *new_expr;
1.1       misho    21124: 
1.1.1.2   misho    21125:                        ALLOC_ZVAL(new_expr);
                   21126:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   21127:                        expr_ptr = new_expr;
                   21128:                } else if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    21129:                        zval *new_expr;
                   21130: 
                   21131:                        ALLOC_ZVAL(new_expr);
                   21132:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   21133:                        expr_ptr = new_expr;
                   21134:                        zendi_zval_copy_ctor(*expr_ptr);
                   21135:                } else {
                   21136:                        Z_ADDREF_P(expr_ptr);
                   21137:                }
                   21138:        }
1.1.1.2   misho    21139: 
                   21140:        if (IS_CV != IS_UNUSED) {
                   21141: 
                   21142:                zval *offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   21143:                ulong hval;
                   21144: 
1.1       misho    21145:                switch (Z_TYPE_P(offset)) {
                   21146:                        case IS_DOUBLE:
1.1.1.2   misho    21147:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   21148:                                goto num_index;
1.1       misho    21149:                        case IS_LONG:
                   21150:                        case IS_BOOL:
1.1.1.2   misho    21151:                                hval = Z_LVAL_P(offset);
                   21152: num_index:
                   21153:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    21154:                                break;
                   21155:                        case IS_STRING:
1.1.1.2   misho    21156:                                if (IS_CV == IS_CONST) {
                   21157:                                        hval = Z_HASH_P(offset);
                   21158:                                } else {
                   21159:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   21160:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   21161:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   21162:                                        } else {
                   21163:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   21164:                                        }
                   21165:                                }
                   21166:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    21167:                                break;
                   21168:                        case IS_NULL:
1.1.1.2   misho    21169:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    21170:                                break;
                   21171:                        default:
                   21172:                                zend_error(E_WARNING, "Illegal offset type");
                   21173:                                zval_ptr_dtor(&expr_ptr);
                   21174:                                /* do nothing */
                   21175:                                break;
                   21176:                }
                   21177: 
                   21178:        } else {
1.1.1.2   misho    21179:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    21180:        }
1.1.1.2   misho    21181:        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
1.1       misho    21182:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   21183:        } else {
                   21184:                if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   21185:        }
1.1.1.2   misho    21186:        CHECK_EXCEPTION();
1.1       misho    21187:        ZEND_VM_NEXT_OPCODE();
                   21188: }
                   21189: 
                   21190: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21191: {
1.1.1.2   misho    21192:        USE_OPLINE
1.1       misho    21193: 
1.1.1.2   misho    21194:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    21195:        if (IS_VAR == IS_UNUSED) {
                   21196:                ZEND_VM_NEXT_OPCODE();
                   21197: #if 0 || IS_VAR != IS_UNUSED
                   21198:        } else {
                   21199:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21200: #endif
                   21201:        }
                   21202: }
                   21203: 
                   21204: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21205: {
1.1.1.2   misho    21206:        USE_OPLINE
1.1       misho    21207:        zend_free_op free_op1;
1.1.1.2   misho    21208:        zval **container;
1.1       misho    21209:        zval *offset;
1.1.1.2   misho    21210:        ulong hval;
1.1       misho    21211: 
1.1.1.2   misho    21212:        SAVE_OPLINE();
                   21213:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    21214:        if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   21215:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   21216:        }
1.1.1.2   misho    21217:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    21218: 
                   21219:        if (IS_VAR != IS_VAR || container) {
                   21220:                switch (Z_TYPE_PP(container)) {
                   21221:                        case IS_ARRAY: {
                   21222:                                HashTable *ht = Z_ARRVAL_PP(container);
                   21223: 
                   21224:                                switch (Z_TYPE_P(offset)) {
                   21225:                                        case IS_DOUBLE:
1.1.1.2   misho    21226:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    21227:                                                zend_hash_index_del(ht, hval);
                   21228:                                                break;
1.1       misho    21229:                                        case IS_RESOURCE:
                   21230:                                        case IS_BOOL:
                   21231:                                        case IS_LONG:
1.1.1.2   misho    21232:                                                hval = Z_LVAL_P(offset);
                   21233:                                                zend_hash_index_del(ht, hval);
1.1       misho    21234:                                                break;
                   21235:                                        case IS_STRING:
                   21236:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   21237:                                                        Z_ADDREF_P(offset);
                   21238:                                                }
1.1.1.2   misho    21239:                                                if (IS_CV == IS_CONST) {
                   21240:                                                        hval = Z_HASH_P(offset);
                   21241:                                                } else {
                   21242:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   21243:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   21244:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   21245:                                                        } else {
                   21246:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    21247:                                                        }
                   21248:                                                }
1.1.1.2   misho    21249:                                                if (ht == &EG(symbol_table)) {
                   21250:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   21251:                                                } else {
                   21252:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   21253:                                                }
                   21254:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   21255:                                                        zval_ptr_dtor(&offset);
                   21256:                                                }
                   21257:                                                break;
                   21258: num_index_dim:
                   21259:                                                zend_hash_index_del(ht, hval);
1.1       misho    21260:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   21261:                                                        zval_ptr_dtor(&offset);
                   21262:                                                }
                   21263:                                                break;
                   21264:                                        case IS_NULL:
                   21265:                                                zend_hash_del(ht, "", sizeof(""));
                   21266:                                                break;
                   21267:                                        default:
                   21268:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   21269:                                                break;
                   21270:                                }
                   21271: 
                   21272:                                break;
                   21273:                        }
                   21274:                        case IS_OBJECT:
1.1.1.2   misho    21275:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    21276:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   21277:                                }
                   21278:                                if (0) {
                   21279:                                        MAKE_REAL_ZVAL_PTR(offset);
                   21280:                                }
                   21281:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   21282:                                if (0) {
                   21283:                                        zval_ptr_dtor(&offset);
                   21284:                                } else {
                   21285: 
                   21286:                                }
                   21287:                                break;
                   21288:                        case IS_STRING:
                   21289:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   21290:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   21291:                        default:
                   21292: 
                   21293:                                break;
                   21294:                }
                   21295:        } else {
                   21296: 
                   21297:        }
                   21298:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   21299: 
1.1.1.2   misho    21300:        CHECK_EXCEPTION();
1.1       misho    21301:        ZEND_VM_NEXT_OPCODE();
                   21302: }
                   21303: 
                   21304: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21305: {
1.1.1.2   misho    21306:        USE_OPLINE
1.1       misho    21307:        zend_free_op free_op1;
1.1.1.2   misho    21308:        zval **container;
                   21309:        zval *offset;
                   21310: 
                   21311:        SAVE_OPLINE();
                   21312:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
                   21313:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    21314: 
                   21315:        if (IS_VAR != IS_VAR || container) {
                   21316:                if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   21317:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   21318:                }
                   21319:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   21320:                        if (0) {
                   21321:                                MAKE_REAL_ZVAL_PTR(offset);
                   21322:                        }
                   21323:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    21324:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21325:                        } else {
                   21326:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   21327:                        }
                   21328:                        if (0) {
                   21329:                                zval_ptr_dtor(&offset);
                   21330:                        } else {
                   21331: 
                   21332:                        }
                   21333:                } else {
                   21334: 
                   21335:                }
                   21336:        } else {
                   21337: 
                   21338:        }
                   21339:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   21340: 
1.1.1.2   misho    21341:        CHECK_EXCEPTION();
1.1       misho    21342:        ZEND_VM_NEXT_OPCODE();
                   21343: }
                   21344: 
                   21345: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   21346: {
1.1.1.2   misho    21347:        USE_OPLINE
1.1       misho    21348:        zend_free_op free_op1;
1.1.1.2   misho    21349:        zval **container;
1.1       misho    21350:        zval **value = NULL;
                   21351:        int result = 0;
1.1.1.2   misho    21352:        ulong hval;
                   21353:        zval *offset;
1.1       misho    21354: 
1.1.1.2   misho    21355:        SAVE_OPLINE();
                   21356:        container = _get_zval_ptr_ptr_var(opline->op1.var, EX_Ts(), &free_op1 TSRMLS_CC);
1.1       misho    21357: 
1.1.1.2   misho    21358:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    21359: 
1.1.1.2   misho    21360:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   21361:                HashTable *ht;
                   21362:                int isset = 0;
1.1       misho    21363: 
1.1.1.2   misho    21364:                ht = Z_ARRVAL_PP(container);
1.1       misho    21365: 
1.1.1.2   misho    21366:                switch (Z_TYPE_P(offset)) {
                   21367:                        case IS_DOUBLE:
                   21368:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   21369:                                goto num_index_prop;
                   21370:                        case IS_RESOURCE:
                   21371:                        case IS_BOOL:
                   21372:                        case IS_LONG:
                   21373:                                hval = Z_LVAL_P(offset);
                   21374: num_index_prop:
                   21375:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   21376:                                        isset = 1;
                   21377:                                }
                   21378:                                break;
                   21379:                        case IS_STRING:
                   21380:                                if (IS_CV == IS_CONST) {
                   21381:                                        hval = Z_HASH_P(offset);
                   21382:                                } else {
                   21383:                                        if (!prop_dim) {
                   21384:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    21385:                                        }
1.1.1.2   misho    21386:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   21387:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    21388:                                        } else {
1.1.1.2   misho    21389:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    21390:                                        }
                   21391:                                }
1.1.1.2   misho    21392:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   21393:                                        isset = 1;
                   21394:                                }
                   21395:                                break;
                   21396:                        case IS_NULL:
                   21397:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   21398:                                        isset = 1;
1.1       misho    21399:                                }
1.1.1.2   misho    21400:                                break;
                   21401:                        default:
                   21402:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   21403:                                break;
                   21404:                }
                   21405: 
                   21406:                if (opline->extended_value & ZEND_ISSET) {
                   21407:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   21408:                                result = 0;
                   21409:                        } else {
                   21410:                                result = isset;
1.1       misho    21411:                        }
1.1.1.2   misho    21412:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   21413:                        if (!isset || !i_zend_is_true(*value)) {
                   21414:                                result = 0;
1.1       misho    21415:                        } else {
1.1.1.2   misho    21416:                                result = 1;
                   21417:                        }
                   21418:                }
1.1       misho    21419: 
1.1.1.2   misho    21420:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   21421:                if (0) {
                   21422:                        MAKE_REAL_ZVAL_PTR(offset);
                   21423:                }
                   21424:                if (prop_dim) {
                   21425:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   21426:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   21427:                        } else {
                   21428:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   21429:                                result = 0;
                   21430:                        }
                   21431:                } else {
                   21432:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   21433:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   21434:                        } else {
                   21435:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   21436:                                result = 0;
1.1       misho    21437:                        }
1.1.1.2   misho    21438:                }
                   21439:                if (0) {
                   21440:                        zval_ptr_dtor(&offset);
                   21441:                } else {
                   21442: 
                   21443:                }
                   21444:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   21445:                zval tmp;
1.1       misho    21446: 
1.1.1.2   misho    21447:                if (Z_TYPE_P(offset) != IS_LONG) {
                   21448:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   21449:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   21450:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   21451:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    21452:                                zval_copy_ctor(&tmp);
                   21453:                                convert_to_long(&tmp);
                   21454:                                offset = &tmp;
1.1.1.2   misho    21455:                        } else {
                   21456:                                /* can not be converted to proper offset, return "not set" */
                   21457:                                result = 0;
1.1       misho    21458:                        }
1.1.1.2   misho    21459:                }
                   21460:                if (Z_TYPE_P(offset) == IS_LONG) {
                   21461:                        if (opline->extended_value & ZEND_ISSET) {
                   21462:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   21463:                                        result = 1;
                   21464:                                }
                   21465:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   21466:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   21467:                                        result = 1;
1.1       misho    21468:                                }
                   21469:                        }
1.1.1.2   misho    21470:                }
1.1       misho    21471: 
1.1.1.2   misho    21472:        } else {
1.1       misho    21473: 
                   21474:        }
                   21475: 
1.1.1.2   misho    21476:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   21477:        if (opline->extended_value & ZEND_ISSET) {
                   21478:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   21479:        } else {
                   21480:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    21481:        }
                   21482: 
                   21483:        if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
                   21484: 
1.1.1.2   misho    21485:        CHECK_EXCEPTION();
1.1       misho    21486:        ZEND_VM_NEXT_OPCODE();
                   21487: }
                   21488: 
                   21489: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21490: {
                   21491:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21492: }
                   21493: 
                   21494: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21495: {
                   21496:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21497: }
                   21498: 
                   21499: static int ZEND_FASTCALL  ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21500: {
1.1.1.2   misho    21501:        USE_OPLINE
1.1       misho    21502: 
1.1.1.2   misho    21503:        zval *obj;
1.1       misho    21504:        zend_class_entry *ce;
                   21505:        zend_function *clone;
                   21506:        zend_object_clone_obj_t clone_call;
                   21507: 
1.1.1.2   misho    21508:        SAVE_OPLINE();
                   21509:        obj = _get_obj_zval_ptr_unused(TSRMLS_C);
                   21510: 
1.1       misho    21511:        if (IS_UNUSED == IS_CONST ||
1.1.1.2   misho    21512:            UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT)) {
1.1       misho    21513:                zend_error_noreturn(E_ERROR, "__clone method called on non-object");
                   21514:        }
                   21515: 
                   21516:        ce = Z_OBJCE_P(obj);
                   21517:        clone = ce ? ce->clone : NULL;
                   21518:        clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
1.1.1.2   misho    21519:        if (UNEXPECTED(clone_call == NULL)) {
1.1       misho    21520:                if (ce) {
                   21521:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
                   21522:                } else {
                   21523:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
                   21524:                }
                   21525:        }
                   21526: 
                   21527:        if (ce && clone) {
                   21528:                if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
                   21529:                        /* Ensure that if we're calling a private function, we're allowed to do so.
                   21530:                         */
1.1.1.2   misho    21531:                        if (UNEXPECTED(ce != EG(scope))) {
1.1       misho    21532:                                zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   21533:                        }
                   21534:                } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
                   21535:                        /* Ensure that if we're calling a protected function, we're allowed to do so.
                   21536:                         */
1.1.1.3   misho    21537:                        if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
1.1       misho    21538:                                zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   21539:                        }
                   21540:                }
                   21541:        }
                   21542: 
1.1.1.2   misho    21543:        if (EXPECTED(EG(exception) == NULL)) {
                   21544:                zval *retval;
                   21545: 
                   21546:                ALLOC_ZVAL(retval);
                   21547:                Z_OBJVAL_P(retval) = clone_call(obj TSRMLS_CC);
                   21548:                Z_TYPE_P(retval) = IS_OBJECT;
                   21549:                Z_SET_REFCOUNT_P(retval, 1);
                   21550:                Z_SET_ISREF_P(retval);
                   21551:                if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
                   21552:                        zval_ptr_dtor(&retval);
                   21553:                } else {
                   21554:                        AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    21555:                }
                   21556:        }
                   21557: 
1.1.1.2   misho    21558:        CHECK_EXCEPTION();
1.1       misho    21559:        ZEND_VM_NEXT_OPCODE();
                   21560: }
                   21561: 
                   21562: static int ZEND_FASTCALL  ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21563: {
                   21564: #if 0 || (IS_UNUSED != IS_UNUSED)
1.1.1.2   misho    21565:        USE_OPLINE
                   21566: 
                   21567:        SAVE_OPLINE();
1.1       misho    21568:        if (IS_UNUSED != IS_UNUSED) {
                   21569: 
                   21570:                zval *ptr = NULL;
                   21571: 
                   21572:                if (Z_TYPE_P(ptr) == IS_LONG) {
                   21573:                        EG(exit_status) = Z_LVAL_P(ptr);
                   21574:                } else {
                   21575:                        zend_print_variable(ptr);
                   21576:                }
                   21577: 
                   21578:        }
                   21579: #endif
                   21580:        zend_bailout();
1.1.1.2   misho    21581:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
1.1       misho    21582: }
                   21583: 
                   21584: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   21585: {
1.1.1.2   misho    21586:        USE_OPLINE
1.1       misho    21587:        zend_free_op free_op_data1;
                   21588:        zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   21589:        zval *object;
1.1.1.2   misho    21590:        zval *property = opline->op2.zv;
                   21591:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    21592:        int have_get_ptr = 0;
                   21593: 
1.1.1.2   misho    21594:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    21595:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   21596:        }
                   21597: 
                   21598:        make_real_object(object_ptr TSRMLS_CC);
                   21599:        object = *object_ptr;
                   21600: 
1.1.1.2   misho    21601:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    21602:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   21603: 
                   21604:                FREE_OP(free_op_data1);
                   21605: 
1.1.1.2   misho    21606:                if (RETURN_VALUE_USED(opline)) {
                   21607:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   21608:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   21609:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    21610:                }
                   21611:        } else {
                   21612:                /* here we are sure we are dealing with an object */
                   21613:                if (0) {
                   21614:                        MAKE_REAL_ZVAL_PTR(property);
                   21615:                }
                   21616: 
                   21617:                /* here property is a string */
                   21618:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   21619:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    21620:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21621:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   21622:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   21623: 
                   21624:                                have_get_ptr = 1;
                   21625:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    21626:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    21627:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    21628:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   21629:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    21630:                                }
                   21631:                        }
                   21632:                }
                   21633: 
                   21634:                if (!have_get_ptr) {
                   21635:                        zval *z = NULL;
                   21636: 
                   21637:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   21638:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    21639:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21640:                                }
                   21641:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   21642:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   21643:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   21644:                                }
                   21645:                        }
                   21646:                        if (z) {
                   21647:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   21648:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   21649: 
                   21650:                                        if (Z_REFCOUNT_P(z) == 0) {
                   21651:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   21652:                                                zval_dtor(z);
                   21653:                                                FREE_ZVAL(z);
                   21654:                                        }
                   21655:                                        z = value;
                   21656:                                }
                   21657:                                Z_ADDREF_P(z);
                   21658:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   21659:                                binary_op(z, z, value TSRMLS_CC);
                   21660:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    21661:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21662:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   21663:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   21664:                                }
1.1.1.2   misho    21665:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    21666:                                        PZVAL_LOCK(z);
1.1.1.2   misho    21667:                                        EX_T(opline->result.var).var.ptr = z;
                   21668:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    21669:                                }
                   21670:                                zval_ptr_dtor(&z);
                   21671:                        } else {
                   21672:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    21673:                                if (RETURN_VALUE_USED(opline)) {
                   21674:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   21675:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   21676:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    21677:                                }
                   21678:                        }
                   21679:                }
                   21680: 
                   21681:                if (0) {
                   21682:                        zval_ptr_dtor(&property);
                   21683:                } else {
                   21684: 
                   21685:                }
                   21686:                FREE_OP(free_op_data1);
                   21687:        }
                   21688: 
                   21689:        /* assign_obj has two opcodes! */
1.1.1.2   misho    21690:        CHECK_EXCEPTION();
1.1       misho    21691:        ZEND_VM_INC_OPCODE();
                   21692:        ZEND_VM_NEXT_OPCODE();
                   21693: }
                   21694: 
                   21695: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   21696: {
1.1.1.2   misho    21697:        USE_OPLINE
1.1       misho    21698:        zend_free_op free_op_data2, free_op_data1;
                   21699:        zval **var_ptr;
                   21700:        zval *value;
                   21701: 
1.1.1.2   misho    21702:        SAVE_OPLINE();
1.1       misho    21703:        switch (opline->extended_value) {
                   21704:                case ZEND_ASSIGN_OBJ:
                   21705:                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21706:                        break;
                   21707:                case ZEND_ASSIGN_DIM: {
                   21708:                                zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   21709: 
1.1.1.2   misho    21710:                                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    21711:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    21712:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    21713:                                        if (IS_UNUSED == IS_VAR && !0) {
                   21714:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   21715:                                        }
                   21716:                                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21717:                                } else {
1.1.1.2   misho    21718:                                        zval *dim = opline->op2.zv;
1.1       misho    21719: 
1.1.1.2   misho    21720:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
                   21721:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   21722:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    21723:                                }
                   21724:                        }
                   21725:                        break;
                   21726:                default:
1.1.1.2   misho    21727:                        value = opline->op2.zv;
1.1       misho    21728:                        var_ptr = NULL;
                   21729:                        /* do nothing */
                   21730:                        break;
                   21731:        }
                   21732: 
1.1.1.2   misho    21733:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    21734:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   21735:        }
                   21736: 
1.1.1.2   misho    21737:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   21738:                if (RETURN_VALUE_USED(opline)) {
                   21739:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   21740:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    21741:                }
                   21742: 
                   21743: 
1.1.1.2   misho    21744:                CHECK_EXCEPTION();
                   21745:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   21746:                        ZEND_VM_INC_OPCODE();
                   21747:                }
1.1       misho    21748:                ZEND_VM_NEXT_OPCODE();
                   21749:        }
                   21750: 
                   21751:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   21752: 
1.1.1.2   misho    21753:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   21754:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    21755:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   21756:                /* proxy object */
                   21757:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   21758:                Z_ADDREF_P(objval);
                   21759:                binary_op(objval, objval, value TSRMLS_CC);
                   21760:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   21761:                zval_ptr_dtor(&objval);
                   21762:        } else {
                   21763:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   21764:        }
                   21765: 
1.1.1.2   misho    21766:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    21767:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    21768:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    21769:        }
                   21770: 
                   21771:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   21772:                FREE_OP(free_op_data1);
                   21773:                FREE_OP_VAR_PTR(free_op_data2);
                   21774: 
1.1.1.2   misho    21775:                CHECK_EXCEPTION();
                   21776:                ZEND_VM_INC_OPCODE();
                   21777:        } else {
                   21778: 
                   21779:                CHECK_EXCEPTION();
                   21780:        }
1.1       misho    21781:        ZEND_VM_NEXT_OPCODE();
                   21782: }
                   21783: 
                   21784: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21785: {
                   21786:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21787: }
                   21788: 
                   21789: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21790: {
                   21791:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21792: }
                   21793: 
                   21794: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21795: {
                   21796:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21797: }
                   21798: 
                   21799: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21800: {
                   21801:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21802: }
                   21803: 
                   21804: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21805: {
                   21806:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21807: }
                   21808: 
                   21809: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21810: {
                   21811:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21812: }
                   21813: 
                   21814: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21815: {
                   21816:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21817: }
                   21818: 
                   21819: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21820: {
                   21821:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21822: }
                   21823: 
                   21824: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21825: {
                   21826:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21827: }
                   21828: 
                   21829: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21830: {
                   21831:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21832: }
                   21833: 
                   21834: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21835: {
                   21836:        return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21837: }
                   21838: 
                   21839: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   21840: {
1.1.1.2   misho    21841:        USE_OPLINE
1.1       misho    21842: 
1.1.1.2   misho    21843:        zval **object_ptr;
1.1       misho    21844:        zval *object;
1.1.1.2   misho    21845:        zval *property;
                   21846:        zval **retval;
1.1       misho    21847:        int have_get_ptr = 0;
                   21848: 
1.1.1.2   misho    21849:        SAVE_OPLINE();
                   21850:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   21851:        property = opline->op2.zv;
                   21852:        retval = &EX_T(opline->result.var).var.ptr;
                   21853: 
                   21854:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    21855:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   21856:        }
                   21857: 
                   21858:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   21859:        object = *object_ptr;
                   21860: 
1.1.1.2   misho    21861:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    21862:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   21863: 
1.1.1.2   misho    21864:                if (RETURN_VALUE_USED(opline)) {
                   21865:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   21866:                        *retval = &EG(uninitialized_zval);
1.1       misho    21867:                }
                   21868: 
1.1.1.2   misho    21869:                CHECK_EXCEPTION();
1.1       misho    21870:                ZEND_VM_NEXT_OPCODE();
                   21871:        }
                   21872: 
                   21873:        /* here we are sure we are dealing with an object */
                   21874: 
                   21875:        if (0) {
                   21876:                MAKE_REAL_ZVAL_PTR(property);
                   21877:        }
                   21878: 
                   21879:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    21880:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21881:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   21882:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   21883: 
                   21884:                        have_get_ptr = 1;
                   21885:                        incdec_op(*zptr);
1.1.1.2   misho    21886:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    21887:                                *retval = *zptr;
                   21888:                                PZVAL_LOCK(*retval);
                   21889:                        }
                   21890:                }
                   21891:        }
                   21892: 
                   21893:        if (!have_get_ptr) {
                   21894:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    21895:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21896: 
1.1.1.2   misho    21897:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    21898:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   21899: 
                   21900:                                if (Z_REFCOUNT_P(z) == 0) {
                   21901:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   21902:                                        zval_dtor(z);
                   21903:                                        FREE_ZVAL(z);
                   21904:                                }
                   21905:                                z = value;
                   21906:                        }
                   21907:                        Z_ADDREF_P(z);
                   21908:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   21909:                        incdec_op(z);
                   21910:                        *retval = z;
1.1.1.2   misho    21911:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   21912:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    21913:                        zval_ptr_dtor(&z);
                   21914:                } else {
                   21915:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    21916:                        if (RETURN_VALUE_USED(opline)) {
                   21917:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   21918:                                *retval = &EG(uninitialized_zval);
1.1       misho    21919:                        }
                   21920:                }
                   21921:        }
                   21922: 
                   21923:        if (0) {
                   21924:                zval_ptr_dtor(&property);
                   21925:        } else {
                   21926: 
                   21927:        }
                   21928: 
1.1.1.2   misho    21929:        CHECK_EXCEPTION();
1.1       misho    21930:        ZEND_VM_NEXT_OPCODE();
                   21931: }
                   21932: 
                   21933: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21934: {
                   21935:        return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21936: }
                   21937: 
                   21938: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   21939: {
                   21940:        return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   21941: }
                   21942: 
                   21943: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   21944: {
1.1.1.2   misho    21945:        USE_OPLINE
1.1       misho    21946: 
1.1.1.2   misho    21947:        zval **object_ptr;
1.1       misho    21948:        zval *object;
1.1.1.2   misho    21949:        zval *property;
                   21950:        zval *retval;
1.1       misho    21951:        int have_get_ptr = 0;
                   21952: 
1.1.1.2   misho    21953:        SAVE_OPLINE();
                   21954:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   21955:        property = opline->op2.zv;
                   21956:        retval = &EX_T(opline->result.var).tmp_var;
                   21957: 
                   21958:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    21959:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   21960:        }
                   21961: 
                   21962:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   21963:        object = *object_ptr;
                   21964: 
1.1.1.2   misho    21965:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    21966:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   21967: 
1.1.1.2   misho    21968:                ZVAL_NULL(retval);
1.1       misho    21969: 
1.1.1.2   misho    21970:                CHECK_EXCEPTION();
1.1       misho    21971:                ZEND_VM_NEXT_OPCODE();
                   21972:        }
                   21973: 
                   21974:        /* here we are sure we are dealing with an object */
                   21975: 
                   21976:        if (0) {
                   21977:                MAKE_REAL_ZVAL_PTR(property);
                   21978:        }
                   21979: 
                   21980:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    21981:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21982:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   21983:                        have_get_ptr = 1;
                   21984:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   21985: 
1.1.1.2   misho    21986:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    21987:                        zendi_zval_copy_ctor(*retval);
                   21988: 
                   21989:                        incdec_op(*zptr);
                   21990: 
                   21991:                }
                   21992:        }
                   21993: 
                   21994:        if (!have_get_ptr) {
                   21995:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    21996:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    21997:                        zval *z_copy;
                   21998: 
1.1.1.2   misho    21999:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    22000:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   22001: 
                   22002:                                if (Z_REFCOUNT_P(z) == 0) {
                   22003:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   22004:                                        zval_dtor(z);
                   22005:                                        FREE_ZVAL(z);
                   22006:                                }
                   22007:                                z = value;
                   22008:                        }
1.1.1.2   misho    22009:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    22010:                        zendi_zval_copy_ctor(*retval);
                   22011:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    22012:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    22013:                        zendi_zval_copy_ctor(*z_copy);
                   22014:                        incdec_op(z_copy);
                   22015:                        Z_ADDREF_P(z);
1.1.1.2   misho    22016:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22017:                        zval_ptr_dtor(&z_copy);
                   22018:                        zval_ptr_dtor(&z);
                   22019:                } else {
                   22020:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    22021:                        ZVAL_NULL(retval);
1.1       misho    22022:                }
                   22023:        }
                   22024: 
                   22025:        if (0) {
                   22026:                zval_ptr_dtor(&property);
                   22027:        } else {
                   22028: 
                   22029:        }
                   22030: 
1.1.1.2   misho    22031:        CHECK_EXCEPTION();
1.1       misho    22032:        ZEND_VM_NEXT_OPCODE();
                   22033: }
                   22034: 
                   22035: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22036: {
                   22037:        return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22038: }
                   22039: 
                   22040: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22041: {
                   22042:        return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22043: }
                   22044: 
1.1.1.2   misho    22045: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    22046: {
1.1.1.2   misho    22047:        USE_OPLINE
1.1       misho    22048: 
1.1.1.2   misho    22049:        zval *container;
1.1       misho    22050: 
1.1.1.2   misho    22051:        zval *offset;
1.1       misho    22052: 
1.1.1.2   misho    22053:        SAVE_OPLINE();
                   22054:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   22055:        offset  = opline->op2.zv;
                   22056: 
                   22057:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   22058:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   22059:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   22060:                PZVAL_LOCK(&EG(uninitialized_zval));
                   22061:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    22062: 
                   22063:        } else {
                   22064:                zval *retval;
                   22065: 
                   22066:                if (0) {
                   22067:                        MAKE_REAL_ZVAL_PTR(offset);
                   22068:                }
                   22069: 
                   22070:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    22071:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22072: 
1.1.1.2   misho    22073:                PZVAL_LOCK(retval);
                   22074:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    22075: 
                   22076:                if (0) {
                   22077:                        zval_ptr_dtor(&offset);
                   22078:                } else {
                   22079: 
                   22080:                }
                   22081:        }
                   22082: 
1.1.1.2   misho    22083:        CHECK_EXCEPTION();
1.1       misho    22084:        ZEND_VM_NEXT_OPCODE();
                   22085: }
                   22086: 
                   22087: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22088: {
1.1.1.2   misho    22089:        return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    22090: }
                   22091: 
                   22092: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22093: {
1.1.1.2   misho    22094:        USE_OPLINE
1.1       misho    22095:        zend_free_op free_op1;
1.1.1.2   misho    22096:        zval *property;
1.1       misho    22097:        zval **container;
                   22098: 
1.1.1.2   misho    22099:        SAVE_OPLINE();
                   22100:        property = opline->op2.zv;
                   22101: 
1.1       misho    22102:        if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    22103:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   22104:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    22105:        }
                   22106: 
                   22107:        if (0) {
                   22108:                MAKE_REAL_ZVAL_PTR(property);
                   22109:        }
                   22110:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1.1.2   misho    22111:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    22112:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   22113:        }
1.1.1.2   misho    22114: 
                   22115:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    22116:        if (0) {
                   22117:                zval_ptr_dtor(&property);
                   22118:        } else {
                   22119: 
                   22120:        }
1.1.1.2   misho    22121:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   22122:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    22123:        }
                   22124: 
                   22125:        /* We are going to assign the result by reference */
                   22126:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    22127:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   22128: 
                   22129:                Z_DELREF_PP(retval_ptr);
                   22130:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   22131:                Z_ADDREF_PP(retval_ptr);
                   22132:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   22133:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    22134:        }
                   22135: 
1.1.1.2   misho    22136:        CHECK_EXCEPTION();
1.1       misho    22137:        ZEND_VM_NEXT_OPCODE();
                   22138: }
                   22139: 
                   22140: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22141: {
1.1.1.2   misho    22142:        USE_OPLINE
1.1       misho    22143:        zend_free_op free_op1;
1.1.1.2   misho    22144:        zval *property;
                   22145:        zval **container;
                   22146: 
                   22147:        SAVE_OPLINE();
                   22148:        property = opline->op2.zv;
                   22149:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    22150: 
                   22151:        if (0) {
                   22152:                MAKE_REAL_ZVAL_PTR(property);
                   22153:        }
1.1.1.2   misho    22154:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    22155:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   22156:        }
1.1.1.2   misho    22157:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    22158:        if (0) {
                   22159:                zval_ptr_dtor(&property);
                   22160:        } else {
                   22161: 
                   22162:        }
1.1.1.2   misho    22163:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   22164:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    22165:        }
                   22166: 
1.1.1.2   misho    22167:        CHECK_EXCEPTION();
1.1       misho    22168:        ZEND_VM_NEXT_OPCODE();
                   22169: }
                   22170: 
                   22171: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22172: {
1.1.1.2   misho    22173:        USE_OPLINE
                   22174: 
                   22175:        zval *container;
                   22176: 
                   22177:        zval *offset;
                   22178: 
                   22179:        SAVE_OPLINE();
                   22180:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   22181:        offset  = opline->op2.zv;
                   22182: 
                   22183:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   22184:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   22185:                PZVAL_LOCK(&EG(uninitialized_zval));
                   22186:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   22187: 
                   22188:        } else {
                   22189:                zval *retval;
                   22190: 
                   22191:                if (0) {
                   22192:                        MAKE_REAL_ZVAL_PTR(offset);
                   22193:                }
                   22194: 
                   22195:                /* here we are sure we are dealing with an object */
                   22196:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   22197: 
                   22198:                PZVAL_LOCK(retval);
                   22199:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   22200: 
                   22201:                if (0) {
                   22202:                        zval_ptr_dtor(&offset);
                   22203:                } else {
                   22204: 
                   22205:                }
                   22206:        }
                   22207: 
                   22208:        CHECK_EXCEPTION();
                   22209:        ZEND_VM_NEXT_OPCODE();
1.1       misho    22210: }
                   22211: 
                   22212: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22213: {
1.1.1.2   misho    22214:        USE_OPLINE
1.1       misho    22215: 
1.1.1.2   misho    22216:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    22217:                /* Behave like FETCH_OBJ_W */
                   22218:                zend_free_op free_op1;
1.1.1.2   misho    22219:                zval *property;
                   22220:                zval **container;
                   22221: 
                   22222:                SAVE_OPLINE();
                   22223:                property = opline->op2.zv;
                   22224:                container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    22225: 
                   22226:                if (0) {
                   22227:                        MAKE_REAL_ZVAL_PTR(property);
                   22228:                }
1.1.1.2   misho    22229:                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    22230:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   22231:                }
1.1.1.2   misho    22232:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    22233:                if (0) {
                   22234:                        zval_ptr_dtor(&property);
                   22235:                } else {
                   22236: 
                   22237:                }
1.1.1.2   misho    22238:                if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   22239:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    22240:                }
                   22241: 
1.1.1.2   misho    22242:                CHECK_EXCEPTION();
1.1       misho    22243:                ZEND_VM_NEXT_OPCODE();
                   22244:        } else {
1.1.1.2   misho    22245:                return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    22246:        }
                   22247: }
                   22248: 
                   22249: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22250: {
1.1.1.2   misho    22251:        USE_OPLINE
1.1       misho    22252:        zend_free_op free_op1, free_res;
1.1.1.2   misho    22253:        zval **container;
                   22254:        zval *property;
                   22255: 
                   22256:        SAVE_OPLINE();
                   22257:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   22258:        property = opline->op2.zv;
1.1       misho    22259: 
                   22260:        if (IS_UNUSED == IS_CV) {
                   22261:                if (container != &EG(uninitialized_zval_ptr)) {
                   22262:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   22263:                }
                   22264:        }
                   22265:        if (0) {
                   22266:                MAKE_REAL_ZVAL_PTR(property);
                   22267:        }
1.1.1.2   misho    22268:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    22269:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   22270:        }
1.1.1.2   misho    22271:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    22272:        if (0) {
                   22273:                zval_ptr_dtor(&property);
                   22274:        } else {
                   22275: 
                   22276:        }
1.1.1.2   misho    22277:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   22278:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    22279:        }
                   22280: 
1.1.1.2   misho    22281:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   22282:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   22283:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    22284:        }
1.1.1.2   misho    22285:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    22286:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    22287:        CHECK_EXCEPTION();
1.1       misho    22288:        ZEND_VM_NEXT_OPCODE();
                   22289: }
                   22290: 
                   22291: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22292: {
1.1.1.2   misho    22293:        USE_OPLINE
1.1       misho    22294: 
1.1.1.2   misho    22295:        zval **object_ptr;
                   22296:        zval *property_name;
                   22297: 
                   22298:        SAVE_OPLINE();
                   22299:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   22300:        property_name = opline->op2.zv;
1.1       misho    22301: 
                   22302:        if (0) {
                   22303:                MAKE_REAL_ZVAL_PTR(property_name);
                   22304:        }
1.1.1.2   misho    22305:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    22306:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   22307:        }
1.1.1.2   misho    22308:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22309:        if (0) {
                   22310:                zval_ptr_dtor(&property_name);
                   22311:        } else {
                   22312: 
                   22313:        }
                   22314: 
                   22315:        /* assign_obj has two opcodes! */
1.1.1.2   misho    22316:        CHECK_EXCEPTION();
1.1       misho    22317:        ZEND_VM_INC_OPCODE();
                   22318:        ZEND_VM_NEXT_OPCODE();
                   22319: }
                   22320: 
                   22321: static int ZEND_FASTCALL  ZEND_ADD_CHAR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22322: {
1.1.1.2   misho    22323:        USE_OPLINE
                   22324:        zval *str = &EX_T(opline->result.var).tmp_var;
                   22325: 
                   22326:        SAVE_OPLINE();
1.1       misho    22327: 
                   22328:        if (IS_UNUSED == IS_UNUSED) {
                   22329:                /* Initialize for erealloc in add_char_to_string */
                   22330:                Z_STRVAL_P(str) = NULL;
                   22331:                Z_STRLEN_P(str) = 0;
                   22332:                Z_TYPE_P(str) = IS_STRING;
                   22333: 
                   22334:                INIT_PZVAL(str);
                   22335:        }
                   22336: 
1.1.1.2   misho    22337:        add_char_to_string(str, str, opline->op2.zv);
1.1       misho    22338: 
                   22339:        /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
1.1.1.2   misho    22340:        /*CHECK_EXCEPTION();*/
1.1       misho    22341:        ZEND_VM_NEXT_OPCODE();
                   22342: }
                   22343: 
                   22344: static int ZEND_FASTCALL  ZEND_ADD_STRING_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22345: {
1.1.1.2   misho    22346:        USE_OPLINE
                   22347:        zval *str = &EX_T(opline->result.var).tmp_var;
                   22348: 
                   22349:        SAVE_OPLINE();
1.1       misho    22350: 
                   22351:        if (IS_UNUSED == IS_UNUSED) {
                   22352:                /* Initialize for erealloc in add_string_to_string */
                   22353:                Z_STRVAL_P(str) = NULL;
                   22354:                Z_STRLEN_P(str) = 0;
                   22355:                Z_TYPE_P(str) = IS_STRING;
                   22356: 
                   22357:                INIT_PZVAL(str);
                   22358:        }
                   22359: 
1.1.1.2   misho    22360:        add_string_to_string(str, str, opline->op2.zv);
1.1       misho    22361: 
                   22362:        /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
1.1.1.2   misho    22363:        /*CHECK_EXCEPTION();*/
1.1       misho    22364:        ZEND_VM_NEXT_OPCODE();
                   22365: }
                   22366: 
                   22367: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22368: {
1.1.1.2   misho    22369:        USE_OPLINE
1.1       misho    22370:        zval *function_name;
                   22371:        char *function_name_strval;
                   22372:        int function_name_strlen;
                   22373: 
                   22374: 
1.1.1.2   misho    22375:        SAVE_OPLINE();
1.1       misho    22376:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   22377: 
1.1.1.2   misho    22378:        function_name = opline->op2.zv;
1.1       misho    22379: 
1.1.1.2   misho    22380:        if (IS_CONST != IS_CONST &&
                   22381:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    22382:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   22383:        }
                   22384: 
                   22385:        function_name_strval = Z_STRVAL_P(function_name);
                   22386:        function_name_strlen = Z_STRLEN_P(function_name);
                   22387: 
                   22388:        EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
                   22389: 
1.1.1.2   misho    22390:        if (EXPECTED(EX(object) != NULL) &&
                   22391:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   22392:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    22393: 
1.1.1.2   misho    22394:                if (IS_CONST != IS_CONST ||
                   22395:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   22396:                    zval *object = EX(object);
                   22397: 
                   22398:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   22399:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   22400:                        }
                   22401: 
                   22402:                        /* First, locate the function. */
                   22403:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   22404:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   22405:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   22406:                        }
                   22407:                        if (IS_CONST == IS_CONST &&
                   22408:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   22409:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   22410:                            EXPECTED(EX(object) == object)) {
                   22411:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   22412:                        }
1.1       misho    22413:                }
                   22414:        } else {
                   22415:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   22416:        }
                   22417: 
                   22418:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   22419:                EX(object) = NULL;
                   22420:        } else {
                   22421:                if (!PZVAL_IS_REF(EX(object))) {
                   22422:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   22423:                } else {
                   22424:                        zval *this_ptr;
                   22425:                        ALLOC_ZVAL(this_ptr);
                   22426:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   22427:                        zval_copy_ctor(this_ptr);
                   22428:                        EX(object) = this_ptr;
                   22429:                }
                   22430:        }
                   22431: 
                   22432: 
1.1.1.2   misho    22433:        CHECK_EXCEPTION();
1.1       misho    22434:        ZEND_VM_NEXT_OPCODE();
                   22435: }
                   22436: 
                   22437: static int ZEND_FASTCALL  ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22438: {
1.1.1.2   misho    22439:        USE_OPLINE
1.1       misho    22440: 
1.1.1.2   misho    22441:        SAVE_OPLINE();
1.1       misho    22442:        if (IS_UNUSED == IS_UNUSED) {
1.1.1.2   misho    22443:                zend_constant *c;
                   22444:                zval *retval;
                   22445: 
                   22446:                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   22447:                        c = CACHED_PTR(opline->op2.literal->cache_slot);
                   22448:                } else if ((c = zend_quick_get_constant(opline->op2.literal + 1, opline->extended_value TSRMLS_CC)) == NULL) {
1.1       misho    22449:                        if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
1.1.1.2   misho    22450:                                char *actual = (char *)zend_memrchr(Z_STRVAL_P(opline->op2.zv), '\\', Z_STRLEN_P(opline->op2.zv));
1.1       misho    22451:                                if(!actual) {
1.1.1.2   misho    22452:                                        actual = Z_STRVAL_P(opline->op2.zv);
1.1       misho    22453:                                } else {
                   22454:                                        actual++;
                   22455:                                }
                   22456:                                /* non-qualified constant - allow text substitution */
                   22457:                                zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual);
1.1.1.2   misho    22458:                                ZVAL_STRINGL(&EX_T(opline->result.var).tmp_var, actual, Z_STRLEN_P(opline->op2.zv)-(actual - Z_STRVAL_P(opline->op2.zv)), 1);
                   22459:                                CHECK_EXCEPTION();
                   22460:                                ZEND_VM_NEXT_OPCODE();
1.1       misho    22461:                        } else {
1.1.1.2   misho    22462:                                zend_error_noreturn(E_ERROR, "Undefined constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    22463:                        }
1.1.1.2   misho    22464:                } else {
                   22465:                        CACHE_PTR(opline->op2.literal->cache_slot, c);
1.1       misho    22466:                }
1.1.1.2   misho    22467:                retval = &EX_T(opline->result.var).tmp_var;
                   22468:                ZVAL_COPY_VALUE(retval, &c->value);
                   22469:                zval_copy_ctor(retval);
                   22470:                CHECK_EXCEPTION();
1.1       misho    22471:                ZEND_VM_NEXT_OPCODE();
                   22472:        } else {
                   22473:                /* class constant */
                   22474:                zend_class_entry *ce;
                   22475:                zval **value;
                   22476: 
                   22477:                if (IS_UNUSED == IS_CONST) {
1.1.1.2   misho    22478:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   22479:                                value = CACHED_PTR(opline->op2.literal->cache_slot);
                   22480:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   22481:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   22482:                                CHECK_EXCEPTION();
                   22483:                                ZEND_VM_NEXT_OPCODE();
                   22484:                        } else if (CACHED_PTR(opline->op1.literal->cache_slot)) {
                   22485:                                ce = CACHED_PTR(opline->op1.literal->cache_slot);
                   22486:                        } else {
                   22487:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv), Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value TSRMLS_CC);
1.1.1.4   misho    22488:                                if (UNEXPECTED(EG(exception) != NULL)) {
                   22489:                                        HANDLE_EXCEPTION();
                   22490:                                }
1.1.1.2   misho    22491:                                if (UNEXPECTED(ce == NULL)) {
1.1.1.4   misho    22492:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op1.zv));
1.1.1.2   misho    22493:                                }
                   22494:                                CACHE_PTR(opline->op1.literal->cache_slot, ce);
1.1       misho    22495:                        }
                   22496:                } else {
1.1.1.2   misho    22497:                        ce = EX_T(opline->op1.var).class_entry;
                   22498:                        if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) {
                   22499:                                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   22500:                                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
                   22501:                                CHECK_EXCEPTION();
                   22502:                                ZEND_VM_NEXT_OPCODE();
                   22503:                        }
1.1       misho    22504:                }
                   22505: 
1.1.1.2   misho    22506:                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
1.1       misho    22507:                        if (Z_TYPE_PP(value) == IS_CONSTANT_ARRAY ||
                   22508:                            (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT) {
                   22509:                                zend_class_entry *old_scope = EG(scope);
                   22510: 
                   22511:                                EG(scope) = ce;
                   22512:                                zval_update_constant(value, (void *) 1 TSRMLS_CC);
                   22513:                                EG(scope) = old_scope;
                   22514:                        }
1.1.1.2   misho    22515:                        if (IS_UNUSED == IS_CONST) {
                   22516:                                CACHE_PTR(opline->op2.literal->cache_slot, value);
                   22517:                        } else {
                   22518:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce, value);
                   22519:                        }
                   22520:                        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value);
                   22521:                        zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    22522:                } else {
1.1.1.2   misho    22523:                        zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv));
1.1       misho    22524:                }
                   22525: 
1.1.1.2   misho    22526:                CHECK_EXCEPTION();
1.1       misho    22527:                ZEND_VM_NEXT_OPCODE();
                   22528:        }
                   22529: }
                   22530: 
                   22531: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22532: {
1.1.1.2   misho    22533:        USE_OPLINE
1.1       misho    22534: 
1.1.1.2   misho    22535:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    22536:        if (IS_UNUSED == IS_UNUSED) {
                   22537:                ZEND_VM_NEXT_OPCODE();
                   22538: #if 0 || IS_UNUSED != IS_UNUSED
                   22539:        } else {
                   22540:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22541: #endif
                   22542:        }
                   22543: }
                   22544: 
                   22545: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22546: {
1.1.1.2   misho    22547:        USE_OPLINE
1.1       misho    22548: 
1.1.1.2   misho    22549:        zval **container;
1.1       misho    22550:        zval *offset;
1.1.1.2   misho    22551:        ulong hval;
1.1       misho    22552: 
1.1.1.2   misho    22553:        SAVE_OPLINE();
                   22554:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    22555:        if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   22556:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   22557:        }
1.1.1.2   misho    22558:        offset = opline->op2.zv;
1.1       misho    22559: 
                   22560:        if (IS_UNUSED != IS_VAR || container) {
                   22561:                switch (Z_TYPE_PP(container)) {
                   22562:                        case IS_ARRAY: {
                   22563:                                HashTable *ht = Z_ARRVAL_PP(container);
                   22564: 
                   22565:                                switch (Z_TYPE_P(offset)) {
                   22566:                                        case IS_DOUBLE:
1.1.1.2   misho    22567:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    22568:                                                zend_hash_index_del(ht, hval);
                   22569:                                                break;
1.1       misho    22570:                                        case IS_RESOURCE:
                   22571:                                        case IS_BOOL:
                   22572:                                        case IS_LONG:
1.1.1.2   misho    22573:                                                hval = Z_LVAL_P(offset);
                   22574:                                                zend_hash_index_del(ht, hval);
1.1       misho    22575:                                                break;
                   22576:                                        case IS_STRING:
                   22577:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   22578:                                                        Z_ADDREF_P(offset);
                   22579:                                                }
1.1.1.2   misho    22580:                                                if (IS_CONST == IS_CONST) {
                   22581:                                                        hval = Z_HASH_P(offset);
                   22582:                                                } else {
                   22583:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   22584:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   22585:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   22586:                                                        } else {
                   22587:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    22588:                                                        }
                   22589:                                                }
1.1.1.2   misho    22590:                                                if (ht == &EG(symbol_table)) {
                   22591:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   22592:                                                } else {
                   22593:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   22594:                                                }
                   22595:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   22596:                                                        zval_ptr_dtor(&offset);
                   22597:                                                }
                   22598:                                                break;
                   22599: num_index_dim:
                   22600:                                                zend_hash_index_del(ht, hval);
1.1       misho    22601:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   22602:                                                        zval_ptr_dtor(&offset);
                   22603:                                                }
                   22604:                                                break;
                   22605:                                        case IS_NULL:
                   22606:                                                zend_hash_del(ht, "", sizeof(""));
                   22607:                                                break;
                   22608:                                        default:
                   22609:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   22610:                                                break;
                   22611:                                }
                   22612: 
                   22613:                                break;
                   22614:                        }
                   22615:                        case IS_OBJECT:
1.1.1.2   misho    22616:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    22617:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   22618:                                }
                   22619:                                if (0) {
                   22620:                                        MAKE_REAL_ZVAL_PTR(offset);
                   22621:                                }
                   22622:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   22623:                                if (0) {
                   22624:                                        zval_ptr_dtor(&offset);
                   22625:                                } else {
                   22626: 
                   22627:                                }
                   22628:                                break;
                   22629:                        case IS_STRING:
                   22630:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   22631:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   22632:                        default:
                   22633: 
                   22634:                                break;
                   22635:                }
                   22636:        } else {
                   22637: 
                   22638:        }
                   22639: 
1.1.1.2   misho    22640:        CHECK_EXCEPTION();
1.1       misho    22641:        ZEND_VM_NEXT_OPCODE();
                   22642: }
                   22643: 
                   22644: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22645: {
1.1.1.2   misho    22646:        USE_OPLINE
                   22647: 
                   22648:        zval **container;
                   22649:        zval *offset;
1.1       misho    22650: 
1.1.1.2   misho    22651:        SAVE_OPLINE();
                   22652:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   22653:        offset = opline->op2.zv;
1.1       misho    22654: 
                   22655:        if (IS_UNUSED != IS_VAR || container) {
                   22656:                if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   22657:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   22658:                }
                   22659:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   22660:                        if (0) {
                   22661:                                MAKE_REAL_ZVAL_PTR(offset);
                   22662:                        }
                   22663:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    22664:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22665:                        } else {
                   22666:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   22667:                        }
                   22668:                        if (0) {
                   22669:                                zval_ptr_dtor(&offset);
                   22670:                        } else {
                   22671: 
                   22672:                        }
                   22673:                } else {
                   22674: 
                   22675:                }
                   22676:        } else {
                   22677: 
                   22678:        }
                   22679: 
1.1.1.2   misho    22680:        CHECK_EXCEPTION();
1.1       misho    22681:        ZEND_VM_NEXT_OPCODE();
                   22682: }
                   22683: 
                   22684: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   22685: {
1.1.1.2   misho    22686:        USE_OPLINE
1.1       misho    22687: 
1.1.1.2   misho    22688:        zval **container;
1.1       misho    22689:        zval **value = NULL;
                   22690:        int result = 0;
1.1.1.2   misho    22691:        ulong hval;
                   22692:        zval *offset;
1.1       misho    22693: 
1.1.1.2   misho    22694:        SAVE_OPLINE();
                   22695:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    22696: 
1.1.1.2   misho    22697:        offset = opline->op2.zv;
1.1       misho    22698: 
1.1.1.2   misho    22699:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   22700:                HashTable *ht;
                   22701:                int isset = 0;
1.1       misho    22702: 
1.1.1.2   misho    22703:                ht = Z_ARRVAL_PP(container);
1.1       misho    22704: 
1.1.1.2   misho    22705:                switch (Z_TYPE_P(offset)) {
                   22706:                        case IS_DOUBLE:
                   22707:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   22708:                                goto num_index_prop;
                   22709:                        case IS_RESOURCE:
                   22710:                        case IS_BOOL:
                   22711:                        case IS_LONG:
                   22712:                                hval = Z_LVAL_P(offset);
                   22713: num_index_prop:
                   22714:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   22715:                                        isset = 1;
                   22716:                                }
                   22717:                                break;
                   22718:                        case IS_STRING:
                   22719:                                if (IS_CONST == IS_CONST) {
                   22720:                                        hval = Z_HASH_P(offset);
                   22721:                                } else {
                   22722:                                        if (!prop_dim) {
                   22723:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    22724:                                        }
1.1.1.2   misho    22725:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   22726:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    22727:                                        } else {
1.1.1.2   misho    22728:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    22729:                                        }
                   22730:                                }
1.1.1.2   misho    22731:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   22732:                                        isset = 1;
                   22733:                                }
                   22734:                                break;
                   22735:                        case IS_NULL:
                   22736:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   22737:                                        isset = 1;
1.1       misho    22738:                                }
1.1.1.2   misho    22739:                                break;
                   22740:                        default:
                   22741:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   22742:                                break;
                   22743:                }
                   22744: 
                   22745:                if (opline->extended_value & ZEND_ISSET) {
                   22746:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   22747:                                result = 0;
                   22748:                        } else {
                   22749:                                result = isset;
1.1       misho    22750:                        }
1.1.1.2   misho    22751:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   22752:                        if (!isset || !i_zend_is_true(*value)) {
                   22753:                                result = 0;
1.1       misho    22754:                        } else {
1.1.1.2   misho    22755:                                result = 1;
                   22756:                        }
                   22757:                }
1.1       misho    22758: 
1.1.1.2   misho    22759:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   22760:                if (0) {
                   22761:                        MAKE_REAL_ZVAL_PTR(offset);
                   22762:                }
                   22763:                if (prop_dim) {
                   22764:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   22765:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   22766:                        } else {
                   22767:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   22768:                                result = 0;
                   22769:                        }
                   22770:                } else {
                   22771:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   22772:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   22773:                        } else {
                   22774:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   22775:                                result = 0;
1.1       misho    22776:                        }
1.1.1.2   misho    22777:                }
                   22778:                if (0) {
                   22779:                        zval_ptr_dtor(&offset);
                   22780:                } else {
                   22781: 
                   22782:                }
                   22783:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   22784:                zval tmp;
1.1       misho    22785: 
1.1.1.2   misho    22786:                if (Z_TYPE_P(offset) != IS_LONG) {
                   22787:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   22788:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   22789:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   22790:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    22791:                                zval_copy_ctor(&tmp);
                   22792:                                convert_to_long(&tmp);
                   22793:                                offset = &tmp;
1.1.1.2   misho    22794:                        } else {
                   22795:                                /* can not be converted to proper offset, return "not set" */
                   22796:                                result = 0;
1.1       misho    22797:                        }
1.1.1.2   misho    22798:                }
                   22799:                if (Z_TYPE_P(offset) == IS_LONG) {
                   22800:                        if (opline->extended_value & ZEND_ISSET) {
                   22801:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   22802:                                        result = 1;
                   22803:                                }
                   22804:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   22805:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   22806:                                        result = 1;
1.1       misho    22807:                                }
                   22808:                        }
1.1.1.2   misho    22809:                }
1.1       misho    22810: 
1.1.1.2   misho    22811:        } else {
1.1       misho    22812: 
                   22813:        }
                   22814: 
1.1.1.2   misho    22815:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   22816:        if (opline->extended_value & ZEND_ISSET) {
                   22817:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   22818:        } else {
                   22819:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    22820:        }
                   22821: 
1.1.1.2   misho    22822:        CHECK_EXCEPTION();
1.1       misho    22823:        ZEND_VM_NEXT_OPCODE();
                   22824: }
                   22825: 
                   22826: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22827: {
                   22828:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22829: }
                   22830: 
                   22831: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   22832: {
                   22833:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22834: }
                   22835: 
                   22836: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   22837: {
1.1.1.2   misho    22838:        USE_OPLINE
1.1       misho    22839:        zend_free_op free_op2, free_op_data1;
                   22840:        zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   22841:        zval *object;
1.1.1.2   misho    22842:        zval *property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   22843:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    22844:        int have_get_ptr = 0;
                   22845: 
1.1.1.2   misho    22846:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    22847:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   22848:        }
                   22849: 
                   22850:        make_real_object(object_ptr TSRMLS_CC);
                   22851:        object = *object_ptr;
                   22852: 
1.1.1.2   misho    22853:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    22854:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   22855:                zval_dtor(free_op2.var);
                   22856:                FREE_OP(free_op_data1);
                   22857: 
1.1.1.2   misho    22858:                if (RETURN_VALUE_USED(opline)) {
                   22859:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   22860:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   22861:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    22862:                }
                   22863:        } else {
                   22864:                /* here we are sure we are dealing with an object */
                   22865:                if (1) {
                   22866:                        MAKE_REAL_ZVAL_PTR(property);
                   22867:                }
                   22868: 
                   22869:                /* here property is a string */
                   22870:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   22871:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    22872:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22873:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   22874:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   22875: 
                   22876:                                have_get_ptr = 1;
                   22877:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    22878:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    22879:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    22880:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   22881:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    22882:                                }
                   22883:                        }
                   22884:                }
                   22885: 
                   22886:                if (!have_get_ptr) {
                   22887:                        zval *z = NULL;
                   22888: 
                   22889:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   22890:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    22891:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22892:                                }
                   22893:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   22894:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   22895:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   22896:                                }
                   22897:                        }
                   22898:                        if (z) {
                   22899:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   22900:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   22901: 
                   22902:                                        if (Z_REFCOUNT_P(z) == 0) {
                   22903:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   22904:                                                zval_dtor(z);
                   22905:                                                FREE_ZVAL(z);
                   22906:                                        }
                   22907:                                        z = value;
                   22908:                                }
                   22909:                                Z_ADDREF_P(z);
                   22910:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   22911:                                binary_op(z, z, value TSRMLS_CC);
                   22912:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    22913:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    22914:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   22915:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   22916:                                }
1.1.1.2   misho    22917:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    22918:                                        PZVAL_LOCK(z);
1.1.1.2   misho    22919:                                        EX_T(opline->result.var).var.ptr = z;
                   22920:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    22921:                                }
                   22922:                                zval_ptr_dtor(&z);
                   22923:                        } else {
                   22924:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    22925:                                if (RETURN_VALUE_USED(opline)) {
                   22926:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   22927:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   22928:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    22929:                                }
                   22930:                        }
                   22931:                }
                   22932: 
                   22933:                if (1) {
                   22934:                        zval_ptr_dtor(&property);
                   22935:                } else {
                   22936:                        zval_dtor(free_op2.var);
                   22937:                }
                   22938:                FREE_OP(free_op_data1);
                   22939:        }
                   22940: 
                   22941:        /* assign_obj has two opcodes! */
1.1.1.2   misho    22942:        CHECK_EXCEPTION();
1.1       misho    22943:        ZEND_VM_INC_OPCODE();
                   22944:        ZEND_VM_NEXT_OPCODE();
                   22945: }
                   22946: 
                   22947: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   22948: {
1.1.1.2   misho    22949:        USE_OPLINE
1.1       misho    22950:        zend_free_op free_op2, free_op_data2, free_op_data1;
                   22951:        zval **var_ptr;
                   22952:        zval *value;
                   22953: 
1.1.1.2   misho    22954:        SAVE_OPLINE();
1.1       misho    22955:        switch (opline->extended_value) {
                   22956:                case ZEND_ASSIGN_OBJ:
                   22957:                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22958:                        break;
                   22959:                case ZEND_ASSIGN_DIM: {
                   22960:                                zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   22961: 
1.1.1.2   misho    22962:                                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    22963:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    22964:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    22965:                                        if (IS_UNUSED == IS_VAR && !0) {
                   22966:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   22967:                                        }
                   22968:                                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   22969:                                } else {
1.1.1.2   misho    22970:                                        zval *dim = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    22971: 
1.1.1.2   misho    22972:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
                   22973:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   22974:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    22975:                                }
                   22976:                        }
                   22977:                        break;
                   22978:                default:
1.1.1.2   misho    22979:                        value = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    22980:                        var_ptr = NULL;
                   22981:                        /* do nothing */
                   22982:                        break;
                   22983:        }
                   22984: 
1.1.1.2   misho    22985:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    22986:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   22987:        }
                   22988: 
1.1.1.2   misho    22989:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   22990:                if (RETURN_VALUE_USED(opline)) {
                   22991:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   22992:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    22993:                }
                   22994:                zval_dtor(free_op2.var);
                   22995: 
1.1.1.2   misho    22996:                CHECK_EXCEPTION();
                   22997:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   22998:                        ZEND_VM_INC_OPCODE();
                   22999:                }
1.1       misho    23000:                ZEND_VM_NEXT_OPCODE();
                   23001:        }
                   23002: 
                   23003:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   23004: 
1.1.1.2   misho    23005:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   23006:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    23007:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   23008:                /* proxy object */
                   23009:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   23010:                Z_ADDREF_P(objval);
                   23011:                binary_op(objval, objval, value TSRMLS_CC);
                   23012:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   23013:                zval_ptr_dtor(&objval);
                   23014:        } else {
                   23015:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   23016:        }
                   23017: 
1.1.1.2   misho    23018:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    23019:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    23020:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    23021:        }
                   23022:        zval_dtor(free_op2.var);
                   23023: 
                   23024:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   23025:                FREE_OP(free_op_data1);
                   23026:                FREE_OP_VAR_PTR(free_op_data2);
                   23027: 
1.1.1.2   misho    23028:                CHECK_EXCEPTION();
                   23029:                ZEND_VM_INC_OPCODE();
                   23030:        } else {
                   23031: 
                   23032:                CHECK_EXCEPTION();
                   23033:        }
1.1       misho    23034:        ZEND_VM_NEXT_OPCODE();
                   23035: }
                   23036: 
                   23037: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23038: {
                   23039:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23040: }
                   23041: 
                   23042: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23043: {
                   23044:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23045: }
                   23046: 
                   23047: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23048: {
                   23049:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23050: }
                   23051: 
                   23052: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23053: {
                   23054:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23055: }
                   23056: 
                   23057: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23058: {
                   23059:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23060: }
                   23061: 
                   23062: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23063: {
                   23064:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23065: }
                   23066: 
                   23067: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23068: {
                   23069:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23070: }
                   23071: 
                   23072: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23073: {
                   23074:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23075: }
                   23076: 
                   23077: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23078: {
                   23079:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23080: }
                   23081: 
                   23082: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23083: {
                   23084:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23085: }
                   23086: 
                   23087: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23088: {
                   23089:        return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23090: }
                   23091: 
                   23092: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   23093: {
1.1.1.2   misho    23094:        USE_OPLINE
1.1       misho    23095:        zend_free_op free_op2;
1.1.1.2   misho    23096:        zval **object_ptr;
1.1       misho    23097:        zval *object;
1.1.1.2   misho    23098:        zval *property;
                   23099:        zval **retval;
1.1       misho    23100:        int have_get_ptr = 0;
                   23101: 
1.1.1.2   misho    23102:        SAVE_OPLINE();
                   23103:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   23104:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23105:        retval = &EX_T(opline->result.var).var.ptr;
                   23106: 
                   23107:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    23108:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   23109:        }
                   23110: 
                   23111:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   23112:        object = *object_ptr;
                   23113: 
1.1.1.2   misho    23114:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    23115:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   23116:                zval_dtor(free_op2.var);
1.1.1.2   misho    23117:                if (RETURN_VALUE_USED(opline)) {
                   23118:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   23119:                        *retval = &EG(uninitialized_zval);
1.1       misho    23120:                }
                   23121: 
1.1.1.2   misho    23122:                CHECK_EXCEPTION();
1.1       misho    23123:                ZEND_VM_NEXT_OPCODE();
                   23124:        }
                   23125: 
                   23126:        /* here we are sure we are dealing with an object */
                   23127: 
                   23128:        if (1) {
                   23129:                MAKE_REAL_ZVAL_PTR(property);
                   23130:        }
                   23131: 
                   23132:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    23133:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23134:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   23135:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   23136: 
                   23137:                        have_get_ptr = 1;
                   23138:                        incdec_op(*zptr);
1.1.1.2   misho    23139:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    23140:                                *retval = *zptr;
                   23141:                                PZVAL_LOCK(*retval);
                   23142:                        }
                   23143:                }
                   23144:        }
                   23145: 
                   23146:        if (!have_get_ptr) {
                   23147:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    23148:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23149: 
1.1.1.2   misho    23150:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    23151:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   23152: 
                   23153:                                if (Z_REFCOUNT_P(z) == 0) {
                   23154:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   23155:                                        zval_dtor(z);
                   23156:                                        FREE_ZVAL(z);
                   23157:                                }
                   23158:                                z = value;
                   23159:                        }
                   23160:                        Z_ADDREF_P(z);
                   23161:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   23162:                        incdec_op(z);
                   23163:                        *retval = z;
1.1.1.2   misho    23164:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   23165:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    23166:                        zval_ptr_dtor(&z);
                   23167:                } else {
                   23168:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    23169:                        if (RETURN_VALUE_USED(opline)) {
                   23170:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   23171:                                *retval = &EG(uninitialized_zval);
1.1       misho    23172:                        }
                   23173:                }
                   23174:        }
                   23175: 
                   23176:        if (1) {
                   23177:                zval_ptr_dtor(&property);
                   23178:        } else {
                   23179:                zval_dtor(free_op2.var);
                   23180:        }
                   23181: 
1.1.1.2   misho    23182:        CHECK_EXCEPTION();
1.1       misho    23183:        ZEND_VM_NEXT_OPCODE();
                   23184: }
                   23185: 
                   23186: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23187: {
                   23188:        return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23189: }
                   23190: 
                   23191: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23192: {
                   23193:        return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23194: }
                   23195: 
                   23196: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   23197: {
1.1.1.2   misho    23198:        USE_OPLINE
1.1       misho    23199:        zend_free_op free_op2;
1.1.1.2   misho    23200:        zval **object_ptr;
1.1       misho    23201:        zval *object;
1.1.1.2   misho    23202:        zval *property;
                   23203:        zval *retval;
1.1       misho    23204:        int have_get_ptr = 0;
                   23205: 
1.1.1.2   misho    23206:        SAVE_OPLINE();
                   23207:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   23208:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23209:        retval = &EX_T(opline->result.var).tmp_var;
                   23210: 
                   23211:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    23212:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   23213:        }
                   23214: 
                   23215:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   23216:        object = *object_ptr;
                   23217: 
1.1.1.2   misho    23218:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    23219:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   23220:                zval_dtor(free_op2.var);
1.1.1.2   misho    23221:                ZVAL_NULL(retval);
1.1       misho    23222: 
1.1.1.2   misho    23223:                CHECK_EXCEPTION();
1.1       misho    23224:                ZEND_VM_NEXT_OPCODE();
                   23225:        }
                   23226: 
                   23227:        /* here we are sure we are dealing with an object */
                   23228: 
                   23229:        if (1) {
                   23230:                MAKE_REAL_ZVAL_PTR(property);
                   23231:        }
                   23232: 
                   23233:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    23234:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23235:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   23236:                        have_get_ptr = 1;
                   23237:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   23238: 
1.1.1.2   misho    23239:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    23240:                        zendi_zval_copy_ctor(*retval);
                   23241: 
                   23242:                        incdec_op(*zptr);
                   23243: 
                   23244:                }
                   23245:        }
                   23246: 
                   23247:        if (!have_get_ptr) {
                   23248:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    23249:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23250:                        zval *z_copy;
                   23251: 
1.1.1.2   misho    23252:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    23253:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   23254: 
                   23255:                                if (Z_REFCOUNT_P(z) == 0) {
                   23256:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   23257:                                        zval_dtor(z);
                   23258:                                        FREE_ZVAL(z);
                   23259:                                }
                   23260:                                z = value;
                   23261:                        }
1.1.1.2   misho    23262:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    23263:                        zendi_zval_copy_ctor(*retval);
                   23264:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    23265:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    23266:                        zendi_zval_copy_ctor(*z_copy);
                   23267:                        incdec_op(z_copy);
                   23268:                        Z_ADDREF_P(z);
1.1.1.2   misho    23269:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23270:                        zval_ptr_dtor(&z_copy);
                   23271:                        zval_ptr_dtor(&z);
                   23272:                } else {
                   23273:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    23274:                        ZVAL_NULL(retval);
1.1       misho    23275:                }
                   23276:        }
                   23277: 
                   23278:        if (1) {
                   23279:                zval_ptr_dtor(&property);
                   23280:        } else {
                   23281:                zval_dtor(free_op2.var);
                   23282:        }
                   23283: 
1.1.1.2   misho    23284:        CHECK_EXCEPTION();
1.1       misho    23285:        ZEND_VM_NEXT_OPCODE();
                   23286: }
                   23287: 
                   23288: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23289: {
                   23290:        return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23291: }
                   23292: 
                   23293: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23294: {
                   23295:        return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23296: }
                   23297: 
1.1.1.2   misho    23298: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    23299: {
1.1.1.2   misho    23300:        USE_OPLINE
1.1       misho    23301: 
1.1.1.2   misho    23302:        zval *container;
1.1       misho    23303:        zend_free_op free_op2;
1.1.1.2   misho    23304:        zval *offset;
1.1       misho    23305: 
1.1.1.2   misho    23306:        SAVE_OPLINE();
                   23307:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   23308:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23309: 
                   23310:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   23311:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   23312:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   23313:                PZVAL_LOCK(&EG(uninitialized_zval));
                   23314:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    23315:                zval_dtor(free_op2.var);
                   23316:        } else {
                   23317:                zval *retval;
                   23318: 
                   23319:                if (1) {
                   23320:                        MAKE_REAL_ZVAL_PTR(offset);
                   23321:                }
                   23322: 
                   23323:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    23324:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23325: 
1.1.1.2   misho    23326:                PZVAL_LOCK(retval);
                   23327:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    23328: 
                   23329:                if (1) {
                   23330:                        zval_ptr_dtor(&offset);
                   23331:                } else {
                   23332:                        zval_dtor(free_op2.var);
                   23333:                }
                   23334:        }
                   23335: 
1.1.1.2   misho    23336:        CHECK_EXCEPTION();
1.1       misho    23337:        ZEND_VM_NEXT_OPCODE();
                   23338: }
                   23339: 
                   23340: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23341: {
1.1.1.2   misho    23342:        return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    23343: }
                   23344: 
                   23345: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23346: {
1.1.1.2   misho    23347:        USE_OPLINE
1.1       misho    23348:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    23349:        zval *property;
1.1       misho    23350:        zval **container;
                   23351: 
1.1.1.2   misho    23352:        SAVE_OPLINE();
                   23353:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23354: 
1.1       misho    23355:        if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    23356:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   23357:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    23358:        }
                   23359: 
                   23360:        if (1) {
                   23361:                MAKE_REAL_ZVAL_PTR(property);
                   23362:        }
                   23363:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1.1.2   misho    23364:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    23365:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   23366:        }
1.1.1.2   misho    23367: 
                   23368:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    23369:        if (1) {
                   23370:                zval_ptr_dtor(&property);
                   23371:        } else {
                   23372:                zval_dtor(free_op2.var);
                   23373:        }
1.1.1.2   misho    23374:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   23375:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    23376:        }
                   23377: 
                   23378:        /* We are going to assign the result by reference */
                   23379:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    23380:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   23381: 
                   23382:                Z_DELREF_PP(retval_ptr);
                   23383:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   23384:                Z_ADDREF_PP(retval_ptr);
                   23385:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   23386:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    23387:        }
                   23388: 
1.1.1.2   misho    23389:        CHECK_EXCEPTION();
1.1       misho    23390:        ZEND_VM_NEXT_OPCODE();
                   23391: }
                   23392: 
                   23393: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23394: {
1.1.1.2   misho    23395:        USE_OPLINE
1.1       misho    23396:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    23397:        zval *property;
                   23398:        zval **container;
                   23399: 
                   23400:        SAVE_OPLINE();
                   23401:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23402:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    23403: 
                   23404:        if (1) {
                   23405:                MAKE_REAL_ZVAL_PTR(property);
                   23406:        }
1.1.1.2   misho    23407:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    23408:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   23409:        }
1.1.1.2   misho    23410:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    23411:        if (1) {
                   23412:                zval_ptr_dtor(&property);
                   23413:        } else {
                   23414:                zval_dtor(free_op2.var);
                   23415:        }
1.1.1.2   misho    23416:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   23417:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    23418:        }
                   23419: 
1.1.1.2   misho    23420:        CHECK_EXCEPTION();
1.1       misho    23421:        ZEND_VM_NEXT_OPCODE();
                   23422: }
                   23423: 
                   23424: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23425: {
1.1.1.2   misho    23426:        USE_OPLINE
                   23427: 
                   23428:        zval *container;
                   23429:        zend_free_op free_op2;
                   23430:        zval *offset;
                   23431: 
                   23432:        SAVE_OPLINE();
                   23433:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   23434:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23435: 
                   23436:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   23437:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   23438:                PZVAL_LOCK(&EG(uninitialized_zval));
                   23439:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   23440:                zval_dtor(free_op2.var);
                   23441:        } else {
                   23442:                zval *retval;
                   23443: 
                   23444:                if (1) {
                   23445:                        MAKE_REAL_ZVAL_PTR(offset);
                   23446:                }
                   23447: 
                   23448:                /* here we are sure we are dealing with an object */
                   23449:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   23450: 
                   23451:                PZVAL_LOCK(retval);
                   23452:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   23453: 
                   23454:                if (1) {
                   23455:                        zval_ptr_dtor(&offset);
                   23456:                } else {
                   23457:                        zval_dtor(free_op2.var);
                   23458:                }
                   23459:        }
                   23460: 
                   23461:        CHECK_EXCEPTION();
                   23462:        ZEND_VM_NEXT_OPCODE();
1.1       misho    23463: }
                   23464: 
                   23465: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23466: {
1.1.1.2   misho    23467:        USE_OPLINE
1.1       misho    23468: 
1.1.1.2   misho    23469:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    23470:                /* Behave like FETCH_OBJ_W */
                   23471:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    23472:                zval *property;
                   23473:                zval **container;
                   23474: 
                   23475:                SAVE_OPLINE();
                   23476:                property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23477:                container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    23478: 
                   23479:                if (1) {
                   23480:                        MAKE_REAL_ZVAL_PTR(property);
                   23481:                }
1.1.1.2   misho    23482:                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    23483:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   23484:                }
1.1.1.2   misho    23485:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    23486:                if (1) {
                   23487:                        zval_ptr_dtor(&property);
                   23488:                } else {
                   23489:                        zval_dtor(free_op2.var);
                   23490:                }
1.1.1.2   misho    23491:                if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   23492:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    23493:                }
                   23494: 
1.1.1.2   misho    23495:                CHECK_EXCEPTION();
1.1       misho    23496:                ZEND_VM_NEXT_OPCODE();
                   23497:        } else {
1.1.1.2   misho    23498:                return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    23499:        }
                   23500: }
                   23501: 
                   23502: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23503: {
1.1.1.2   misho    23504:        USE_OPLINE
1.1       misho    23505:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    23506:        zval **container;
                   23507:        zval *property;
                   23508: 
                   23509:        SAVE_OPLINE();
                   23510:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   23511:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23512: 
                   23513:        if (IS_UNUSED == IS_CV) {
                   23514:                if (container != &EG(uninitialized_zval_ptr)) {
                   23515:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   23516:                }
                   23517:        }
                   23518:        if (1) {
                   23519:                MAKE_REAL_ZVAL_PTR(property);
                   23520:        }
1.1.1.2   misho    23521:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    23522:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   23523:        }
1.1.1.2   misho    23524:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    23525:        if (1) {
                   23526:                zval_ptr_dtor(&property);
                   23527:        } else {
                   23528:                zval_dtor(free_op2.var);
                   23529:        }
1.1.1.2   misho    23530:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   23531:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    23532:        }
                   23533: 
1.1.1.2   misho    23534:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   23535:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   23536:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    23537:        }
1.1.1.2   misho    23538:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    23539:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    23540:        CHECK_EXCEPTION();
1.1       misho    23541:        ZEND_VM_NEXT_OPCODE();
                   23542: }
                   23543: 
                   23544: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23545: {
1.1.1.2   misho    23546:        USE_OPLINE
1.1       misho    23547:        zend_free_op free_op2;
1.1.1.2   misho    23548:        zval **object_ptr;
                   23549:        zval *property_name;
                   23550: 
                   23551:        SAVE_OPLINE();
                   23552:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   23553:        property_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23554: 
                   23555:        if (1) {
                   23556:                MAKE_REAL_ZVAL_PTR(property_name);
                   23557:        }
1.1.1.2   misho    23558:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    23559:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   23560:        }
1.1.1.2   misho    23561:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23562:        if (1) {
                   23563:                zval_ptr_dtor(&property_name);
                   23564:        } else {
                   23565:                zval_dtor(free_op2.var);
                   23566:        }
                   23567: 
                   23568:        /* assign_obj has two opcodes! */
1.1.1.2   misho    23569:        CHECK_EXCEPTION();
1.1       misho    23570:        ZEND_VM_INC_OPCODE();
                   23571:        ZEND_VM_NEXT_OPCODE();
                   23572: }
                   23573: 
                   23574: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23575: {
1.1.1.2   misho    23576:        USE_OPLINE
1.1       misho    23577:        zend_free_op free_op2;
1.1.1.2   misho    23578:        zval *str = &EX_T(opline->result.var).tmp_var;
                   23579:        zval *var;
1.1       misho    23580:        zval var_copy;
                   23581:        int use_copy = 0;
                   23582: 
1.1.1.2   misho    23583:        SAVE_OPLINE();
                   23584:        var = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   23585: 
1.1       misho    23586:        if (IS_UNUSED == IS_UNUSED) {
                   23587:                /* Initialize for erealloc in add_string_to_string */
                   23588:                Z_STRVAL_P(str) = NULL;
                   23589:                Z_STRLEN_P(str) = 0;
                   23590:                Z_TYPE_P(str) = IS_STRING;
                   23591: 
                   23592:                INIT_PZVAL(str);
                   23593:        }
                   23594: 
                   23595:        if (Z_TYPE_P(var) != IS_STRING) {
                   23596:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   23597: 
                   23598:                if (use_copy) {
                   23599:                        var = &var_copy;
                   23600:                }
                   23601:        }
                   23602:        add_string_to_string(str, str, var);
                   23603: 
                   23604:        if (use_copy) {
                   23605:                zval_dtor(var);
                   23606:        }
                   23607:        /* original comment, possibly problematic:
                   23608:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   23609:         * (Zeev):  I don't think it's problematic, we only use variables
                   23610:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   23611:         * string offsets or overloaded objects
                   23612:         */
                   23613:        zval_dtor(free_op2.var);
                   23614: 
1.1.1.2   misho    23615:        CHECK_EXCEPTION();
1.1       misho    23616:        ZEND_VM_NEXT_OPCODE();
                   23617: }
                   23618: 
                   23619: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23620: {
1.1.1.2   misho    23621:        USE_OPLINE
1.1       misho    23622:        zval *function_name;
                   23623:        char *function_name_strval;
                   23624:        int function_name_strlen;
                   23625:        zend_free_op free_op2;
                   23626: 
1.1.1.2   misho    23627:        SAVE_OPLINE();
1.1       misho    23628:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   23629: 
1.1.1.2   misho    23630:        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23631: 
1.1.1.2   misho    23632:        if (IS_TMP_VAR != IS_CONST &&
                   23633:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    23634:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   23635:        }
                   23636: 
                   23637:        function_name_strval = Z_STRVAL_P(function_name);
                   23638:        function_name_strlen = Z_STRLEN_P(function_name);
                   23639: 
                   23640:        EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
                   23641: 
1.1.1.2   misho    23642:        if (EXPECTED(EX(object) != NULL) &&
                   23643:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   23644:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    23645: 
1.1.1.2   misho    23646:                if (IS_TMP_VAR != IS_CONST ||
                   23647:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   23648:                    zval *object = EX(object);
                   23649: 
                   23650:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   23651:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   23652:                        }
                   23653: 
                   23654:                        /* First, locate the function. */
                   23655:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   23656:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   23657:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   23658:                        }
                   23659:                        if (IS_TMP_VAR == IS_CONST &&
                   23660:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   23661:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   23662:                            EXPECTED(EX(object) == object)) {
                   23663:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   23664:                        }
1.1       misho    23665:                }
                   23666:        } else {
                   23667:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   23668:        }
                   23669: 
                   23670:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   23671:                EX(object) = NULL;
                   23672:        } else {
                   23673:                if (!PZVAL_IS_REF(EX(object))) {
                   23674:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   23675:                } else {
                   23676:                        zval *this_ptr;
                   23677:                        ALLOC_ZVAL(this_ptr);
                   23678:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   23679:                        zval_copy_ctor(this_ptr);
                   23680:                        EX(object) = this_ptr;
                   23681:                }
                   23682:        }
                   23683: 
                   23684:        zval_dtor(free_op2.var);
                   23685: 
1.1.1.2   misho    23686:        CHECK_EXCEPTION();
1.1       misho    23687:        ZEND_VM_NEXT_OPCODE();
                   23688: }
                   23689: 
                   23690: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23691: {
1.1.1.2   misho    23692:        USE_OPLINE
1.1       misho    23693: 
1.1.1.2   misho    23694:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    23695:        if (IS_UNUSED == IS_UNUSED) {
                   23696:                ZEND_VM_NEXT_OPCODE();
                   23697: #if 0 || IS_UNUSED != IS_UNUSED
                   23698:        } else {
                   23699:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23700: #endif
                   23701:        }
                   23702: }
                   23703: 
                   23704: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23705: {
1.1.1.2   misho    23706:        USE_OPLINE
1.1       misho    23707:        zend_free_op free_op2;
1.1.1.2   misho    23708:        zval **container;
1.1       misho    23709:        zval *offset;
1.1.1.2   misho    23710:        ulong hval;
1.1       misho    23711: 
1.1.1.2   misho    23712:        SAVE_OPLINE();
                   23713:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    23714:        if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   23715:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   23716:        }
1.1.1.2   misho    23717:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23718: 
                   23719:        if (IS_UNUSED != IS_VAR || container) {
                   23720:                switch (Z_TYPE_PP(container)) {
                   23721:                        case IS_ARRAY: {
                   23722:                                HashTable *ht = Z_ARRVAL_PP(container);
                   23723: 
                   23724:                                switch (Z_TYPE_P(offset)) {
                   23725:                                        case IS_DOUBLE:
1.1.1.2   misho    23726:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    23727:                                                zend_hash_index_del(ht, hval);
                   23728:                                                break;
1.1       misho    23729:                                        case IS_RESOURCE:
                   23730:                                        case IS_BOOL:
                   23731:                                        case IS_LONG:
1.1.1.2   misho    23732:                                                hval = Z_LVAL_P(offset);
                   23733:                                                zend_hash_index_del(ht, hval);
1.1       misho    23734:                                                break;
                   23735:                                        case IS_STRING:
                   23736:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   23737:                                                        Z_ADDREF_P(offset);
                   23738:                                                }
1.1.1.2   misho    23739:                                                if (IS_TMP_VAR == IS_CONST) {
                   23740:                                                        hval = Z_HASH_P(offset);
                   23741:                                                } else {
                   23742:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   23743:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   23744:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   23745:                                                        } else {
                   23746:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    23747:                                                        }
                   23748:                                                }
1.1.1.2   misho    23749:                                                if (ht == &EG(symbol_table)) {
                   23750:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   23751:                                                } else {
                   23752:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   23753:                                                }
                   23754:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   23755:                                                        zval_ptr_dtor(&offset);
                   23756:                                                }
                   23757:                                                break;
                   23758: num_index_dim:
                   23759:                                                zend_hash_index_del(ht, hval);
1.1       misho    23760:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   23761:                                                        zval_ptr_dtor(&offset);
                   23762:                                                }
                   23763:                                                break;
                   23764:                                        case IS_NULL:
                   23765:                                                zend_hash_del(ht, "", sizeof(""));
                   23766:                                                break;
                   23767:                                        default:
                   23768:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   23769:                                                break;
                   23770:                                }
                   23771:                                zval_dtor(free_op2.var);
                   23772:                                break;
                   23773:                        }
                   23774:                        case IS_OBJECT:
1.1.1.2   misho    23775:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    23776:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   23777:                                }
                   23778:                                if (1) {
                   23779:                                        MAKE_REAL_ZVAL_PTR(offset);
                   23780:                                }
                   23781:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   23782:                                if (1) {
                   23783:                                        zval_ptr_dtor(&offset);
                   23784:                                } else {
                   23785:                                        zval_dtor(free_op2.var);
                   23786:                                }
                   23787:                                break;
                   23788:                        case IS_STRING:
                   23789:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   23790:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   23791:                        default:
                   23792:                                zval_dtor(free_op2.var);
                   23793:                                break;
                   23794:                }
                   23795:        } else {
                   23796:                zval_dtor(free_op2.var);
                   23797:        }
                   23798: 
1.1.1.2   misho    23799:        CHECK_EXCEPTION();
1.1       misho    23800:        ZEND_VM_NEXT_OPCODE();
                   23801: }
                   23802: 
                   23803: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23804: {
1.1.1.2   misho    23805:        USE_OPLINE
1.1       misho    23806:        zend_free_op free_op2;
1.1.1.2   misho    23807:        zval **container;
                   23808:        zval *offset;
                   23809: 
                   23810:        SAVE_OPLINE();
                   23811:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   23812:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23813: 
                   23814:        if (IS_UNUSED != IS_VAR || container) {
                   23815:                if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   23816:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   23817:                }
                   23818:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   23819:                        if (1) {
                   23820:                                MAKE_REAL_ZVAL_PTR(offset);
                   23821:                        }
                   23822:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    23823:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23824:                        } else {
                   23825:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   23826:                        }
                   23827:                        if (1) {
                   23828:                                zval_ptr_dtor(&offset);
                   23829:                        } else {
                   23830:                                zval_dtor(free_op2.var);
                   23831:                        }
                   23832:                } else {
                   23833:                        zval_dtor(free_op2.var);
                   23834:                }
                   23835:        } else {
                   23836:                zval_dtor(free_op2.var);
                   23837:        }
                   23838: 
1.1.1.2   misho    23839:        CHECK_EXCEPTION();
1.1       misho    23840:        ZEND_VM_NEXT_OPCODE();
                   23841: }
                   23842: 
                   23843: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   23844: {
1.1.1.2   misho    23845:        USE_OPLINE
                   23846:        zend_free_op free_op2;
                   23847:        zval **container;
1.1       misho    23848:        zval **value = NULL;
                   23849:        int result = 0;
1.1.1.2   misho    23850:        ulong hval;
                   23851:        zval *offset;
1.1       misho    23852: 
1.1.1.2   misho    23853:        SAVE_OPLINE();
                   23854:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    23855: 
1.1.1.2   misho    23856:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    23857: 
1.1.1.2   misho    23858:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   23859:                HashTable *ht;
                   23860:                int isset = 0;
1.1       misho    23861: 
1.1.1.2   misho    23862:                ht = Z_ARRVAL_PP(container);
                   23863: 
                   23864:                switch (Z_TYPE_P(offset)) {
                   23865:                        case IS_DOUBLE:
                   23866:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   23867:                                goto num_index_prop;
                   23868:                        case IS_RESOURCE:
                   23869:                        case IS_BOOL:
                   23870:                        case IS_LONG:
                   23871:                                hval = Z_LVAL_P(offset);
                   23872: num_index_prop:
                   23873:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   23874:                                        isset = 1;
                   23875:                                }
                   23876:                                break;
                   23877:                        case IS_STRING:
                   23878:                                if (IS_TMP_VAR == IS_CONST) {
                   23879:                                        hval = Z_HASH_P(offset);
                   23880:                                } else {
                   23881:                                        if (!prop_dim) {
                   23882:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    23883:                                        }
1.1.1.2   misho    23884:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   23885:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    23886:                                        } else {
1.1.1.2   misho    23887:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    23888:                                        }
1.1.1.2   misho    23889:                                }
                   23890:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   23891:                                        isset = 1;
                   23892:                                }
                   23893:                                break;
                   23894:                        case IS_NULL:
                   23895:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   23896:                                        isset = 1;
                   23897:                                }
                   23898:                                break;
                   23899:                        default:
                   23900:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   23901:                                break;
                   23902:                }
                   23903: 
                   23904:                if (opline->extended_value & ZEND_ISSET) {
                   23905:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   23906:                                result = 0;
                   23907:                        } else {
                   23908:                                result = isset;
1.1       misho    23909:                        }
1.1.1.2   misho    23910:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   23911:                        if (!isset || !i_zend_is_true(*value)) {
                   23912:                                result = 0;
                   23913:                        } else {
                   23914:                                result = 1;
1.1       misho    23915:                        }
1.1.1.2   misho    23916:                }
                   23917:                zval_dtor(free_op2.var);
                   23918:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   23919:                if (1) {
                   23920:                        MAKE_REAL_ZVAL_PTR(offset);
                   23921:                }
                   23922:                if (prop_dim) {
                   23923:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   23924:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    23925:                        } else {
1.1.1.2   misho    23926:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   23927:                                result = 0;
1.1       misho    23928:                        }
1.1.1.2   misho    23929:                } else {
                   23930:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   23931:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    23932:                        } else {
1.1.1.2   misho    23933:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   23934:                                result = 0;
1.1       misho    23935:                        }
1.1.1.2   misho    23936:                }
                   23937:                if (1) {
                   23938:                        zval_ptr_dtor(&offset);
                   23939:                } else {
                   23940:                        zval_dtor(free_op2.var);
                   23941:                }
                   23942:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   23943:                zval tmp;
1.1       misho    23944: 
1.1.1.2   misho    23945:                if (Z_TYPE_P(offset) != IS_LONG) {
                   23946:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   23947:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   23948:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   23949:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    23950:                                zval_copy_ctor(&tmp);
                   23951:                                convert_to_long(&tmp);
                   23952:                                offset = &tmp;
1.1.1.2   misho    23953:                        } else {
                   23954:                                /* can not be converted to proper offset, return "not set" */
                   23955:                                result = 0;
1.1       misho    23956:                        }
1.1.1.2   misho    23957:                }
                   23958:                if (Z_TYPE_P(offset) == IS_LONG) {
                   23959:                        if (opline->extended_value & ZEND_ISSET) {
                   23960:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   23961:                                        result = 1;
                   23962:                                }
                   23963:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   23964:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   23965:                                        result = 1;
1.1       misho    23966:                                }
                   23967:                        }
                   23968:                }
1.1.1.2   misho    23969:                zval_dtor(free_op2.var);
                   23970:        } else {
                   23971:                zval_dtor(free_op2.var);
1.1       misho    23972:        }
                   23973: 
1.1.1.2   misho    23974:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   23975:        if (opline->extended_value & ZEND_ISSET) {
                   23976:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   23977:        } else {
                   23978:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    23979:        }
                   23980: 
1.1.1.2   misho    23981:        CHECK_EXCEPTION();
1.1       misho    23982:        ZEND_VM_NEXT_OPCODE();
                   23983: }
                   23984: 
                   23985: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23986: {
                   23987:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23988: }
                   23989: 
                   23990: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   23991: {
                   23992:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   23993: }
                   23994: 
                   23995: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   23996: {
1.1.1.2   misho    23997:        USE_OPLINE
1.1       misho    23998:        zend_free_op free_op2, free_op_data1;
                   23999:        zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24000:        zval *object;
1.1.1.2   misho    24001:        zval *property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24002:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    24003:        int have_get_ptr = 0;
                   24004: 
1.1.1.2   misho    24005:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    24006:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   24007:        }
                   24008: 
                   24009:        make_real_object(object_ptr TSRMLS_CC);
                   24010:        object = *object_ptr;
                   24011: 
1.1.1.2   misho    24012:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    24013:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   24014:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24015:                FREE_OP(free_op_data1);
                   24016: 
1.1.1.2   misho    24017:                if (RETURN_VALUE_USED(opline)) {
                   24018:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   24019:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   24020:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    24021:                }
                   24022:        } else {
                   24023:                /* here we are sure we are dealing with an object */
                   24024:                if (0) {
                   24025:                        MAKE_REAL_ZVAL_PTR(property);
                   24026:                }
                   24027: 
                   24028:                /* here property is a string */
                   24029:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   24030:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    24031:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24032:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   24033:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   24034: 
                   24035:                                have_get_ptr = 1;
                   24036:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    24037:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    24038:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    24039:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   24040:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    24041:                                }
                   24042:                        }
                   24043:                }
                   24044: 
                   24045:                if (!have_get_ptr) {
                   24046:                        zval *z = NULL;
                   24047: 
                   24048:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   24049:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    24050:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24051:                                }
                   24052:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   24053:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   24054:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   24055:                                }
                   24056:                        }
                   24057:                        if (z) {
                   24058:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   24059:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   24060: 
                   24061:                                        if (Z_REFCOUNT_P(z) == 0) {
                   24062:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   24063:                                                zval_dtor(z);
                   24064:                                                FREE_ZVAL(z);
                   24065:                                        }
                   24066:                                        z = value;
                   24067:                                }
                   24068:                                Z_ADDREF_P(z);
                   24069:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   24070:                                binary_op(z, z, value TSRMLS_CC);
                   24071:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    24072:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24073:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   24074:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   24075:                                }
1.1.1.2   misho    24076:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    24077:                                        PZVAL_LOCK(z);
1.1.1.2   misho    24078:                                        EX_T(opline->result.var).var.ptr = z;
                   24079:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    24080:                                }
                   24081:                                zval_ptr_dtor(&z);
                   24082:                        } else {
                   24083:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    24084:                                if (RETURN_VALUE_USED(opline)) {
                   24085:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   24086:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   24087:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    24088:                                }
                   24089:                        }
                   24090:                }
                   24091: 
                   24092:                if (0) {
                   24093:                        zval_ptr_dtor(&property);
                   24094:                } else {
                   24095:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24096:                }
                   24097:                FREE_OP(free_op_data1);
                   24098:        }
                   24099: 
                   24100:        /* assign_obj has two opcodes! */
1.1.1.2   misho    24101:        CHECK_EXCEPTION();
1.1       misho    24102:        ZEND_VM_INC_OPCODE();
                   24103:        ZEND_VM_NEXT_OPCODE();
                   24104: }
                   24105: 
                   24106: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   24107: {
1.1.1.2   misho    24108:        USE_OPLINE
1.1       misho    24109:        zend_free_op free_op2, free_op_data2, free_op_data1;
                   24110:        zval **var_ptr;
                   24111:        zval *value;
                   24112: 
1.1.1.2   misho    24113:        SAVE_OPLINE();
1.1       misho    24114:        switch (opline->extended_value) {
                   24115:                case ZEND_ASSIGN_OBJ:
                   24116:                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24117:                        break;
                   24118:                case ZEND_ASSIGN_DIM: {
                   24119:                                zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24120: 
1.1.1.2   misho    24121:                                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    24122:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    24123:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    24124:                                        if (IS_UNUSED == IS_VAR && !0) {
                   24125:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   24126:                                        }
                   24127:                                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24128:                                } else {
1.1.1.2   misho    24129:                                        zval *dim = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24130: 
1.1.1.2   misho    24131:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
                   24132:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   24133:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    24134:                                }
                   24135:                        }
                   24136:                        break;
                   24137:                default:
1.1.1.2   misho    24138:                        value = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24139:                        var_ptr = NULL;
                   24140:                        /* do nothing */
                   24141:                        break;
                   24142:        }
                   24143: 
1.1.1.2   misho    24144:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    24145:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   24146:        }
                   24147: 
1.1.1.2   misho    24148:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   24149:                if (RETURN_VALUE_USED(opline)) {
                   24150:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   24151:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    24152:                }
                   24153:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24154: 
1.1.1.2   misho    24155:                CHECK_EXCEPTION();
                   24156:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   24157:                        ZEND_VM_INC_OPCODE();
                   24158:                }
1.1       misho    24159:                ZEND_VM_NEXT_OPCODE();
                   24160:        }
                   24161: 
                   24162:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   24163: 
1.1.1.2   misho    24164:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   24165:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    24166:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   24167:                /* proxy object */
                   24168:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   24169:                Z_ADDREF_P(objval);
                   24170:                binary_op(objval, objval, value TSRMLS_CC);
                   24171:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   24172:                zval_ptr_dtor(&objval);
                   24173:        } else {
                   24174:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   24175:        }
                   24176: 
1.1.1.2   misho    24177:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    24178:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    24179:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    24180:        }
                   24181:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24182: 
                   24183:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   24184:                FREE_OP(free_op_data1);
                   24185:                FREE_OP_VAR_PTR(free_op_data2);
                   24186: 
1.1.1.2   misho    24187:                CHECK_EXCEPTION();
                   24188:                ZEND_VM_INC_OPCODE();
                   24189:        } else {
                   24190: 
                   24191:                CHECK_EXCEPTION();
                   24192:        }
1.1       misho    24193:        ZEND_VM_NEXT_OPCODE();
                   24194: }
                   24195: 
                   24196: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24197: {
                   24198:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24199: }
                   24200: 
                   24201: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24202: {
                   24203:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24204: }
                   24205: 
                   24206: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24207: {
                   24208:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24209: }
                   24210: 
                   24211: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24212: {
                   24213:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24214: }
                   24215: 
                   24216: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24217: {
                   24218:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24219: }
                   24220: 
                   24221: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24222: {
                   24223:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24224: }
                   24225: 
                   24226: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24227: {
                   24228:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24229: }
                   24230: 
                   24231: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24232: {
                   24233:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24234: }
                   24235: 
                   24236: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24237: {
                   24238:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24239: }
                   24240: 
                   24241: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24242: {
                   24243:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24244: }
                   24245: 
                   24246: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24247: {
                   24248:        return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24249: }
                   24250: 
                   24251: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   24252: {
1.1.1.2   misho    24253:        USE_OPLINE
1.1       misho    24254:        zend_free_op free_op2;
1.1.1.2   misho    24255:        zval **object_ptr;
1.1       misho    24256:        zval *object;
1.1.1.2   misho    24257:        zval *property;
                   24258:        zval **retval;
1.1       misho    24259:        int have_get_ptr = 0;
                   24260: 
1.1.1.2   misho    24261:        SAVE_OPLINE();
                   24262:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24263:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24264:        retval = &EX_T(opline->result.var).var.ptr;
                   24265: 
                   24266:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    24267:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   24268:        }
                   24269: 
                   24270:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   24271:        object = *object_ptr;
                   24272: 
1.1.1.2   misho    24273:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    24274:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   24275:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    24276:                if (RETURN_VALUE_USED(opline)) {
                   24277:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   24278:                        *retval = &EG(uninitialized_zval);
1.1       misho    24279:                }
                   24280: 
1.1.1.2   misho    24281:                CHECK_EXCEPTION();
1.1       misho    24282:                ZEND_VM_NEXT_OPCODE();
                   24283:        }
                   24284: 
                   24285:        /* here we are sure we are dealing with an object */
                   24286: 
                   24287:        if (0) {
                   24288:                MAKE_REAL_ZVAL_PTR(property);
                   24289:        }
                   24290: 
                   24291:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    24292:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24293:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   24294:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   24295: 
                   24296:                        have_get_ptr = 1;
                   24297:                        incdec_op(*zptr);
1.1.1.2   misho    24298:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    24299:                                *retval = *zptr;
                   24300:                                PZVAL_LOCK(*retval);
                   24301:                        }
                   24302:                }
                   24303:        }
                   24304: 
                   24305:        if (!have_get_ptr) {
                   24306:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    24307:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24308: 
1.1.1.2   misho    24309:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    24310:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   24311: 
                   24312:                                if (Z_REFCOUNT_P(z) == 0) {
                   24313:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   24314:                                        zval_dtor(z);
                   24315:                                        FREE_ZVAL(z);
                   24316:                                }
                   24317:                                z = value;
                   24318:                        }
                   24319:                        Z_ADDREF_P(z);
                   24320:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   24321:                        incdec_op(z);
                   24322:                        *retval = z;
1.1.1.2   misho    24323:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   24324:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    24325:                        zval_ptr_dtor(&z);
                   24326:                } else {
                   24327:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    24328:                        if (RETURN_VALUE_USED(opline)) {
                   24329:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   24330:                                *retval = &EG(uninitialized_zval);
1.1       misho    24331:                        }
                   24332:                }
                   24333:        }
                   24334: 
                   24335:        if (0) {
                   24336:                zval_ptr_dtor(&property);
                   24337:        } else {
                   24338:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24339:        }
                   24340: 
1.1.1.2   misho    24341:        CHECK_EXCEPTION();
1.1       misho    24342:        ZEND_VM_NEXT_OPCODE();
                   24343: }
                   24344: 
                   24345: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24346: {
                   24347:        return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24348: }
                   24349: 
                   24350: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24351: {
                   24352:        return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24353: }
                   24354: 
                   24355: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   24356: {
1.1.1.2   misho    24357:        USE_OPLINE
1.1       misho    24358:        zend_free_op free_op2;
1.1.1.2   misho    24359:        zval **object_ptr;
1.1       misho    24360:        zval *object;
1.1.1.2   misho    24361:        zval *property;
                   24362:        zval *retval;
1.1       misho    24363:        int have_get_ptr = 0;
                   24364: 
1.1.1.2   misho    24365:        SAVE_OPLINE();
                   24366:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24367:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24368:        retval = &EX_T(opline->result.var).tmp_var;
                   24369: 
                   24370:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    24371:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   24372:        }
                   24373: 
                   24374:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   24375:        object = *object_ptr;
                   24376: 
1.1.1.2   misho    24377:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    24378:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   24379:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    24380:                ZVAL_NULL(retval);
1.1       misho    24381: 
1.1.1.2   misho    24382:                CHECK_EXCEPTION();
1.1       misho    24383:                ZEND_VM_NEXT_OPCODE();
                   24384:        }
                   24385: 
                   24386:        /* here we are sure we are dealing with an object */
                   24387: 
                   24388:        if (0) {
                   24389:                MAKE_REAL_ZVAL_PTR(property);
                   24390:        }
                   24391: 
                   24392:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    24393:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24394:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   24395:                        have_get_ptr = 1;
                   24396:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   24397: 
1.1.1.2   misho    24398:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    24399:                        zendi_zval_copy_ctor(*retval);
                   24400: 
                   24401:                        incdec_op(*zptr);
                   24402: 
                   24403:                }
                   24404:        }
                   24405: 
                   24406:        if (!have_get_ptr) {
                   24407:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    24408:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24409:                        zval *z_copy;
                   24410: 
1.1.1.2   misho    24411:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    24412:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   24413: 
                   24414:                                if (Z_REFCOUNT_P(z) == 0) {
                   24415:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   24416:                                        zval_dtor(z);
                   24417:                                        FREE_ZVAL(z);
                   24418:                                }
                   24419:                                z = value;
                   24420:                        }
1.1.1.2   misho    24421:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    24422:                        zendi_zval_copy_ctor(*retval);
                   24423:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    24424:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    24425:                        zendi_zval_copy_ctor(*z_copy);
                   24426:                        incdec_op(z_copy);
                   24427:                        Z_ADDREF_P(z);
1.1.1.2   misho    24428:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24429:                        zval_ptr_dtor(&z_copy);
                   24430:                        zval_ptr_dtor(&z);
                   24431:                } else {
                   24432:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    24433:                        ZVAL_NULL(retval);
1.1       misho    24434:                }
                   24435:        }
                   24436: 
                   24437:        if (0) {
                   24438:                zval_ptr_dtor(&property);
                   24439:        } else {
                   24440:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24441:        }
                   24442: 
1.1.1.2   misho    24443:        CHECK_EXCEPTION();
1.1       misho    24444:        ZEND_VM_NEXT_OPCODE();
                   24445: }
                   24446: 
                   24447: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24448: {
                   24449:        return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24450: }
                   24451: 
                   24452: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24453: {
                   24454:        return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24455: }
                   24456: 
1.1.1.2   misho    24457: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    24458: {
1.1.1.2   misho    24459:        USE_OPLINE
1.1       misho    24460: 
1.1.1.2   misho    24461:        zval *container;
1.1       misho    24462:        zend_free_op free_op2;
1.1.1.2   misho    24463:        zval *offset;
1.1       misho    24464: 
1.1.1.2   misho    24465:        SAVE_OPLINE();
                   24466:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   24467:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24468: 
                   24469:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   24470:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   24471:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   24472:                PZVAL_LOCK(&EG(uninitialized_zval));
                   24473:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    24474:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24475:        } else {
                   24476:                zval *retval;
                   24477: 
                   24478:                if (0) {
                   24479:                        MAKE_REAL_ZVAL_PTR(offset);
                   24480:                }
                   24481: 
                   24482:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    24483:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24484: 
1.1.1.2   misho    24485:                PZVAL_LOCK(retval);
                   24486:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    24487: 
                   24488:                if (0) {
                   24489:                        zval_ptr_dtor(&offset);
                   24490:                } else {
                   24491:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24492:                }
                   24493:        }
                   24494: 
1.1.1.2   misho    24495:        CHECK_EXCEPTION();
1.1       misho    24496:        ZEND_VM_NEXT_OPCODE();
                   24497: }
                   24498: 
                   24499: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24500: {
1.1.1.2   misho    24501:        return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    24502: }
                   24503: 
                   24504: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24505: {
1.1.1.2   misho    24506:        USE_OPLINE
1.1       misho    24507:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    24508:        zval *property;
1.1       misho    24509:        zval **container;
                   24510: 
1.1.1.2   misho    24511:        SAVE_OPLINE();
                   24512:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24513: 
1.1       misho    24514:        if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    24515:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   24516:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    24517:        }
                   24518: 
                   24519:        if (0) {
                   24520:                MAKE_REAL_ZVAL_PTR(property);
                   24521:        }
                   24522:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1.1.2   misho    24523:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    24524:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   24525:        }
1.1.1.2   misho    24526: 
                   24527:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    24528:        if (0) {
                   24529:                zval_ptr_dtor(&property);
                   24530:        } else {
                   24531:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24532:        }
1.1.1.2   misho    24533:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   24534:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    24535:        }
                   24536: 
                   24537:        /* We are going to assign the result by reference */
                   24538:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    24539:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   24540: 
                   24541:                Z_DELREF_PP(retval_ptr);
                   24542:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   24543:                Z_ADDREF_PP(retval_ptr);
                   24544:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   24545:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    24546:        }
                   24547: 
1.1.1.2   misho    24548:        CHECK_EXCEPTION();
1.1       misho    24549:        ZEND_VM_NEXT_OPCODE();
                   24550: }
                   24551: 
                   24552: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24553: {
1.1.1.2   misho    24554:        USE_OPLINE
1.1       misho    24555:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    24556:        zval *property;
                   24557:        zval **container;
                   24558: 
                   24559:        SAVE_OPLINE();
                   24560:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24561:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    24562: 
                   24563:        if (0) {
                   24564:                MAKE_REAL_ZVAL_PTR(property);
                   24565:        }
1.1.1.2   misho    24566:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    24567:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   24568:        }
1.1.1.2   misho    24569:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    24570:        if (0) {
                   24571:                zval_ptr_dtor(&property);
                   24572:        } else {
                   24573:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24574:        }
1.1.1.2   misho    24575:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   24576:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    24577:        }
                   24578: 
1.1.1.2   misho    24579:        CHECK_EXCEPTION();
1.1       misho    24580:        ZEND_VM_NEXT_OPCODE();
                   24581: }
                   24582: 
                   24583: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24584: {
1.1.1.2   misho    24585:        USE_OPLINE
                   24586: 
                   24587:        zval *container;
                   24588:        zend_free_op free_op2;
                   24589:        zval *offset;
                   24590: 
                   24591:        SAVE_OPLINE();
                   24592:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   24593:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24594: 
                   24595:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   24596:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   24597:                PZVAL_LOCK(&EG(uninitialized_zval));
                   24598:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   24599:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24600:        } else {
                   24601:                zval *retval;
                   24602: 
                   24603:                if (0) {
                   24604:                        MAKE_REAL_ZVAL_PTR(offset);
                   24605:                }
                   24606: 
                   24607:                /* here we are sure we are dealing with an object */
                   24608:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   24609: 
                   24610:                PZVAL_LOCK(retval);
                   24611:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   24612: 
                   24613:                if (0) {
                   24614:                        zval_ptr_dtor(&offset);
                   24615:                } else {
                   24616:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24617:                }
                   24618:        }
                   24619: 
                   24620:        CHECK_EXCEPTION();
                   24621:        ZEND_VM_NEXT_OPCODE();
1.1       misho    24622: }
                   24623: 
                   24624: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24625: {
1.1.1.2   misho    24626:        USE_OPLINE
1.1       misho    24627: 
1.1.1.2   misho    24628:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    24629:                /* Behave like FETCH_OBJ_W */
                   24630:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    24631:                zval *property;
                   24632:                zval **container;
                   24633: 
                   24634:                SAVE_OPLINE();
                   24635:                property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24636:                container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    24637: 
                   24638:                if (0) {
                   24639:                        MAKE_REAL_ZVAL_PTR(property);
                   24640:                }
1.1.1.2   misho    24641:                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    24642:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   24643:                }
1.1.1.2   misho    24644:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    24645:                if (0) {
                   24646:                        zval_ptr_dtor(&property);
                   24647:                } else {
                   24648:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24649:                }
1.1.1.2   misho    24650:                if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   24651:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    24652:                }
                   24653: 
1.1.1.2   misho    24654:                CHECK_EXCEPTION();
1.1       misho    24655:                ZEND_VM_NEXT_OPCODE();
                   24656:        } else {
1.1.1.2   misho    24657:                return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    24658:        }
                   24659: }
                   24660: 
                   24661: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24662: {
1.1.1.2   misho    24663:        USE_OPLINE
1.1       misho    24664:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    24665:        zval **container;
                   24666:        zval *property;
                   24667: 
                   24668:        SAVE_OPLINE();
                   24669:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24670:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24671: 
                   24672:        if (IS_UNUSED == IS_CV) {
                   24673:                if (container != &EG(uninitialized_zval_ptr)) {
                   24674:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   24675:                }
                   24676:        }
                   24677:        if (0) {
                   24678:                MAKE_REAL_ZVAL_PTR(property);
                   24679:        }
1.1.1.2   misho    24680:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    24681:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   24682:        }
1.1.1.2   misho    24683:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    24684:        if (0) {
                   24685:                zval_ptr_dtor(&property);
                   24686:        } else {
                   24687:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24688:        }
1.1.1.2   misho    24689:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   24690:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    24691:        }
                   24692: 
1.1.1.2   misho    24693:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   24694:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   24695:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    24696:        }
1.1.1.2   misho    24697:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    24698:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    24699:        CHECK_EXCEPTION();
1.1       misho    24700:        ZEND_VM_NEXT_OPCODE();
                   24701: }
                   24702: 
                   24703: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24704: {
1.1.1.2   misho    24705:        USE_OPLINE
1.1       misho    24706:        zend_free_op free_op2;
1.1.1.2   misho    24707:        zval **object_ptr;
                   24708:        zval *property_name;
                   24709: 
                   24710:        SAVE_OPLINE();
                   24711:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24712:        property_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24713: 
                   24714:        if (0) {
                   24715:                MAKE_REAL_ZVAL_PTR(property_name);
                   24716:        }
1.1.1.2   misho    24717:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    24718:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   24719:        }
1.1.1.2   misho    24720:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24721:        if (0) {
                   24722:                zval_ptr_dtor(&property_name);
                   24723:        } else {
                   24724:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24725:        }
                   24726: 
                   24727:        /* assign_obj has two opcodes! */
1.1.1.2   misho    24728:        CHECK_EXCEPTION();
1.1       misho    24729:        ZEND_VM_INC_OPCODE();
                   24730:        ZEND_VM_NEXT_OPCODE();
                   24731: }
                   24732: 
                   24733: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24734: {
1.1.1.2   misho    24735:        USE_OPLINE
1.1       misho    24736:        zend_free_op free_op2;
1.1.1.2   misho    24737:        zval *str = &EX_T(opline->result.var).tmp_var;
                   24738:        zval *var;
1.1       misho    24739:        zval var_copy;
                   24740:        int use_copy = 0;
                   24741: 
1.1.1.2   misho    24742:        SAVE_OPLINE();
                   24743:        var = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   24744: 
1.1       misho    24745:        if (IS_UNUSED == IS_UNUSED) {
                   24746:                /* Initialize for erealloc in add_string_to_string */
                   24747:                Z_STRVAL_P(str) = NULL;
                   24748:                Z_STRLEN_P(str) = 0;
                   24749:                Z_TYPE_P(str) = IS_STRING;
                   24750: 
                   24751:                INIT_PZVAL(str);
                   24752:        }
                   24753: 
                   24754:        if (Z_TYPE_P(var) != IS_STRING) {
                   24755:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   24756: 
                   24757:                if (use_copy) {
                   24758:                        var = &var_copy;
                   24759:                }
                   24760:        }
                   24761:        add_string_to_string(str, str, var);
                   24762: 
                   24763:        if (use_copy) {
                   24764:                zval_dtor(var);
                   24765:        }
                   24766:        /* original comment, possibly problematic:
                   24767:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   24768:         * (Zeev):  I don't think it's problematic, we only use variables
                   24769:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   24770:         * string offsets or overloaded objects
                   24771:         */
                   24772:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24773: 
1.1.1.2   misho    24774:        CHECK_EXCEPTION();
1.1       misho    24775:        ZEND_VM_NEXT_OPCODE();
                   24776: }
                   24777: 
                   24778: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24779: {
1.1.1.2   misho    24780:        USE_OPLINE
1.1       misho    24781:        zval *function_name;
                   24782:        char *function_name_strval;
                   24783:        int function_name_strlen;
                   24784:        zend_free_op free_op2;
                   24785: 
1.1.1.2   misho    24786:        SAVE_OPLINE();
1.1       misho    24787:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   24788: 
1.1.1.2   misho    24789:        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24790: 
1.1.1.2   misho    24791:        if (IS_VAR != IS_CONST &&
                   24792:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    24793:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   24794:        }
                   24795: 
                   24796:        function_name_strval = Z_STRVAL_P(function_name);
                   24797:        function_name_strlen = Z_STRLEN_P(function_name);
                   24798: 
                   24799:        EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
                   24800: 
1.1.1.2   misho    24801:        if (EXPECTED(EX(object) != NULL) &&
                   24802:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   24803:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    24804: 
1.1.1.2   misho    24805:                if (IS_VAR != IS_CONST ||
                   24806:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   24807:                    zval *object = EX(object);
                   24808: 
                   24809:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   24810:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   24811:                        }
                   24812: 
                   24813:                        /* First, locate the function. */
                   24814:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   24815:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   24816:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   24817:                        }
                   24818:                        if (IS_VAR == IS_CONST &&
                   24819:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   24820:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   24821:                            EXPECTED(EX(object) == object)) {
                   24822:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   24823:                        }
1.1       misho    24824:                }
                   24825:        } else {
                   24826:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   24827:        }
                   24828: 
                   24829:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   24830:                EX(object) = NULL;
                   24831:        } else {
                   24832:                if (!PZVAL_IS_REF(EX(object))) {
                   24833:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   24834:                } else {
                   24835:                        zval *this_ptr;
                   24836:                        ALLOC_ZVAL(this_ptr);
                   24837:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   24838:                        zval_copy_ctor(this_ptr);
                   24839:                        EX(object) = this_ptr;
                   24840:                }
                   24841:        }
                   24842: 
                   24843:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24844: 
1.1.1.2   misho    24845:        CHECK_EXCEPTION();
1.1       misho    24846:        ZEND_VM_NEXT_OPCODE();
                   24847: }
                   24848: 
                   24849: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24850: {
1.1.1.2   misho    24851:        USE_OPLINE
1.1       misho    24852: 
1.1.1.2   misho    24853:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    24854:        if (IS_UNUSED == IS_UNUSED) {
                   24855:                ZEND_VM_NEXT_OPCODE();
                   24856: #if 0 || IS_UNUSED != IS_UNUSED
                   24857:        } else {
                   24858:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   24859: #endif
                   24860:        }
                   24861: }
                   24862: 
                   24863: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24864: {
1.1.1.2   misho    24865:        USE_OPLINE
1.1       misho    24866:        zend_free_op free_op2;
1.1.1.2   misho    24867:        zval **container;
1.1       misho    24868:        zval *offset;
1.1.1.2   misho    24869:        ulong hval;
1.1       misho    24870: 
1.1.1.2   misho    24871:        SAVE_OPLINE();
                   24872:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    24873:        if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   24874:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   24875:        }
1.1.1.2   misho    24876:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24877: 
                   24878:        if (IS_UNUSED != IS_VAR || container) {
                   24879:                switch (Z_TYPE_PP(container)) {
                   24880:                        case IS_ARRAY: {
                   24881:                                HashTable *ht = Z_ARRVAL_PP(container);
                   24882: 
                   24883:                                switch (Z_TYPE_P(offset)) {
                   24884:                                        case IS_DOUBLE:
1.1.1.2   misho    24885:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    24886:                                                zend_hash_index_del(ht, hval);
                   24887:                                                break;
1.1       misho    24888:                                        case IS_RESOURCE:
                   24889:                                        case IS_BOOL:
                   24890:                                        case IS_LONG:
1.1.1.2   misho    24891:                                                hval = Z_LVAL_P(offset);
                   24892:                                                zend_hash_index_del(ht, hval);
1.1       misho    24893:                                                break;
                   24894:                                        case IS_STRING:
                   24895:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   24896:                                                        Z_ADDREF_P(offset);
                   24897:                                                }
1.1.1.2   misho    24898:                                                if (IS_VAR == IS_CONST) {
                   24899:                                                        hval = Z_HASH_P(offset);
                   24900:                                                } else {
                   24901:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   24902:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   24903:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   24904:                                                        } else {
                   24905:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    24906:                                                        }
                   24907:                                                }
1.1.1.2   misho    24908:                                                if (ht == &EG(symbol_table)) {
                   24909:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   24910:                                                } else {
                   24911:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   24912:                                                }
                   24913:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   24914:                                                        zval_ptr_dtor(&offset);
                   24915:                                                }
                   24916:                                                break;
                   24917: num_index_dim:
                   24918:                                                zend_hash_index_del(ht, hval);
1.1       misho    24919:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   24920:                                                        zval_ptr_dtor(&offset);
                   24921:                                                }
                   24922:                                                break;
                   24923:                                        case IS_NULL:
                   24924:                                                zend_hash_del(ht, "", sizeof(""));
                   24925:                                                break;
                   24926:                                        default:
                   24927:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   24928:                                                break;
                   24929:                                }
                   24930:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24931:                                break;
                   24932:                        }
                   24933:                        case IS_OBJECT:
1.1.1.2   misho    24934:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    24935:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   24936:                                }
                   24937:                                if (0) {
                   24938:                                        MAKE_REAL_ZVAL_PTR(offset);
                   24939:                                }
                   24940:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   24941:                                if (0) {
                   24942:                                        zval_ptr_dtor(&offset);
                   24943:                                } else {
                   24944:                                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24945:                                }
                   24946:                                break;
                   24947:                        case IS_STRING:
                   24948:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   24949:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   24950:                        default:
                   24951:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24952:                                break;
                   24953:                }
                   24954:        } else {
                   24955:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24956:        }
                   24957: 
1.1.1.2   misho    24958:        CHECK_EXCEPTION();
1.1       misho    24959:        ZEND_VM_NEXT_OPCODE();
                   24960: }
                   24961: 
                   24962: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   24963: {
1.1.1.2   misho    24964:        USE_OPLINE
1.1       misho    24965:        zend_free_op free_op2;
1.1.1.2   misho    24966:        zval **container;
                   24967:        zval *offset;
                   24968: 
                   24969:        SAVE_OPLINE();
                   24970:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   24971:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    24972: 
                   24973:        if (IS_UNUSED != IS_VAR || container) {
                   24974:                if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   24975:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   24976:                }
                   24977:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   24978:                        if (0) {
                   24979:                                MAKE_REAL_ZVAL_PTR(offset);
                   24980:                        }
                   24981:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    24982:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    24983:                        } else {
                   24984:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   24985:                        }
                   24986:                        if (0) {
                   24987:                                zval_ptr_dtor(&offset);
                   24988:                        } else {
                   24989:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24990:                        }
                   24991:                } else {
                   24992:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24993:                }
                   24994:        } else {
                   24995:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   24996:        }
                   24997: 
1.1.1.2   misho    24998:        CHECK_EXCEPTION();
1.1       misho    24999:        ZEND_VM_NEXT_OPCODE();
                   25000: }
                   25001: 
                   25002: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   25003: {
1.1.1.2   misho    25004:        USE_OPLINE
                   25005:        zend_free_op free_op2;
                   25006:        zval **container;
1.1       misho    25007:        zval **value = NULL;
                   25008:        int result = 0;
1.1.1.2   misho    25009:        ulong hval;
                   25010:        zval *offset;
1.1       misho    25011: 
1.1.1.2   misho    25012:        SAVE_OPLINE();
                   25013:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    25014: 
1.1.1.2   misho    25015:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    25016: 
1.1.1.2   misho    25017:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   25018:                HashTable *ht;
                   25019:                int isset = 0;
1.1       misho    25020: 
1.1.1.2   misho    25021:                ht = Z_ARRVAL_PP(container);
                   25022: 
                   25023:                switch (Z_TYPE_P(offset)) {
                   25024:                        case IS_DOUBLE:
                   25025:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   25026:                                goto num_index_prop;
                   25027:                        case IS_RESOURCE:
                   25028:                        case IS_BOOL:
                   25029:                        case IS_LONG:
                   25030:                                hval = Z_LVAL_P(offset);
                   25031: num_index_prop:
                   25032:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   25033:                                        isset = 1;
                   25034:                                }
                   25035:                                break;
                   25036:                        case IS_STRING:
                   25037:                                if (IS_VAR == IS_CONST) {
                   25038:                                        hval = Z_HASH_P(offset);
                   25039:                                } else {
                   25040:                                        if (!prop_dim) {
                   25041:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    25042:                                        }
1.1.1.2   misho    25043:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   25044:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    25045:                                        } else {
1.1.1.2   misho    25046:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    25047:                                        }
1.1.1.2   misho    25048:                                }
                   25049:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   25050:                                        isset = 1;
                   25051:                                }
                   25052:                                break;
                   25053:                        case IS_NULL:
                   25054:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   25055:                                        isset = 1;
                   25056:                                }
                   25057:                                break;
                   25058:                        default:
                   25059:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   25060:                                break;
                   25061:                }
                   25062: 
                   25063:                if (opline->extended_value & ZEND_ISSET) {
                   25064:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   25065:                                result = 0;
                   25066:                        } else {
                   25067:                                result = isset;
1.1       misho    25068:                        }
1.1.1.2   misho    25069:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   25070:                        if (!isset || !i_zend_is_true(*value)) {
                   25071:                                result = 0;
                   25072:                        } else {
                   25073:                                result = 1;
1.1       misho    25074:                        }
1.1.1.2   misho    25075:                }
                   25076:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   25077:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   25078:                if (0) {
                   25079:                        MAKE_REAL_ZVAL_PTR(offset);
                   25080:                }
                   25081:                if (prop_dim) {
                   25082:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   25083:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25084:                        } else {
1.1.1.2   misho    25085:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   25086:                                result = 0;
1.1       misho    25087:                        }
1.1.1.2   misho    25088:                } else {
                   25089:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   25090:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    25091:                        } else {
1.1.1.2   misho    25092:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   25093:                                result = 0;
1.1       misho    25094:                        }
1.1.1.2   misho    25095:                }
                   25096:                if (0) {
                   25097:                        zval_ptr_dtor(&offset);
                   25098:                } else {
                   25099:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   25100:                }
                   25101:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   25102:                zval tmp;
1.1       misho    25103: 
1.1.1.2   misho    25104:                if (Z_TYPE_P(offset) != IS_LONG) {
                   25105:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   25106:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   25107:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   25108:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    25109:                                zval_copy_ctor(&tmp);
                   25110:                                convert_to_long(&tmp);
                   25111:                                offset = &tmp;
1.1.1.2   misho    25112:                        } else {
                   25113:                                /* can not be converted to proper offset, return "not set" */
                   25114:                                result = 0;
1.1       misho    25115:                        }
1.1.1.2   misho    25116:                }
                   25117:                if (Z_TYPE_P(offset) == IS_LONG) {
                   25118:                        if (opline->extended_value & ZEND_ISSET) {
                   25119:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   25120:                                        result = 1;
                   25121:                                }
                   25122:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   25123:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   25124:                                        result = 1;
1.1       misho    25125:                                }
                   25126:                        }
                   25127:                }
1.1.1.2   misho    25128:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   25129:        } else {
                   25130:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    25131:        }
                   25132: 
1.1.1.2   misho    25133:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   25134:        if (opline->extended_value & ZEND_ISSET) {
                   25135:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   25136:        } else {
                   25137:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    25138:        }
                   25139: 
1.1.1.2   misho    25140:        CHECK_EXCEPTION();
1.1       misho    25141:        ZEND_VM_NEXT_OPCODE();
                   25142: }
                   25143: 
                   25144: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25145: {
                   25146:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25147: }
                   25148: 
                   25149: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25150: {
                   25151:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25152: }
                   25153: 
                   25154: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   25155: {
1.1.1.2   misho    25156:        USE_OPLINE
1.1       misho    25157:        zend_free_op free_op_data1;
                   25158:        zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25159:        zval *object;
                   25160:        zval *property = NULL;
1.1.1.2   misho    25161:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    25162:        int have_get_ptr = 0;
                   25163: 
1.1.1.2   misho    25164:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    25165:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   25166:        }
                   25167: 
                   25168:        make_real_object(object_ptr TSRMLS_CC);
                   25169:        object = *object_ptr;
                   25170: 
1.1.1.2   misho    25171:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    25172:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   25173: 
                   25174:                FREE_OP(free_op_data1);
                   25175: 
1.1.1.2   misho    25176:                if (RETURN_VALUE_USED(opline)) {
                   25177:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25178:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   25179:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25180:                }
                   25181:        } else {
                   25182:                /* here we are sure we are dealing with an object */
                   25183:                if (0) {
                   25184:                        MAKE_REAL_ZVAL_PTR(property);
                   25185:                }
                   25186: 
                   25187:                /* here property is a string */
                   25188:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   25189:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    25190:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25191:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   25192:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   25193: 
                   25194:                                have_get_ptr = 1;
                   25195:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    25196:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    25197:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    25198:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   25199:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25200:                                }
                   25201:                        }
                   25202:                }
                   25203: 
                   25204:                if (!have_get_ptr) {
                   25205:                        zval *z = NULL;
                   25206: 
                   25207:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   25208:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    25209:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25210:                                }
                   25211:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   25212:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   25213:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   25214:                                }
                   25215:                        }
                   25216:                        if (z) {
                   25217:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   25218:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   25219: 
                   25220:                                        if (Z_REFCOUNT_P(z) == 0) {
                   25221:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   25222:                                                zval_dtor(z);
                   25223:                                                FREE_ZVAL(z);
                   25224:                                        }
                   25225:                                        z = value;
                   25226:                                }
                   25227:                                Z_ADDREF_P(z);
                   25228:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   25229:                                binary_op(z, z, value TSRMLS_CC);
                   25230:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    25231:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25232:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   25233:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   25234:                                }
1.1.1.2   misho    25235:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    25236:                                        PZVAL_LOCK(z);
1.1.1.2   misho    25237:                                        EX_T(opline->result.var).var.ptr = z;
                   25238:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25239:                                }
                   25240:                                zval_ptr_dtor(&z);
                   25241:                        } else {
                   25242:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    25243:                                if (RETURN_VALUE_USED(opline)) {
                   25244:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25245:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   25246:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25247:                                }
                   25248:                        }
                   25249:                }
                   25250: 
                   25251:                if (0) {
                   25252:                        zval_ptr_dtor(&property);
                   25253:                } else {
                   25254: 
                   25255:                }
                   25256:                FREE_OP(free_op_data1);
                   25257:        }
                   25258: 
                   25259:        /* assign_obj has two opcodes! */
1.1.1.2   misho    25260:        CHECK_EXCEPTION();
1.1       misho    25261:        ZEND_VM_INC_OPCODE();
                   25262:        ZEND_VM_NEXT_OPCODE();
                   25263: }
                   25264: 
                   25265: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   25266: {
1.1.1.2   misho    25267:        USE_OPLINE
1.1       misho    25268:        zend_free_op free_op_data2, free_op_data1;
                   25269:        zval **var_ptr;
                   25270:        zval *value;
                   25271: 
1.1.1.2   misho    25272:        SAVE_OPLINE();
1.1       misho    25273:        switch (opline->extended_value) {
                   25274:                case ZEND_ASSIGN_OBJ:
                   25275:                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25276:                        break;
                   25277:                case ZEND_ASSIGN_DIM: {
                   25278:                                zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25279: 
1.1.1.2   misho    25280:                                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    25281:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    25282:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    25283:                                        if (IS_UNUSED == IS_VAR && !0) {
                   25284:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   25285:                                        }
                   25286:                                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25287:                                } else {
                   25288:                                        zval *dim = NULL;
                   25289: 
1.1.1.2   misho    25290:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
                   25291:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   25292:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    25293:                                }
                   25294:                        }
                   25295:                        break;
                   25296:                default:
                   25297:                        value = NULL;
                   25298:                        var_ptr = NULL;
                   25299:                        /* do nothing */
                   25300:                        break;
                   25301:        }
                   25302: 
1.1.1.2   misho    25303:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    25304:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   25305:        }
                   25306: 
1.1.1.2   misho    25307:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   25308:                if (RETURN_VALUE_USED(opline)) {
                   25309:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25310:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    25311:                }
                   25312: 
                   25313: 
1.1.1.2   misho    25314:                CHECK_EXCEPTION();
                   25315:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   25316:                        ZEND_VM_INC_OPCODE();
                   25317:                }
1.1       misho    25318:                ZEND_VM_NEXT_OPCODE();
                   25319:        }
                   25320: 
                   25321:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   25322: 
1.1.1.2   misho    25323:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   25324:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    25325:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   25326:                /* proxy object */
                   25327:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   25328:                Z_ADDREF_P(objval);
                   25329:                binary_op(objval, objval, value TSRMLS_CC);
                   25330:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   25331:                zval_ptr_dtor(&objval);
                   25332:        } else {
                   25333:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   25334:        }
                   25335: 
1.1.1.2   misho    25336:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    25337:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    25338:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    25339:        }
                   25340: 
                   25341:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   25342:                FREE_OP(free_op_data1);
                   25343:                FREE_OP_VAR_PTR(free_op_data2);
                   25344: 
1.1.1.2   misho    25345:                CHECK_EXCEPTION();
                   25346:                ZEND_VM_INC_OPCODE();
                   25347:        } else {
                   25348: 
                   25349:                CHECK_EXCEPTION();
                   25350:        }
1.1       misho    25351:        ZEND_VM_NEXT_OPCODE();
                   25352: }
                   25353: 
                   25354: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25355: {
                   25356:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25357: }
                   25358: 
                   25359: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25360: {
                   25361:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25362: }
                   25363: 
                   25364: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25365: {
                   25366:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25367: }
                   25368: 
                   25369: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25370: {
                   25371:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25372: }
                   25373: 
                   25374: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25375: {
                   25376:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25377: }
                   25378: 
                   25379: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25380: {
                   25381:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25382: }
                   25383: 
                   25384: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25385: {
                   25386:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25387: }
                   25388: 
                   25389: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25390: {
                   25391:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25392: }
                   25393: 
                   25394: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25395: {
                   25396:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25397: }
                   25398: 
                   25399: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25400: {
                   25401:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25402: }
                   25403: 
                   25404: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25405: {
                   25406:        return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25407: }
                   25408: 
                   25409: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25410: {
1.1.1.2   misho    25411:        USE_OPLINE
1.1       misho    25412: 
1.1.1.2   misho    25413:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    25414:        if (IS_UNUSED == IS_UNUSED) {
                   25415:                ZEND_VM_NEXT_OPCODE();
                   25416: #if 0 || IS_UNUSED != IS_UNUSED
                   25417:        } else {
                   25418:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25419: #endif
                   25420:        }
                   25421: }
                   25422: 
                   25423: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   25424: {
1.1.1.2   misho    25425:        USE_OPLINE
1.1       misho    25426:        zend_free_op free_op_data1;
                   25427:        zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25428:        zval *object;
1.1.1.2   misho    25429:        zval *property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25430:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    25431:        int have_get_ptr = 0;
                   25432: 
1.1.1.2   misho    25433:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    25434:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   25435:        }
                   25436: 
                   25437:        make_real_object(object_ptr TSRMLS_CC);
                   25438:        object = *object_ptr;
                   25439: 
1.1.1.2   misho    25440:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    25441:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   25442: 
                   25443:                FREE_OP(free_op_data1);
                   25444: 
1.1.1.2   misho    25445:                if (RETURN_VALUE_USED(opline)) {
                   25446:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25447:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   25448:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25449:                }
                   25450:        } else {
                   25451:                /* here we are sure we are dealing with an object */
                   25452:                if (0) {
                   25453:                        MAKE_REAL_ZVAL_PTR(property);
                   25454:                }
                   25455: 
                   25456:                /* here property is a string */
                   25457:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   25458:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    25459:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25460:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   25461:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   25462: 
                   25463:                                have_get_ptr = 1;
                   25464:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    25465:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    25466:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    25467:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   25468:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25469:                                }
                   25470:                        }
                   25471:                }
                   25472: 
                   25473:                if (!have_get_ptr) {
                   25474:                        zval *z = NULL;
                   25475: 
                   25476:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   25477:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    25478:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25479:                                }
                   25480:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   25481:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   25482:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   25483:                                }
                   25484:                        }
                   25485:                        if (z) {
                   25486:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   25487:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   25488: 
                   25489:                                        if (Z_REFCOUNT_P(z) == 0) {
                   25490:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   25491:                                                zval_dtor(z);
                   25492:                                                FREE_ZVAL(z);
                   25493:                                        }
                   25494:                                        z = value;
                   25495:                                }
                   25496:                                Z_ADDREF_P(z);
                   25497:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   25498:                                binary_op(z, z, value TSRMLS_CC);
                   25499:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    25500:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25501:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   25502:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   25503:                                }
1.1.1.2   misho    25504:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    25505:                                        PZVAL_LOCK(z);
1.1.1.2   misho    25506:                                        EX_T(opline->result.var).var.ptr = z;
                   25507:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25508:                                }
                   25509:                                zval_ptr_dtor(&z);
                   25510:                        } else {
                   25511:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    25512:                                if (RETURN_VALUE_USED(opline)) {
                   25513:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25514:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   25515:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    25516:                                }
                   25517:                        }
                   25518:                }
                   25519: 
                   25520:                if (0) {
                   25521:                        zval_ptr_dtor(&property);
                   25522:                } else {
                   25523: 
                   25524:                }
                   25525:                FREE_OP(free_op_data1);
                   25526:        }
                   25527: 
                   25528:        /* assign_obj has two opcodes! */
1.1.1.2   misho    25529:        CHECK_EXCEPTION();
1.1       misho    25530:        ZEND_VM_INC_OPCODE();
                   25531:        ZEND_VM_NEXT_OPCODE();
                   25532: }
                   25533: 
                   25534: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   25535: {
1.1.1.2   misho    25536:        USE_OPLINE
1.1       misho    25537:        zend_free_op free_op_data2, free_op_data1;
                   25538:        zval **var_ptr;
                   25539:        zval *value;
                   25540: 
1.1.1.2   misho    25541:        SAVE_OPLINE();
1.1       misho    25542:        switch (opline->extended_value) {
                   25543:                case ZEND_ASSIGN_OBJ:
                   25544:                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25545:                        break;
                   25546:                case ZEND_ASSIGN_DIM: {
                   25547:                                zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25548: 
1.1.1.2   misho    25549:                                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    25550:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    25551:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    25552:                                        if (IS_UNUSED == IS_VAR && !0) {
                   25553:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   25554:                                        }
                   25555:                                        return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25556:                                } else {
1.1.1.2   misho    25557:                                        zval *dim = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    25558: 
1.1.1.2   misho    25559:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
                   25560:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   25561:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    25562:                                }
                   25563:                        }
                   25564:                        break;
                   25565:                default:
1.1.1.2   misho    25566:                        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    25567:                        var_ptr = NULL;
                   25568:                        /* do nothing */
                   25569:                        break;
                   25570:        }
                   25571: 
1.1.1.2   misho    25572:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    25573:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   25574:        }
                   25575: 
1.1.1.2   misho    25576:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   25577:                if (RETURN_VALUE_USED(opline)) {
                   25578:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25579:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    25580:                }
                   25581: 
                   25582: 
1.1.1.2   misho    25583:                CHECK_EXCEPTION();
                   25584:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   25585:                        ZEND_VM_INC_OPCODE();
                   25586:                }
1.1       misho    25587:                ZEND_VM_NEXT_OPCODE();
                   25588:        }
                   25589: 
                   25590:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   25591: 
1.1.1.2   misho    25592:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   25593:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    25594:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   25595:                /* proxy object */
                   25596:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   25597:                Z_ADDREF_P(objval);
                   25598:                binary_op(objval, objval, value TSRMLS_CC);
                   25599:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   25600:                zval_ptr_dtor(&objval);
                   25601:        } else {
                   25602:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   25603:        }
                   25604: 
1.1.1.2   misho    25605:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    25606:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    25607:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    25608:        }
                   25609: 
                   25610:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   25611:                FREE_OP(free_op_data1);
                   25612:                FREE_OP_VAR_PTR(free_op_data2);
                   25613: 
1.1.1.2   misho    25614:                CHECK_EXCEPTION();
                   25615:                ZEND_VM_INC_OPCODE();
                   25616:        } else {
                   25617: 
                   25618:                CHECK_EXCEPTION();
                   25619:        }
1.1       misho    25620:        ZEND_VM_NEXT_OPCODE();
                   25621: }
                   25622: 
                   25623: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25624: {
                   25625:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25626: }
                   25627: 
                   25628: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25629: {
                   25630:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25631: }
                   25632: 
                   25633: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25634: {
                   25635:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25636: }
                   25637: 
                   25638: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25639: {
                   25640:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25641: }
                   25642: 
                   25643: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25644: {
                   25645:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25646: }
                   25647: 
                   25648: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25649: {
                   25650:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25651: }
                   25652: 
                   25653: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25654: {
                   25655:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25656: }
                   25657: 
                   25658: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25659: {
                   25660:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25661: }
                   25662: 
                   25663: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25664: {
                   25665:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25666: }
                   25667: 
                   25668: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25669: {
                   25670:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25671: }
                   25672: 
                   25673: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25674: {
                   25675:        return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25676: }
                   25677: 
                   25678: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   25679: {
1.1.1.2   misho    25680:        USE_OPLINE
1.1       misho    25681: 
1.1.1.2   misho    25682:        zval **object_ptr;
1.1       misho    25683:        zval *object;
1.1.1.2   misho    25684:        zval *property;
                   25685:        zval **retval;
1.1       misho    25686:        int have_get_ptr = 0;
                   25687: 
1.1.1.2   misho    25688:        SAVE_OPLINE();
                   25689:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25690:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25691:        retval = &EX_T(opline->result.var).var.ptr;
                   25692: 
                   25693:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    25694:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   25695:        }
                   25696: 
                   25697:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   25698:        object = *object_ptr;
                   25699: 
1.1.1.2   misho    25700:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    25701:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   25702: 
1.1.1.2   misho    25703:                if (RETURN_VALUE_USED(opline)) {
                   25704:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   25705:                        *retval = &EG(uninitialized_zval);
1.1       misho    25706:                }
                   25707: 
1.1.1.2   misho    25708:                CHECK_EXCEPTION();
1.1       misho    25709:                ZEND_VM_NEXT_OPCODE();
                   25710:        }
                   25711: 
                   25712:        /* here we are sure we are dealing with an object */
                   25713: 
                   25714:        if (0) {
                   25715:                MAKE_REAL_ZVAL_PTR(property);
                   25716:        }
                   25717: 
                   25718:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    25719:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25720:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   25721:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   25722: 
                   25723:                        have_get_ptr = 1;
                   25724:                        incdec_op(*zptr);
1.1.1.2   misho    25725:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    25726:                                *retval = *zptr;
                   25727:                                PZVAL_LOCK(*retval);
                   25728:                        }
                   25729:                }
                   25730:        }
                   25731: 
                   25732:        if (!have_get_ptr) {
                   25733:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    25734:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25735: 
1.1.1.2   misho    25736:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    25737:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   25738: 
                   25739:                                if (Z_REFCOUNT_P(z) == 0) {
                   25740:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   25741:                                        zval_dtor(z);
                   25742:                                        FREE_ZVAL(z);
                   25743:                                }
                   25744:                                z = value;
                   25745:                        }
                   25746:                        Z_ADDREF_P(z);
                   25747:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   25748:                        incdec_op(z);
                   25749:                        *retval = z;
1.1.1.2   misho    25750:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   25751:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    25752:                        zval_ptr_dtor(&z);
                   25753:                } else {
                   25754:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    25755:                        if (RETURN_VALUE_USED(opline)) {
                   25756:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   25757:                                *retval = &EG(uninitialized_zval);
1.1       misho    25758:                        }
                   25759:                }
                   25760:        }
                   25761: 
                   25762:        if (0) {
                   25763:                zval_ptr_dtor(&property);
                   25764:        } else {
                   25765: 
                   25766:        }
                   25767: 
1.1.1.2   misho    25768:        CHECK_EXCEPTION();
1.1       misho    25769:        ZEND_VM_NEXT_OPCODE();
                   25770: }
                   25771: 
                   25772: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25773: {
                   25774:        return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25775: }
                   25776: 
                   25777: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25778: {
                   25779:        return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25780: }
                   25781: 
                   25782: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   25783: {
1.1.1.2   misho    25784:        USE_OPLINE
1.1       misho    25785: 
1.1.1.2   misho    25786:        zval **object_ptr;
1.1       misho    25787:        zval *object;
1.1.1.2   misho    25788:        zval *property;
                   25789:        zval *retval;
1.1       misho    25790:        int have_get_ptr = 0;
                   25791: 
1.1.1.2   misho    25792:        SAVE_OPLINE();
                   25793:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   25794:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25795:        retval = &EX_T(opline->result.var).tmp_var;
                   25796: 
                   25797:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    25798:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   25799:        }
                   25800: 
                   25801:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   25802:        object = *object_ptr;
                   25803: 
1.1.1.2   misho    25804:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    25805:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   25806: 
1.1.1.2   misho    25807:                ZVAL_NULL(retval);
1.1       misho    25808: 
1.1.1.2   misho    25809:                CHECK_EXCEPTION();
1.1       misho    25810:                ZEND_VM_NEXT_OPCODE();
                   25811:        }
                   25812: 
                   25813:        /* here we are sure we are dealing with an object */
                   25814: 
                   25815:        if (0) {
                   25816:                MAKE_REAL_ZVAL_PTR(property);
                   25817:        }
                   25818: 
                   25819:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    25820:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25821:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   25822:                        have_get_ptr = 1;
                   25823:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   25824: 
1.1.1.2   misho    25825:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    25826:                        zendi_zval_copy_ctor(*retval);
                   25827: 
                   25828:                        incdec_op(*zptr);
                   25829: 
                   25830:                }
                   25831:        }
                   25832: 
                   25833:        if (!have_get_ptr) {
                   25834:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    25835:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25836:                        zval *z_copy;
                   25837: 
1.1.1.2   misho    25838:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    25839:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   25840: 
                   25841:                                if (Z_REFCOUNT_P(z) == 0) {
                   25842:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   25843:                                        zval_dtor(z);
                   25844:                                        FREE_ZVAL(z);
                   25845:                                }
                   25846:                                z = value;
                   25847:                        }
1.1.1.2   misho    25848:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    25849:                        zendi_zval_copy_ctor(*retval);
                   25850:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    25851:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    25852:                        zendi_zval_copy_ctor(*z_copy);
                   25853:                        incdec_op(z_copy);
                   25854:                        Z_ADDREF_P(z);
1.1.1.2   misho    25855:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25856:                        zval_ptr_dtor(&z_copy);
                   25857:                        zval_ptr_dtor(&z);
                   25858:                } else {
                   25859:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    25860:                        ZVAL_NULL(retval);
1.1       misho    25861:                }
                   25862:        }
                   25863: 
                   25864:        if (0) {
                   25865:                zval_ptr_dtor(&property);
                   25866:        } else {
                   25867: 
                   25868:        }
                   25869: 
1.1.1.2   misho    25870:        CHECK_EXCEPTION();
1.1       misho    25871:        ZEND_VM_NEXT_OPCODE();
                   25872: }
                   25873: 
                   25874: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25875: {
                   25876:        return zend_post_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25877: }
                   25878: 
                   25879: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25880: {
                   25881:        return zend_post_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   25882: }
                   25883: 
1.1.1.2   misho    25884: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    25885: {
1.1.1.2   misho    25886:        USE_OPLINE
1.1       misho    25887: 
1.1.1.2   misho    25888:        zval *container;
1.1       misho    25889: 
1.1.1.2   misho    25890:        zval *offset;
1.1       misho    25891: 
1.1.1.2   misho    25892:        SAVE_OPLINE();
                   25893:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   25894:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25895: 
                   25896:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   25897:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   25898:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   25899:                PZVAL_LOCK(&EG(uninitialized_zval));
                   25900:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    25901: 
                   25902:        } else {
                   25903:                zval *retval;
                   25904: 
                   25905:                if (0) {
                   25906:                        MAKE_REAL_ZVAL_PTR(offset);
                   25907:                }
                   25908: 
                   25909:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    25910:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    25911: 
1.1.1.2   misho    25912:                PZVAL_LOCK(retval);
                   25913:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    25914: 
                   25915:                if (0) {
                   25916:                        zval_ptr_dtor(&offset);
                   25917:                } else {
                   25918: 
                   25919:                }
                   25920:        }
                   25921: 
1.1.1.2   misho    25922:        CHECK_EXCEPTION();
1.1       misho    25923:        ZEND_VM_NEXT_OPCODE();
                   25924: }
                   25925: 
                   25926: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25927: {
1.1.1.2   misho    25928:        return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    25929: }
                   25930: 
                   25931: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25932: {
1.1.1.2   misho    25933:        USE_OPLINE
1.1       misho    25934:        zend_free_op free_op1;
1.1.1.2   misho    25935:        zval *property;
1.1       misho    25936:        zval **container;
                   25937: 
1.1.1.2   misho    25938:        SAVE_OPLINE();
                   25939:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25940: 
1.1       misho    25941:        if (IS_UNUSED == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    25942:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   25943:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    25944:        }
                   25945: 
                   25946:        if (0) {
                   25947:                MAKE_REAL_ZVAL_PTR(property);
                   25948:        }
                   25949:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1.1.2   misho    25950:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    25951:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   25952:        }
1.1.1.2   misho    25953: 
                   25954:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    25955:        if (0) {
                   25956:                zval_ptr_dtor(&property);
                   25957:        } else {
                   25958: 
                   25959:        }
1.1.1.2   misho    25960:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   25961:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    25962:        }
                   25963: 
                   25964:        /* We are going to assign the result by reference */
                   25965:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    25966:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   25967: 
                   25968:                Z_DELREF_PP(retval_ptr);
                   25969:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   25970:                Z_ADDREF_PP(retval_ptr);
                   25971:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   25972:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    25973:        }
                   25974: 
1.1.1.2   misho    25975:        CHECK_EXCEPTION();
1.1       misho    25976:        ZEND_VM_NEXT_OPCODE();
                   25977: }
                   25978: 
                   25979: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   25980: {
1.1.1.2   misho    25981:        USE_OPLINE
1.1       misho    25982:        zend_free_op free_op1;
1.1.1.2   misho    25983:        zval *property;
                   25984:        zval **container;
                   25985: 
                   25986:        SAVE_OPLINE();
                   25987:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   25988:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    25989: 
                   25990:        if (0) {
                   25991:                MAKE_REAL_ZVAL_PTR(property);
                   25992:        }
1.1.1.2   misho    25993:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    25994:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   25995:        }
1.1.1.2   misho    25996:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    25997:        if (0) {
                   25998:                zval_ptr_dtor(&property);
                   25999:        } else {
                   26000: 
                   26001:        }
1.1.1.2   misho    26002:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   26003:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    26004:        }
                   26005: 
1.1.1.2   misho    26006:        CHECK_EXCEPTION();
1.1       misho    26007:        ZEND_VM_NEXT_OPCODE();
                   26008: }
                   26009: 
                   26010: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26011: {
1.1.1.2   misho    26012:        USE_OPLINE
                   26013: 
                   26014:        zval *container;
                   26015: 
                   26016:        zval *offset;
                   26017: 
                   26018:        SAVE_OPLINE();
                   26019:        container = _get_obj_zval_ptr_unused(TSRMLS_C);
                   26020:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   26021: 
                   26022:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   26023:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   26024:                PZVAL_LOCK(&EG(uninitialized_zval));
                   26025:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   26026: 
                   26027:        } else {
                   26028:                zval *retval;
                   26029: 
                   26030:                if (0) {
                   26031:                        MAKE_REAL_ZVAL_PTR(offset);
                   26032:                }
                   26033: 
                   26034:                /* here we are sure we are dealing with an object */
                   26035:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   26036: 
                   26037:                PZVAL_LOCK(retval);
                   26038:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   26039: 
                   26040:                if (0) {
                   26041:                        zval_ptr_dtor(&offset);
                   26042:                } else {
                   26043: 
                   26044:                }
                   26045:        }
                   26046: 
                   26047:        CHECK_EXCEPTION();
                   26048:        ZEND_VM_NEXT_OPCODE();
1.1       misho    26049: }
                   26050: 
                   26051: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26052: {
1.1.1.2   misho    26053:        USE_OPLINE
1.1       misho    26054: 
1.1.1.2   misho    26055:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    26056:                /* Behave like FETCH_OBJ_W */
                   26057:                zend_free_op free_op1;
1.1.1.2   misho    26058:                zval *property;
                   26059:                zval **container;
                   26060: 
                   26061:                SAVE_OPLINE();
                   26062:                property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   26063:                container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    26064: 
                   26065:                if (0) {
                   26066:                        MAKE_REAL_ZVAL_PTR(property);
                   26067:                }
1.1.1.2   misho    26068:                if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    26069:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   26070:                }
1.1.1.2   misho    26071:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    26072:                if (0) {
                   26073:                        zval_ptr_dtor(&property);
                   26074:                } else {
                   26075: 
                   26076:                }
1.1.1.2   misho    26077:                if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   26078:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    26079:                }
                   26080: 
1.1.1.2   misho    26081:                CHECK_EXCEPTION();
1.1       misho    26082:                ZEND_VM_NEXT_OPCODE();
                   26083:        } else {
1.1.1.2   misho    26084:                return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    26085:        }
                   26086: }
                   26087: 
                   26088: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26089: {
1.1.1.2   misho    26090:        USE_OPLINE
1.1       misho    26091:        zend_free_op free_op1, free_res;
1.1.1.2   misho    26092:        zval **container;
                   26093:        zval *property;
                   26094: 
                   26095:        SAVE_OPLINE();
                   26096:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   26097:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26098: 
                   26099:        if (IS_UNUSED == IS_CV) {
                   26100:                if (container != &EG(uninitialized_zval_ptr)) {
                   26101:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   26102:                }
                   26103:        }
                   26104:        if (0) {
                   26105:                MAKE_REAL_ZVAL_PTR(property);
                   26106:        }
1.1.1.2   misho    26107:        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    26108:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   26109:        }
1.1.1.2   misho    26110:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    26111:        if (0) {
                   26112:                zval_ptr_dtor(&property);
                   26113:        } else {
                   26114: 
                   26115:        }
1.1.1.2   misho    26116:        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   26117:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    26118:        }
                   26119: 
1.1.1.2   misho    26120:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   26121:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   26122:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    26123:        }
1.1.1.2   misho    26124:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    26125:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    26126:        CHECK_EXCEPTION();
1.1       misho    26127:        ZEND_VM_NEXT_OPCODE();
                   26128: }
                   26129: 
                   26130: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26131: {
1.1.1.2   misho    26132:        USE_OPLINE
1.1       misho    26133: 
1.1.1.2   misho    26134:        zval **object_ptr;
                   26135:        zval *property_name;
                   26136: 
                   26137:        SAVE_OPLINE();
                   26138:        object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   26139:        property_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26140: 
                   26141:        if (0) {
                   26142:                MAKE_REAL_ZVAL_PTR(property_name);
                   26143:        }
1.1.1.2   misho    26144:        if (IS_UNUSED == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    26145:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   26146:        }
1.1.1.2   misho    26147:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    26148:        if (0) {
                   26149:                zval_ptr_dtor(&property_name);
                   26150:        } else {
                   26151: 
                   26152:        }
                   26153: 
                   26154:        /* assign_obj has two opcodes! */
1.1.1.2   misho    26155:        CHECK_EXCEPTION();
1.1       misho    26156:        ZEND_VM_INC_OPCODE();
                   26157:        ZEND_VM_NEXT_OPCODE();
                   26158: }
                   26159: 
                   26160: static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26161: {
1.1.1.2   misho    26162:        USE_OPLINE
1.1       misho    26163: 
1.1.1.2   misho    26164:        zval *str = &EX_T(opline->result.var).tmp_var;
                   26165:        zval *var;
1.1       misho    26166:        zval var_copy;
                   26167:        int use_copy = 0;
                   26168: 
1.1.1.2   misho    26169:        SAVE_OPLINE();
                   26170:        var = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   26171: 
1.1       misho    26172:        if (IS_UNUSED == IS_UNUSED) {
                   26173:                /* Initialize for erealloc in add_string_to_string */
                   26174:                Z_STRVAL_P(str) = NULL;
                   26175:                Z_STRLEN_P(str) = 0;
                   26176:                Z_TYPE_P(str) = IS_STRING;
                   26177: 
                   26178:                INIT_PZVAL(str);
                   26179:        }
                   26180: 
                   26181:        if (Z_TYPE_P(var) != IS_STRING) {
                   26182:                zend_make_printable_zval(var, &var_copy, &use_copy);
                   26183: 
                   26184:                if (use_copy) {
                   26185:                        var = &var_copy;
                   26186:                }
                   26187:        }
                   26188:        add_string_to_string(str, str, var);
                   26189: 
                   26190:        if (use_copy) {
                   26191:                zval_dtor(var);
                   26192:        }
                   26193:        /* original comment, possibly problematic:
                   26194:         * FREE_OP is missing intentionally here - we're always working on the same temporary variable
                   26195:         * (Zeev):  I don't think it's problematic, we only use variables
                   26196:         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
                   26197:         * string offsets or overloaded objects
                   26198:         */
                   26199: 
1.1.1.2   misho    26200:        CHECK_EXCEPTION();
1.1       misho    26201:        ZEND_VM_NEXT_OPCODE();
                   26202: }
                   26203: 
                   26204: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26205: {
1.1.1.2   misho    26206:        USE_OPLINE
1.1       misho    26207:        zval *function_name;
                   26208:        char *function_name_strval;
                   26209:        int function_name_strlen;
                   26210: 
                   26211: 
1.1.1.2   misho    26212:        SAVE_OPLINE();
1.1       misho    26213:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   26214: 
1.1.1.2   misho    26215:        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26216: 
1.1.1.2   misho    26217:        if (IS_CV != IS_CONST &&
                   26218:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    26219:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   26220:        }
                   26221: 
                   26222:        function_name_strval = Z_STRVAL_P(function_name);
                   26223:        function_name_strlen = Z_STRLEN_P(function_name);
                   26224: 
                   26225:        EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
                   26226: 
1.1.1.2   misho    26227:        if (EXPECTED(EX(object) != NULL) &&
                   26228:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   26229:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    26230: 
1.1.1.2   misho    26231:                if (IS_CV != IS_CONST ||
                   26232:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   26233:                    zval *object = EX(object);
                   26234: 
                   26235:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   26236:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   26237:                        }
                   26238: 
                   26239:                        /* First, locate the function. */
                   26240:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   26241:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   26242:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   26243:                        }
                   26244:                        if (IS_CV == IS_CONST &&
                   26245:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   26246:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   26247:                            EXPECTED(EX(object) == object)) {
                   26248:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   26249:                        }
1.1       misho    26250:                }
                   26251:        } else {
                   26252:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   26253:        }
                   26254: 
                   26255:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   26256:                EX(object) = NULL;
                   26257:        } else {
                   26258:                if (!PZVAL_IS_REF(EX(object))) {
                   26259:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   26260:                } else {
                   26261:                        zval *this_ptr;
                   26262:                        ALLOC_ZVAL(this_ptr);
                   26263:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   26264:                        zval_copy_ctor(this_ptr);
                   26265:                        EX(object) = this_ptr;
                   26266:                }
                   26267:        }
                   26268: 
                   26269: 
1.1.1.2   misho    26270:        CHECK_EXCEPTION();
1.1       misho    26271:        ZEND_VM_NEXT_OPCODE();
                   26272: }
                   26273: 
                   26274: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26275: {
1.1.1.2   misho    26276:        USE_OPLINE
1.1       misho    26277: 
1.1.1.2   misho    26278:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    26279:        if (IS_UNUSED == IS_UNUSED) {
                   26280:                ZEND_VM_NEXT_OPCODE();
                   26281: #if 0 || IS_UNUSED != IS_UNUSED
                   26282:        } else {
                   26283:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   26284: #endif
                   26285:        }
                   26286: }
                   26287: 
                   26288: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26289: {
1.1.1.2   misho    26290:        USE_OPLINE
1.1       misho    26291: 
1.1.1.2   misho    26292:        zval **container;
1.1       misho    26293:        zval *offset;
1.1.1.2   misho    26294:        ulong hval;
1.1       misho    26295: 
1.1.1.2   misho    26296:        SAVE_OPLINE();
                   26297:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    26298:        if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   26299:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   26300:        }
1.1.1.2   misho    26301:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26302: 
                   26303:        if (IS_UNUSED != IS_VAR || container) {
                   26304:                switch (Z_TYPE_PP(container)) {
                   26305:                        case IS_ARRAY: {
                   26306:                                HashTable *ht = Z_ARRVAL_PP(container);
                   26307: 
                   26308:                                switch (Z_TYPE_P(offset)) {
                   26309:                                        case IS_DOUBLE:
1.1.1.2   misho    26310:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    26311:                                                zend_hash_index_del(ht, hval);
                   26312:                                                break;
1.1       misho    26313:                                        case IS_RESOURCE:
                   26314:                                        case IS_BOOL:
                   26315:                                        case IS_LONG:
1.1.1.2   misho    26316:                                                hval = Z_LVAL_P(offset);
                   26317:                                                zend_hash_index_del(ht, hval);
1.1       misho    26318:                                                break;
                   26319:                                        case IS_STRING:
                   26320:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   26321:                                                        Z_ADDREF_P(offset);
                   26322:                                                }
1.1.1.2   misho    26323:                                                if (IS_CV == IS_CONST) {
                   26324:                                                        hval = Z_HASH_P(offset);
                   26325:                                                } else {
                   26326:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   26327:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   26328:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   26329:                                                        } else {
                   26330:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    26331:                                                        }
                   26332:                                                }
1.1.1.2   misho    26333:                                                if (ht == &EG(symbol_table)) {
                   26334:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   26335:                                                } else {
                   26336:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   26337:                                                }
                   26338:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   26339:                                                        zval_ptr_dtor(&offset);
                   26340:                                                }
                   26341:                                                break;
                   26342: num_index_dim:
                   26343:                                                zend_hash_index_del(ht, hval);
1.1       misho    26344:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   26345:                                                        zval_ptr_dtor(&offset);
                   26346:                                                }
                   26347:                                                break;
                   26348:                                        case IS_NULL:
                   26349:                                                zend_hash_del(ht, "", sizeof(""));
                   26350:                                                break;
                   26351:                                        default:
                   26352:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   26353:                                                break;
                   26354:                                }
                   26355: 
                   26356:                                break;
                   26357:                        }
                   26358:                        case IS_OBJECT:
1.1.1.2   misho    26359:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    26360:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   26361:                                }
                   26362:                                if (0) {
                   26363:                                        MAKE_REAL_ZVAL_PTR(offset);
                   26364:                                }
                   26365:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   26366:                                if (0) {
                   26367:                                        zval_ptr_dtor(&offset);
                   26368:                                } else {
                   26369: 
                   26370:                                }
                   26371:                                break;
                   26372:                        case IS_STRING:
                   26373:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   26374:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   26375:                        default:
                   26376: 
                   26377:                                break;
                   26378:                }
                   26379:        } else {
                   26380: 
                   26381:        }
                   26382: 
1.1.1.2   misho    26383:        CHECK_EXCEPTION();
1.1       misho    26384:        ZEND_VM_NEXT_OPCODE();
                   26385: }
                   26386: 
                   26387: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26388: {
1.1.1.2   misho    26389:        USE_OPLINE
                   26390: 
                   26391:        zval **container;
                   26392:        zval *offset;
1.1       misho    26393: 
1.1.1.2   misho    26394:        SAVE_OPLINE();
                   26395:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
                   26396:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26397: 
                   26398:        if (IS_UNUSED != IS_VAR || container) {
                   26399:                if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   26400:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   26401:                }
                   26402:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   26403:                        if (0) {
                   26404:                                MAKE_REAL_ZVAL_PTR(offset);
                   26405:                        }
                   26406:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    26407:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    26408:                        } else {
                   26409:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   26410:                        }
                   26411:                        if (0) {
                   26412:                                zval_ptr_dtor(&offset);
                   26413:                        } else {
                   26414: 
                   26415:                        }
                   26416:                } else {
                   26417: 
                   26418:                }
                   26419:        } else {
                   26420: 
                   26421:        }
                   26422: 
1.1.1.2   misho    26423:        CHECK_EXCEPTION();
1.1       misho    26424:        ZEND_VM_NEXT_OPCODE();
                   26425: }
                   26426: 
                   26427: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   26428: {
1.1.1.2   misho    26429:        USE_OPLINE
1.1       misho    26430: 
1.1.1.2   misho    26431:        zval **container;
1.1       misho    26432:        zval **value = NULL;
                   26433:        int result = 0;
1.1.1.2   misho    26434:        ulong hval;
                   26435:        zval *offset;
1.1       misho    26436: 
1.1.1.2   misho    26437:        SAVE_OPLINE();
                   26438:        container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
1.1       misho    26439: 
1.1.1.2   misho    26440:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    26441: 
1.1.1.2   misho    26442:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   26443:                HashTable *ht;
                   26444:                int isset = 0;
1.1       misho    26445: 
1.1.1.2   misho    26446:                ht = Z_ARRVAL_PP(container);
1.1       misho    26447: 
1.1.1.2   misho    26448:                switch (Z_TYPE_P(offset)) {
                   26449:                        case IS_DOUBLE:
                   26450:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   26451:                                goto num_index_prop;
                   26452:                        case IS_RESOURCE:
                   26453:                        case IS_BOOL:
                   26454:                        case IS_LONG:
                   26455:                                hval = Z_LVAL_P(offset);
                   26456: num_index_prop:
                   26457:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   26458:                                        isset = 1;
                   26459:                                }
                   26460:                                break;
                   26461:                        case IS_STRING:
                   26462:                                if (IS_CV == IS_CONST) {
                   26463:                                        hval = Z_HASH_P(offset);
                   26464:                                } else {
                   26465:                                        if (!prop_dim) {
                   26466:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    26467:                                        }
1.1.1.2   misho    26468:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   26469:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    26470:                                        } else {
1.1.1.2   misho    26471:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    26472:                                        }
                   26473:                                }
1.1.1.2   misho    26474:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   26475:                                        isset = 1;
                   26476:                                }
                   26477:                                break;
                   26478:                        case IS_NULL:
                   26479:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   26480:                                        isset = 1;
1.1       misho    26481:                                }
1.1.1.2   misho    26482:                                break;
                   26483:                        default:
                   26484:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   26485:                                break;
                   26486:                }
                   26487: 
                   26488:                if (opline->extended_value & ZEND_ISSET) {
                   26489:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   26490:                                result = 0;
                   26491:                        } else {
                   26492:                                result = isset;
1.1       misho    26493:                        }
1.1.1.2   misho    26494:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   26495:                        if (!isset || !i_zend_is_true(*value)) {
                   26496:                                result = 0;
1.1       misho    26497:                        } else {
1.1.1.2   misho    26498:                                result = 1;
                   26499:                        }
                   26500:                }
1.1       misho    26501: 
1.1.1.2   misho    26502:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   26503:                if (0) {
                   26504:                        MAKE_REAL_ZVAL_PTR(offset);
                   26505:                }
                   26506:                if (prop_dim) {
                   26507:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   26508:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   26509:                        } else {
                   26510:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   26511:                                result = 0;
1.1       misho    26512:                        }
1.1.1.2   misho    26513:                } else {
                   26514:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   26515:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   26516:                        } else {
                   26517:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   26518:                                result = 0;
                   26519:                        }
                   26520:                }
                   26521:                if (0) {
                   26522:                        zval_ptr_dtor(&offset);
                   26523:                } else {
                   26524: 
                   26525:                }
                   26526:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   26527:                zval tmp;
1.1       misho    26528: 
1.1.1.2   misho    26529:                if (Z_TYPE_P(offset) != IS_LONG) {
                   26530:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   26531:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   26532:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   26533:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    26534:                                zval_copy_ctor(&tmp);
                   26535:                                convert_to_long(&tmp);
                   26536:                                offset = &tmp;
1.1.1.2   misho    26537:                        } else {
                   26538:                                /* can not be converted to proper offset, return "not set" */
                   26539:                                result = 0;
1.1       misho    26540:                        }
1.1.1.2   misho    26541:                }
                   26542:                if (Z_TYPE_P(offset) == IS_LONG) {
                   26543:                        if (opline->extended_value & ZEND_ISSET) {
                   26544:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   26545:                                        result = 1;
                   26546:                                }
                   26547:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   26548:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   26549:                                        result = 1;
1.1       misho    26550:                                }
                   26551:                        }
1.1.1.2   misho    26552:                }
1.1       misho    26553: 
1.1.1.2   misho    26554:        } else {
1.1       misho    26555: 
                   26556:        }
                   26557: 
1.1.1.2   misho    26558:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   26559:        if (opline->extended_value & ZEND_ISSET) {
                   26560:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   26561:        } else {
                   26562:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    26563:        }
                   26564: 
1.1.1.2   misho    26565:        CHECK_EXCEPTION();
1.1       misho    26566:        ZEND_VM_NEXT_OPCODE();
                   26567: }
                   26568: 
                   26569: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26570: {
                   26571:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   26572: }
                   26573: 
                   26574: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26575: {
                   26576:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   26577: }
                   26578: 
                   26579: static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26580: {
1.1.1.2   misho    26581:        USE_OPLINE
1.1       misho    26582: 
                   26583: 
1.1.1.2   misho    26584:        SAVE_OPLINE();
                   26585:        bitwise_not_function(&EX_T(opline->result.var).tmp_var,
                   26586:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    26587: 
1.1.1.2   misho    26588:        CHECK_EXCEPTION();
1.1       misho    26589:        ZEND_VM_NEXT_OPCODE();
                   26590: }
                   26591: 
                   26592: static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26593: {
1.1.1.2   misho    26594:        USE_OPLINE
1.1       misho    26595: 
                   26596: 
1.1.1.2   misho    26597:        SAVE_OPLINE();
                   26598:        boolean_not_function(&EX_T(opline->result.var).tmp_var,
                   26599:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    26600: 
1.1.1.2   misho    26601:        CHECK_EXCEPTION();
1.1       misho    26602:        ZEND_VM_NEXT_OPCODE();
                   26603: }
                   26604: 
                   26605: static int ZEND_FASTCALL  ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26606: {
1.1.1.2   misho    26607:        USE_OPLINE
                   26608: 
                   26609:        zval **var_ptr;
1.1       misho    26610: 
1.1.1.2   misho    26611:        SAVE_OPLINE();
                   26612:        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    26613: 
1.1.1.2   misho    26614:        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    26615:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   26616:        }
1.1.1.2   misho    26617:        if (IS_CV == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   26618:                if (RETURN_VALUE_USED(opline)) {
                   26619:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   26620:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    26621:                }
                   26622: 
1.1.1.2   misho    26623:                CHECK_EXCEPTION();
1.1       misho    26624:                ZEND_VM_NEXT_OPCODE();
                   26625:        }
                   26626: 
                   26627:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   26628: 
1.1.1.2   misho    26629:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   26630:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    26631:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   26632:                /* proxy object */
                   26633:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   26634:                Z_ADDREF_P(val);
1.1.1.2   misho    26635:                fast_increment_function(val);
1.1       misho    26636:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   26637:                zval_ptr_dtor(&val);
                   26638:        } else {
1.1.1.2   misho    26639:                fast_increment_function(*var_ptr);
1.1       misho    26640:        }
                   26641: 
1.1.1.2   misho    26642:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    26643:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    26644:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    26645:        }
                   26646: 
1.1.1.2   misho    26647:        CHECK_EXCEPTION();
1.1       misho    26648:        ZEND_VM_NEXT_OPCODE();
                   26649: }
                   26650: 
                   26651: static int ZEND_FASTCALL  ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26652: {
1.1.1.2   misho    26653:        USE_OPLINE
1.1       misho    26654: 
1.1.1.2   misho    26655:        zval **var_ptr;
                   26656: 
                   26657:        SAVE_OPLINE();
                   26658:        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    26659: 
1.1.1.2   misho    26660:        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    26661:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   26662:        }
1.1.1.2   misho    26663:        if (IS_CV == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   26664:                if (RETURN_VALUE_USED(opline)) {
                   26665:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   26666:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    26667:                }
                   26668: 
1.1.1.2   misho    26669:                CHECK_EXCEPTION();
1.1       misho    26670:                ZEND_VM_NEXT_OPCODE();
                   26671:        }
                   26672: 
                   26673:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   26674: 
1.1.1.2   misho    26675:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   26676:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    26677:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   26678:                /* proxy object */
                   26679:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   26680:                Z_ADDREF_P(val);
1.1.1.2   misho    26681:                fast_decrement_function(val);
1.1       misho    26682:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   26683:                zval_ptr_dtor(&val);
                   26684:        } else {
1.1.1.2   misho    26685:                fast_decrement_function(*var_ptr);
1.1       misho    26686:        }
                   26687: 
1.1.1.2   misho    26688:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    26689:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    26690:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    26691:        }
                   26692: 
1.1.1.2   misho    26693:        CHECK_EXCEPTION();
1.1       misho    26694:        ZEND_VM_NEXT_OPCODE();
                   26695: }
                   26696: 
                   26697: static int ZEND_FASTCALL  ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26698: {
1.1.1.2   misho    26699:        USE_OPLINE
                   26700: 
                   26701:        zval **var_ptr, *retval;
1.1       misho    26702: 
1.1.1.2   misho    26703:        SAVE_OPLINE();
                   26704:        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    26705: 
1.1.1.2   misho    26706:        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    26707:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   26708:        }
1.1.1.2   misho    26709:        if (IS_CV == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   26710:                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
1.1       misho    26711: 
1.1.1.2   misho    26712:                CHECK_EXCEPTION();
1.1       misho    26713:                ZEND_VM_NEXT_OPCODE();
                   26714:        }
                   26715: 
1.1.1.2   misho    26716:        retval = &EX_T(opline->result.var).tmp_var;
                   26717:        ZVAL_COPY_VALUE(retval, *var_ptr);
                   26718:        zendi_zval_copy_ctor(*retval);
1.1       misho    26719: 
                   26720:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   26721: 
1.1.1.2   misho    26722:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   26723:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    26724:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   26725:                /* proxy object */
                   26726:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   26727:                Z_ADDREF_P(val);
1.1.1.2   misho    26728:                fast_increment_function(val);
1.1       misho    26729:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   26730:                zval_ptr_dtor(&val);
                   26731:        } else {
1.1.1.2   misho    26732:                fast_increment_function(*var_ptr);
1.1       misho    26733:        }
                   26734: 
1.1.1.2   misho    26735:        CHECK_EXCEPTION();
1.1       misho    26736:        ZEND_VM_NEXT_OPCODE();
                   26737: }
                   26738: 
                   26739: static int ZEND_FASTCALL  ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26740: {
1.1.1.2   misho    26741:        USE_OPLINE
                   26742: 
                   26743:        zval **var_ptr, *retval;
1.1       misho    26744: 
1.1.1.2   misho    26745:        SAVE_OPLINE();
                   26746:        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    26747: 
1.1.1.2   misho    26748:        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
1.1       misho    26749:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   26750:        }
1.1.1.2   misho    26751:        if (IS_CV == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   26752:                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
1.1       misho    26753: 
1.1.1.2   misho    26754:                CHECK_EXCEPTION();
1.1       misho    26755:                ZEND_VM_NEXT_OPCODE();
                   26756:        }
                   26757: 
1.1.1.2   misho    26758:        retval = &EX_T(opline->result.var).tmp_var;
                   26759:        ZVAL_COPY_VALUE(retval, *var_ptr);
                   26760:        zendi_zval_copy_ctor(*retval);
1.1       misho    26761: 
                   26762:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   26763: 
1.1.1.2   misho    26764:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   26765:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    26766:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   26767:                /* proxy object */
                   26768:                zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   26769:                Z_ADDREF_P(val);
1.1.1.2   misho    26770:                fast_decrement_function(val);
1.1       misho    26771:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
                   26772:                zval_ptr_dtor(&val);
                   26773:        } else {
1.1.1.2   misho    26774:                fast_decrement_function(*var_ptr);
1.1       misho    26775:        }
                   26776: 
1.1.1.2   misho    26777:        CHECK_EXCEPTION();
1.1       misho    26778:        ZEND_VM_NEXT_OPCODE();
                   26779: }
                   26780: 
                   26781: static int ZEND_FASTCALL  ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26782: {
1.1.1.2   misho    26783:        USE_OPLINE
1.1       misho    26784: 
1.1.1.2   misho    26785:        zval *z;
                   26786: 
                   26787:        SAVE_OPLINE();
                   26788:        z = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    26789: 
1.1.1.3   misho    26790:        if (IS_CV == IS_TMP_VAR && Z_TYPE_P(z) == IS_OBJECT) {
                   26791:                INIT_PZVAL(z);
1.1       misho    26792:        }
1.1.1.3   misho    26793:        zend_print_variable(z);
1.1       misho    26794: 
1.1.1.2   misho    26795:        CHECK_EXCEPTION();
1.1       misho    26796:        ZEND_VM_NEXT_OPCODE();
                   26797: }
                   26798: 
                   26799: static int ZEND_FASTCALL  ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26800: {
1.1.1.2   misho    26801:        USE_OPLINE
1.1       misho    26802: 
1.1.1.2   misho    26803:        ZVAL_LONG(&EX_T(opline->result.var).tmp_var, 1);
1.1       misho    26804:        return ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   26805: }
                   26806: 
                   26807: static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26808: {
1.1.1.2   misho    26809:        USE_OPLINE
1.1       misho    26810: 
1.1.1.2   misho    26811:        zval *val;
1.1       misho    26812:        int ret;
                   26813: 
1.1.1.2   misho    26814:        SAVE_OPLINE();
                   26815:        val = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26816: 
                   26817:        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    26818:                ret = Z_LVAL_P(val);
                   26819:        } else {
                   26820:                ret = i_zend_is_true(val);
                   26821: 
                   26822:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    26823:                        HANDLE_EXCEPTION();
1.1       misho    26824:                }
                   26825:        }
                   26826:        if (!ret) {
                   26827: #if DEBUG_ZEND>=2
1.1.1.2   misho    26828:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    26829: #endif
1.1.1.2   misho    26830:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    26831:                ZEND_VM_CONTINUE();
                   26832:        }
                   26833: 
                   26834:        ZEND_VM_NEXT_OPCODE();
                   26835: }
                   26836: 
                   26837: static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26838: {
1.1.1.2   misho    26839:        USE_OPLINE
1.1       misho    26840: 
1.1.1.2   misho    26841:        zval *val;
1.1       misho    26842:        int ret;
                   26843: 
1.1.1.2   misho    26844:        SAVE_OPLINE();
                   26845:        val = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26846: 
                   26847:        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    26848:                ret = Z_LVAL_P(val);
                   26849:        } else {
                   26850:                ret = i_zend_is_true(val);
                   26851: 
                   26852:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    26853:                        HANDLE_EXCEPTION();
1.1       misho    26854:                }
                   26855:        }
                   26856:        if (ret) {
                   26857: #if DEBUG_ZEND>=2
1.1.1.2   misho    26858:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    26859: #endif
1.1.1.2   misho    26860:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    26861:                ZEND_VM_CONTINUE();
                   26862:        }
                   26863: 
                   26864:        ZEND_VM_NEXT_OPCODE();
                   26865: }
                   26866: 
                   26867: static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26868: {
1.1.1.2   misho    26869:        USE_OPLINE
1.1       misho    26870: 
1.1.1.2   misho    26871:        zval *val;
1.1       misho    26872:        int retval;
                   26873: 
1.1.1.2   misho    26874:        SAVE_OPLINE();
                   26875:        val = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26876: 
                   26877:        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    26878:                retval = Z_LVAL_P(val);
                   26879:        } else {
                   26880:                retval = i_zend_is_true(val);
                   26881: 
                   26882:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    26883:                        HANDLE_EXCEPTION();
1.1       misho    26884:                }
                   26885:        }
                   26886:        if (EXPECTED(retval != 0)) {
                   26887: #if DEBUG_ZEND>=2
                   26888:                printf("Conditional jmp on true to %d\n", opline->extended_value);
                   26889: #endif
                   26890:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
                   26891:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   26892:        } else {
                   26893: #if DEBUG_ZEND>=2
1.1.1.2   misho    26894:                printf("Conditional jmp on false to %d\n", opline->op2.opline_num);
1.1       misho    26895: #endif
1.1.1.2   misho    26896:                ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]);
1.1       misho    26897:                ZEND_VM_CONTINUE(); /* CHECK_ME */
                   26898:        }
                   26899: }
                   26900: 
                   26901: static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26902: {
1.1.1.2   misho    26903:        USE_OPLINE
1.1       misho    26904: 
1.1.1.2   misho    26905:        zval *val;
1.1       misho    26906:        int retval;
                   26907: 
1.1.1.2   misho    26908:        SAVE_OPLINE();
                   26909:        val = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26910: 
                   26911:        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    26912:                retval = Z_LVAL_P(val);
                   26913:        } else {
                   26914:                retval = i_zend_is_true(val);
                   26915: 
                   26916:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    26917:                        HANDLE_EXCEPTION();
1.1       misho    26918:                }
                   26919:        }
1.1.1.2   misho    26920:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   26921:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    26922:        if (!retval) {
                   26923: #if DEBUG_ZEND>=2
1.1.1.2   misho    26924:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    26925: #endif
1.1.1.2   misho    26926:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    26927:                ZEND_VM_CONTINUE();
                   26928:        }
                   26929:        ZEND_VM_NEXT_OPCODE();
                   26930: }
                   26931: 
                   26932: static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26933: {
1.1.1.2   misho    26934:        USE_OPLINE
1.1       misho    26935: 
1.1.1.2   misho    26936:        zval *val;
1.1       misho    26937:        int retval;
                   26938: 
1.1.1.2   misho    26939:        SAVE_OPLINE();
                   26940:        val = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26941: 
                   26942:        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
1.1       misho    26943:                retval = Z_LVAL_P(val);
                   26944:        } else {
                   26945:                retval = i_zend_is_true(val);
                   26946: 
                   26947:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    26948:                        HANDLE_EXCEPTION();
1.1       misho    26949:                }
                   26950:        }
1.1.1.2   misho    26951:        Z_LVAL(EX_T(opline->result.var).tmp_var) = retval;
                   26952:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
1.1       misho    26953:        if (retval) {
                   26954: #if DEBUG_ZEND>=2
1.1.1.2   misho    26955:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    26956: #endif
1.1.1.2   misho    26957:                ZEND_VM_SET_OPCODE(opline->op2.jmp_addr);
1.1       misho    26958:                ZEND_VM_CONTINUE();
                   26959:        }
                   26960:        ZEND_VM_NEXT_OPCODE();
                   26961: }
                   26962: 
                   26963: static int ZEND_FASTCALL  ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   26964: {
1.1.1.2   misho    26965:        USE_OPLINE
1.1       misho    26966:        zval *retval_ptr;
                   26967: 
                   26968: 
1.1.1.2   misho    26969:        SAVE_OPLINE();
                   26970:        retval_ptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   26971: 
                   26972:        if (!EG(return_value_ptr_ptr)) {
                   26973:                if (IS_CV == IS_TMP_VAR) {
1.1       misho    26974: 
                   26975:                }
1.1.1.2   misho    26976:        } else if (!0) { /* Not a temp var */
                   26977:                if (IS_CV == IS_CONST ||
                   26978:                    (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) {
                   26979:                        zval *ret;
1.1       misho    26980: 
1.1.1.2   misho    26981:                        ALLOC_ZVAL(ret);
                   26982:                        INIT_PZVAL_COPY(ret, retval_ptr);
                   26983:                        zval_copy_ctor(ret);
                   26984:                        *EG(return_value_ptr_ptr) = ret;
                   26985:                } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) &&
                   26986:                           retval_ptr == &EG(uninitialized_zval)) {
                   26987:                        zval *ret;
1.1       misho    26988: 
1.1.1.2   misho    26989:                        ALLOC_INIT_ZVAL(ret);
                   26990:                        *EG(return_value_ptr_ptr) = ret;
                   26991:                } else {
                   26992:                        *EG(return_value_ptr_ptr) = retval_ptr;
                   26993:                        Z_ADDREF_P(retval_ptr);
1.1       misho    26994:                }
1.1.1.2   misho    26995:        } else {
                   26996:                zval *ret;
1.1       misho    26997: 
1.1.1.2   misho    26998:                ALLOC_ZVAL(ret);
                   26999:                INIT_PZVAL_COPY(ret, retval_ptr);
                   27000:                *EG(return_value_ptr_ptr) = ret;
                   27001:        }
1.1       misho    27002: 
1.1.1.2   misho    27003:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27004: }
1.1       misho    27005: 
1.1.1.2   misho    27006: static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27007: {
                   27008:        USE_OPLINE
                   27009:        zval *retval_ptr;
                   27010:        zval **retval_ptr_ptr;
1.1       misho    27011: 
                   27012: 
1.1.1.2   misho    27013:        SAVE_OPLINE();
1.1       misho    27014: 
1.1.1.2   misho    27015:        do {
                   27016:                if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
                   27017:                        /* Not supposed to happen, but we'll allow it */
                   27018:                        zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   27019: 
                   27020:                        retval_ptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27021:                        if (!EG(return_value_ptr_ptr)) {
                   27022:                                if (IS_CV == IS_TMP_VAR) {
                   27023: 
                   27024:                                }
                   27025:                        } else if (!0) { /* Not a temp var */
1.1       misho    27026:                                zval *ret;
                   27027: 
                   27028:                                ALLOC_ZVAL(ret);
                   27029:                                INIT_PZVAL_COPY(ret, retval_ptr);
                   27030:                                zval_copy_ctor(ret);
                   27031:                                *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    27032:                        } else {
1.1       misho    27033:                                zval *ret;
                   27034: 
1.1.1.2   misho    27035:                                ALLOC_ZVAL(ret);
                   27036:                                INIT_PZVAL_COPY(ret, retval_ptr);
1.1       misho    27037:                                *EG(return_value_ptr_ptr) = ret;
                   27038:                        }
1.1.1.2   misho    27039:                        break;
                   27040:                }
1.1       misho    27041: 
1.1.1.2   misho    27042:                retval_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27043: 
                   27044:                if (IS_CV == IS_VAR && UNEXPECTED(retval_ptr_ptr == NULL)) {
                   27045:                        zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
1.1       misho    27046:                }
1.1.1.2   misho    27047: 
                   27048:                if (IS_CV == IS_VAR && !Z_ISREF_PP(retval_ptr_ptr)) {
                   27049:                        if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
                   27050:                            EX_T(opline->op1.var).var.fcall_returned_reference) {
                   27051:                        } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
                   27052:                                zend_error(E_NOTICE, "Only variable references should be returned by reference");
                   27053:                                if (EG(return_value_ptr_ptr)) {
1.1.1.4   misho    27054:                                        zval *ret;
                   27055: 
                   27056:                                        ALLOC_ZVAL(ret);
                   27057:                                        INIT_PZVAL_COPY(ret, *retval_ptr_ptr);
                   27058:                                        zval_copy_ctor(ret);
                   27059:                                        *EG(return_value_ptr_ptr) = ret;
1.1.1.2   misho    27060:                                }
                   27061:                                break;
                   27062:                        }
                   27063:                }
                   27064: 
                   27065:                if (EG(return_value_ptr_ptr)) {
                   27066:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
                   27067:                        Z_ADDREF_PP(retval_ptr_ptr);
                   27068: 
                   27069:                        *EG(return_value_ptr_ptr) = *retval_ptr_ptr;
                   27070:                }
                   27071:        } while (0);
1.1       misho    27072: 
                   27073:        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27074: }
                   27075: 
                   27076: static int ZEND_FASTCALL  ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27077: {
1.1.1.2   misho    27078:        USE_OPLINE
1.1       misho    27079:        zval *value;
                   27080:        zval *exception;
                   27081: 
                   27082: 
1.1.1.2   misho    27083:        SAVE_OPLINE();
                   27084:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27085: 
1.1.1.2   misho    27086:        if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
1.1       misho    27087:                zend_error_noreturn(E_ERROR, "Can only throw objects");
                   27088:        }
                   27089:        zend_exception_save(TSRMLS_C);
                   27090:        /* Not sure if a complete copy is what we want here */
                   27091:        ALLOC_ZVAL(exception);
                   27092:        INIT_PZVAL_COPY(exception, value);
                   27093:        if (!0) {
                   27094:                zval_copy_ctor(exception);
                   27095:        }
                   27096: 
                   27097:        zend_throw_exception_object(exception TSRMLS_CC);
                   27098:        zend_exception_restore(TSRMLS_C);
                   27099: 
1.1.1.2   misho    27100:        HANDLE_EXCEPTION();
1.1       misho    27101: }
                   27102: 
                   27103: static int ZEND_FASTCALL zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
                   27104: {
1.1.1.2   misho    27105:        USE_OPLINE
1.1       misho    27106:        zval *varptr;
                   27107: 
1.1.1.2   misho    27108:        varptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27109: 
                   27110:        if (varptr == &EG(uninitialized_zval)) {
                   27111:                ALLOC_ZVAL(varptr);
                   27112:                INIT_ZVAL(*varptr);
                   27113:                Z_SET_REFCOUNT_P(varptr, 0);
                   27114:        } else if (PZVAL_IS_REF(varptr)) {
                   27115:                zval *original_var = varptr;
                   27116: 
                   27117:                ALLOC_ZVAL(varptr);
1.1.1.2   misho    27118:                ZVAL_COPY_VALUE(varptr, original_var);
1.1       misho    27119:                Z_UNSET_ISREF_P(varptr);
                   27120:                Z_SET_REFCOUNT_P(varptr, 0);
                   27121:                zval_copy_ctor(varptr);
                   27122:        }
                   27123:        Z_ADDREF_P(varptr);
                   27124:        zend_vm_stack_push(varptr TSRMLS_CC);
                   27125:        ;  /* for string offsets */
                   27126: 
1.1.1.2   misho    27127:        CHECK_EXCEPTION();
1.1       misho    27128:        ZEND_VM_NEXT_OPCODE();
                   27129: }
                   27130: 
                   27131: static int ZEND_FASTCALL  ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27132: {
1.1.1.2   misho    27133:        USE_OPLINE
1.1       misho    27134:        zend_free_op free_op1;
                   27135:        zval *varptr;
                   27136: 
1.1.1.2   misho    27137:        SAVE_OPLINE();
1.1       misho    27138:        if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
                   27139:                if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) {
                   27140:                        return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27141:                }
1.1.1.2   misho    27142:        } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    27143:                return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27144:        }
                   27145: 
                   27146:        if (IS_CV == IS_VAR &&
                   27147:                (opline->extended_value & ZEND_ARG_SEND_FUNCTION) &&
1.1.1.2   misho    27148:                EX_T(opline->op1.var).var.fcall_returned_reference &&
                   27149:                EX_T(opline->op1.var).var.ptr) {
                   27150:                varptr = EX_T(opline->op1.var).var.ptr;
1.1       misho    27151:                PZVAL_UNLOCK_EX(varptr, &free_op1, 0);
                   27152:        } else {
1.1.1.2   misho    27153:                varptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27154:        }
                   27155:        if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
1.1.1.2   misho    27156:             EX_T(opline->op1.var).var.fcall_returned_reference) &&
1.1       misho    27157:            varptr != &EG(uninitialized_zval) &&
                   27158:            (PZVAL_IS_REF(varptr) ||
                   27159:             (Z_REFCOUNT_P(varptr) == 1 && (IS_CV == IS_CV || free_op1.var)))) {
                   27160:                Z_SET_ISREF_P(varptr);
                   27161:                Z_ADDREF_P(varptr);
                   27162:                zend_vm_stack_push(varptr TSRMLS_CC);
                   27163:        } else {
                   27164:                zval *valptr;
                   27165: 
                   27166:                if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
                   27167:                        !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
1.1.1.2   misho    27168:                        !ARG_MAY_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    27169:                        zend_error(E_STRICT, "Only variables should be passed by reference");
                   27170:                }
                   27171:                ALLOC_ZVAL(valptr);
                   27172:                INIT_PZVAL_COPY(valptr, varptr);
                   27173:                if (!0) {
                   27174:                        zval_copy_ctor(valptr);
                   27175:                }
                   27176:                zend_vm_stack_push(valptr TSRMLS_CC);
                   27177:        }
                   27178: 
1.1.1.2   misho    27179:        CHECK_EXCEPTION();
1.1       misho    27180:        ZEND_VM_NEXT_OPCODE();
                   27181: }
                   27182: 
                   27183: static int ZEND_FASTCALL  ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27184: {
1.1.1.2   misho    27185:        USE_OPLINE
1.1       misho    27186: 
                   27187:        zval **varptr_ptr;
                   27188:        zval *varptr;
                   27189: 
1.1.1.2   misho    27190:        SAVE_OPLINE();
                   27191:        varptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27192: 
                   27193:        if (IS_CV == IS_VAR && UNEXPECTED(varptr_ptr == NULL)) {
1.1       misho    27194:                zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
                   27195:        }
                   27196: 
1.1.1.2   misho    27197:        if (IS_CV == IS_VAR && UNEXPECTED(*varptr_ptr == &EG(error_zval))) {
1.1       misho    27198:                ALLOC_INIT_ZVAL(varptr);
                   27199:                zend_vm_stack_push(varptr TSRMLS_CC);
1.1.1.2   misho    27200:                CHECK_EXCEPTION();
1.1       misho    27201:                ZEND_VM_NEXT_OPCODE();
                   27202:        }
                   27203: 
1.1.1.3   misho    27204:        if (opline->extended_value == ZEND_DO_FCALL_BY_NAME &&
                   27205:            EX(function_state).function->type == ZEND_INTERNAL_FUNCTION &&
                   27206:            !ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    27207:                return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27208:        }
                   27209: 
                   27210:        SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
                   27211:        varptr = *varptr_ptr;
                   27212:        Z_ADDREF_P(varptr);
                   27213:        zend_vm_stack_push(varptr TSRMLS_CC);
                   27214: 
1.1.1.2   misho    27215:        CHECK_EXCEPTION();
1.1       misho    27216:        ZEND_VM_NEXT_OPCODE();
                   27217: }
                   27218: 
                   27219: static int ZEND_FASTCALL  ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27220: {
1.1.1.2   misho    27221:        USE_OPLINE
1.1       misho    27222: 
                   27223:        if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME)
1.1.1.2   misho    27224:                && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.opline_num)) {
1.1       misho    27225:                return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27226:        }
1.1.1.2   misho    27227:        SAVE_OPLINE();
1.1       misho    27228:        return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   27229: }
                   27230: 
                   27231: static int ZEND_FASTCALL  ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27232: {
1.1.1.2   misho    27233:        USE_OPLINE
1.1       misho    27234: 
1.1.1.2   misho    27235:        zval *retval = &EX_T(opline->result.var).tmp_var;
1.1       misho    27236: 
1.1.1.2   misho    27237:        SAVE_OPLINE();
1.1       misho    27238:        /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
1.1.1.2   misho    27239:        ZVAL_BOOL(retval, i_zend_is_true(_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC)));
1.1       misho    27240: 
1.1.1.2   misho    27241:        CHECK_EXCEPTION();
1.1       misho    27242:        ZEND_VM_NEXT_OPCODE();
                   27243: }
                   27244: 
                   27245: static int ZEND_FASTCALL  ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27246: {
1.1.1.2   misho    27247:        USE_OPLINE
1.1       misho    27248: 
1.1.1.2   misho    27249:        zval *obj;
1.1       misho    27250:        zend_class_entry *ce;
                   27251:        zend_function *clone;
                   27252:        zend_object_clone_obj_t clone_call;
                   27253: 
1.1.1.2   misho    27254:        SAVE_OPLINE();
                   27255:        obj = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27256: 
1.1       misho    27257:        if (IS_CV == IS_CONST ||
1.1.1.2   misho    27258:            UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT)) {
1.1       misho    27259:                zend_error_noreturn(E_ERROR, "__clone method called on non-object");
                   27260:        }
                   27261: 
                   27262:        ce = Z_OBJCE_P(obj);
                   27263:        clone = ce ? ce->clone : NULL;
                   27264:        clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
1.1.1.2   misho    27265:        if (UNEXPECTED(clone_call == NULL)) {
1.1       misho    27266:                if (ce) {
                   27267:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
                   27268:                } else {
                   27269:                        zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
                   27270:                }
                   27271:        }
                   27272: 
                   27273:        if (ce && clone) {
                   27274:                if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
                   27275:                        /* Ensure that if we're calling a private function, we're allowed to do so.
                   27276:                         */
1.1.1.2   misho    27277:                        if (UNEXPECTED(ce != EG(scope))) {
1.1       misho    27278:                                zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   27279:                        }
                   27280:                } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
                   27281:                        /* Ensure that if we're calling a protected function, we're allowed to do so.
                   27282:                         */
1.1.1.3   misho    27283:                        if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
1.1       misho    27284:                                zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
                   27285:                        }
                   27286:                }
                   27287:        }
                   27288: 
1.1.1.2   misho    27289:        if (EXPECTED(EG(exception) == NULL)) {
                   27290:                zval *retval;
                   27291: 
                   27292:                ALLOC_ZVAL(retval);
                   27293:                Z_OBJVAL_P(retval) = clone_call(obj TSRMLS_CC);
                   27294:                Z_TYPE_P(retval) = IS_OBJECT;
                   27295:                Z_SET_REFCOUNT_P(retval, 1);
                   27296:                Z_SET_ISREF_P(retval);
                   27297:                if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
                   27298:                        zval_ptr_dtor(&retval);
                   27299:                } else {
                   27300:                        AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    27301:                }
                   27302:        }
                   27303: 
1.1.1.2   misho    27304:        CHECK_EXCEPTION();
1.1       misho    27305:        ZEND_VM_NEXT_OPCODE();
                   27306: }
                   27307: 
                   27308: static int ZEND_FASTCALL  ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27309: {
1.1.1.2   misho    27310:        USE_OPLINE
                   27311: 
                   27312:        zval *expr;
                   27313:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    27314: 
1.1.1.2   misho    27315:        SAVE_OPLINE();
                   27316:        expr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27317: 
                   27318:        if (opline->extended_value != IS_STRING) {
1.1.1.2   misho    27319:                ZVAL_COPY_VALUE(result, expr);
1.1       misho    27320:                if (!0) {
                   27321:                        zendi_zval_copy_ctor(*result);
                   27322:                }
                   27323:        }
                   27324:        switch (opline->extended_value) {
                   27325:                case IS_NULL:
                   27326:                        convert_to_null(result);
                   27327:                        break;
                   27328:                case IS_BOOL:
                   27329:                        convert_to_boolean(result);
                   27330:                        break;
                   27331:                case IS_LONG:
                   27332:                        convert_to_long(result);
                   27333:                        break;
                   27334:                case IS_DOUBLE:
                   27335:                        convert_to_double(result);
                   27336:                        break;
                   27337:                case IS_STRING: {
                   27338:                        zval var_copy;
                   27339:                        int use_copy;
                   27340: 
                   27341:                        zend_make_printable_zval(expr, &var_copy, &use_copy);
                   27342:                        if (use_copy) {
1.1.1.2   misho    27343:                                ZVAL_COPY_VALUE(result, &var_copy);
1.1       misho    27344:                                if (0) {
                   27345: 
                   27346:                                }
                   27347:                        } else {
1.1.1.2   misho    27348:                                ZVAL_COPY_VALUE(result, expr);
1.1       misho    27349:                                if (!0) {
                   27350:                                        zendi_zval_copy_ctor(*result);
                   27351:                                }
                   27352:                        }
                   27353:                        break;
                   27354:                }
                   27355:                case IS_ARRAY:
                   27356:                        convert_to_array(result);
                   27357:                        break;
                   27358:                case IS_OBJECT:
                   27359:                        convert_to_object(result);
                   27360:                        break;
                   27361:        }
                   27362: 
1.1.1.2   misho    27363:        CHECK_EXCEPTION();
1.1       misho    27364:        ZEND_VM_NEXT_OPCODE();
                   27365: }
                   27366: 
                   27367: static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27368: {
1.1.1.2   misho    27369:        USE_OPLINE
1.1       misho    27370:        zend_op_array *new_op_array=NULL;
                   27371: 
1.1.1.2   misho    27372:        zval *inc_filename;
                   27373:     zval *tmp_inc_filename = NULL;
1.1       misho    27374:        zend_bool failure_retval=0;
                   27375: 
1.1.1.2   misho    27376:        SAVE_OPLINE();
                   27377:        inc_filename = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27378: 
1.1       misho    27379:        if (inc_filename->type!=IS_STRING) {
1.1.1.2   misho    27380:                MAKE_STD_ZVAL(tmp_inc_filename);
                   27381:                ZVAL_COPY_VALUE(tmp_inc_filename, inc_filename);
                   27382:                zval_copy_ctor(tmp_inc_filename);
                   27383:                convert_to_string(tmp_inc_filename);
                   27384:                inc_filename = tmp_inc_filename;
1.1       misho    27385:        }
                   27386: 
1.1.1.2   misho    27387:        if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
                   27388:                if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
1.1       misho    27389:                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   27390:                } else {
                   27391:                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   27392:                }
                   27393:        } else {
1.1.1.2   misho    27394:                switch (opline->extended_value) {
1.1       misho    27395:                        case ZEND_INCLUDE_ONCE:
                   27396:                        case ZEND_REQUIRE_ONCE: {
                   27397:                                        zend_file_handle file_handle;
                   27398:                                        char *resolved_path;
                   27399: 
                   27400:                                        resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
                   27401:                                        if (resolved_path) {
                   27402:                                                failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
                   27403:                                        } else {
                   27404:                                                resolved_path = Z_STRVAL_P(inc_filename);
                   27405:                                        }
                   27406: 
                   27407:                                        if (failure_retval) {
                   27408:                                                /* do nothing, file already included */
                   27409:                                        } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
                   27410: 
                   27411:                                                if (!file_handle.opened_path) {
                   27412:                                                        file_handle.opened_path = estrdup(resolved_path);
                   27413:                                                }
                   27414: 
                   27415:                                                if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
1.1.1.2   misho    27416:                                                        new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
1.1       misho    27417:                                                        zend_destroy_file_handle(&file_handle TSRMLS_CC);
                   27418:                                                } else {
                   27419:                                                        zend_file_handle_dtor(&file_handle TSRMLS_CC);
                   27420:                                                        failure_retval=1;
                   27421:                                                }
                   27422:                                        } else {
1.1.1.2   misho    27423:                                                if (opline->extended_value == ZEND_INCLUDE_ONCE) {
1.1       misho    27424:                                                        zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   27425:                                                } else {
                   27426:                                                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
                   27427:                                                }
                   27428:                                        }
                   27429:                                        if (resolved_path != Z_STRVAL_P(inc_filename)) {
                   27430:                                                efree(resolved_path);
                   27431:                                        }
                   27432:                                }
                   27433:                                break;
                   27434:                        case ZEND_INCLUDE:
                   27435:                        case ZEND_REQUIRE:
1.1.1.2   misho    27436:                                new_op_array = compile_filename(opline->extended_value, inc_filename TSRMLS_CC);
1.1       misho    27437:                                break;
                   27438:                        case ZEND_EVAL: {
                   27439:                                        char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
                   27440: 
                   27441:                                        new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
                   27442:                                        efree(eval_desc);
                   27443:                                }
                   27444:                                break;
                   27445:                        EMPTY_SWITCH_DEFAULT_CASE()
                   27446:                }
                   27447:        }
1.1.1.2   misho    27448:        if (tmp_inc_filename) {
                   27449:                zval_ptr_dtor(&tmp_inc_filename);
1.1       misho    27450:        }
                   27451: 
1.1.1.2   misho    27452:        if (UNEXPECTED(EG(exception) != NULL)) {
                   27453:                HANDLE_EXCEPTION();
                   27454:        } else if (EXPECTED(new_op_array != NULL)) {
1.1       misho    27455:                EX(original_return_value) = EG(return_value_ptr_ptr);
                   27456:                EG(active_op_array) = new_op_array;
1.1.1.2   misho    27457:                if (RETURN_VALUE_USED(opline)) {
                   27458:                        EX_T(opline->result.var).var.ptr = NULL;
                   27459:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   27460:                        EG(return_value_ptr_ptr) = EX_T(opline->result.var).var.ptr_ptr;
                   27461:                } else {
                   27462:                        EG(return_value_ptr_ptr) = NULL;
                   27463:                }
1.1       misho    27464: 
                   27465:                EX(current_object) = EX(object);
                   27466: 
                   27467:                EX(function_state).function = (zend_function *) new_op_array;
                   27468:                EX(object) = NULL;
                   27469: 
                   27470:                if (!EG(active_symbol_table)) {
                   27471:                        zend_rebuild_symbol_table(TSRMLS_C);
                   27472:                }
                   27473: 
1.1.1.2   misho    27474:                if (EXPECTED(zend_execute == execute)) {
1.1       misho    27475:                        ZEND_VM_ENTER();
                   27476:                } else {
                   27477:                        zend_execute(new_op_array TSRMLS_CC);
                   27478:                }
                   27479: 
                   27480:                EX(function_state).function = (zend_function *) EX(op_array);
                   27481:                EX(object) = EX(current_object);
                   27482: 
                   27483:                EG(opline_ptr) = &EX(opline);
                   27484:                EG(active_op_array) = EX(op_array);
                   27485:                EG(return_value_ptr_ptr) = EX(original_return_value);
                   27486:                destroy_op_array(new_op_array TSRMLS_CC);
                   27487:                efree(new_op_array);
1.1.1.2   misho    27488:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    27489:                        zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho    27490:                        HANDLE_EXCEPTION();
                   27491:                } else if (RETURN_VALUE_USED(opline)) {
                   27492:                        if (!EX_T(opline->result.var).var.ptr) { /* there was no return statement */
                   27493:                                zval *retval;
1.1       misho    27494: 
1.1.1.2   misho    27495:                                ALLOC_ZVAL(retval);
                   27496:                                ZVAL_BOOL(retval, 1);
                   27497:                                INIT_PZVAL(retval);
                   27498:                                EX_T(opline->result.var).var.ptr = retval;
1.1       misho    27499:                        }
                   27500:                }
                   27501: 
1.1.1.2   misho    27502:        } else if (RETURN_VALUE_USED(opline)) {
                   27503:                zval *retval;
1.1       misho    27504: 
1.1.1.2   misho    27505:                ALLOC_ZVAL(retval);
                   27506:                ZVAL_BOOL(retval, failure_retval);
                   27507:                INIT_PZVAL(retval);
                   27508:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    27509:        }
                   27510:        ZEND_VM_NEXT_OPCODE();
                   27511: }
                   27512: 
                   27513: static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27514: {
1.1.1.2   misho    27515:        USE_OPLINE
1.1       misho    27516: 
                   27517:        zval *array_ptr, **array_ptr_ptr;
                   27518:        HashTable *fe_ht;
                   27519:        zend_object_iterator *iter = NULL;
                   27520:        zend_class_entry *ce = NULL;
                   27521:        zend_bool is_empty = 0;
                   27522: 
1.1.1.2   misho    27523:        SAVE_OPLINE();
                   27524: 
                   27525:        if ((IS_CV == IS_CV || IS_CV == IS_VAR) &&
                   27526:            (opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
                   27527:                array_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27528:                if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
1.1.1.2   misho    27529:                        MAKE_STD_ZVAL(array_ptr);
                   27530:                        ZVAL_NULL(array_ptr);
1.1       misho    27531:                } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
                   27532:                        if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
                   27533:                                zend_error(E_WARNING, "foreach() cannot iterate over objects without PHP class");
1.1.1.2   misho    27534:                                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    27535:                        }
                   27536: 
                   27537:                        ce = Z_OBJCE_PP(array_ptr_ptr);
                   27538:                        if (!ce || ce->get_iterator == NULL) {
                   27539:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   27540:                                Z_ADDREF_PP(array_ptr_ptr);
                   27541:                        }
                   27542:                        array_ptr = *array_ptr_ptr;
                   27543:                } else {
                   27544:                        if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
                   27545:                                SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
                   27546:                                if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
                   27547:                                        Z_SET_ISREF_PP(array_ptr_ptr);
                   27548:                                }
                   27549:                        }
                   27550:                        array_ptr = *array_ptr_ptr;
                   27551:                        Z_ADDREF_P(array_ptr);
                   27552:                }
                   27553:        } else {
1.1.1.2   misho    27554:                array_ptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27555:                if (0) { /* IS_TMP_VAR */
                   27556:                        zval *tmp;
                   27557: 
                   27558:                        ALLOC_ZVAL(tmp);
                   27559:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   27560:                        array_ptr = tmp;
                   27561:                        if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   27562:                                ce = Z_OBJCE_P(array_ptr);
                   27563:                                if (ce && ce->get_iterator) {
                   27564:                                        Z_DELREF_P(array_ptr);
                   27565:                                }
                   27566:                        }
                   27567:                } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
                   27568:                        ce = Z_OBJCE_P(array_ptr);
                   27569:                        if (!ce || !ce->get_iterator) {
                   27570:                                Z_ADDREF_P(array_ptr);
                   27571:                        }
                   27572:                } else if (IS_CV == IS_CONST ||
                   27573:                           ((IS_CV == IS_CV || IS_CV == IS_VAR) &&
                   27574:                            !Z_ISREF_P(array_ptr) &&
                   27575:                            Z_REFCOUNT_P(array_ptr) > 1)) {
                   27576:                        zval *tmp;
                   27577: 
                   27578:                        ALLOC_ZVAL(tmp);
                   27579:                        INIT_PZVAL_COPY(tmp, array_ptr);
                   27580:                        zval_copy_ctor(tmp);
                   27581:                        array_ptr = tmp;
                   27582:                } else {
                   27583:                        Z_ADDREF_P(array_ptr);
                   27584:                }
                   27585:        }
                   27586: 
                   27587:        if (ce && ce->get_iterator) {
                   27588:                iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
                   27589: 
1.1.1.2   misho    27590:                if (iter && EXPECTED(EG(exception) == NULL)) {
1.1       misho    27591:                        array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
                   27592:                } else {
                   27593: 
                   27594:                        if (!EG(exception)) {
                   27595:                                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
                   27596:                        }
                   27597:                        zend_throw_exception_internal(NULL TSRMLS_CC);
1.1.1.2   misho    27598:                        HANDLE_EXCEPTION();
1.1       misho    27599:                }
                   27600:        }
                   27601: 
1.1.1.2   misho    27602:        EX_T(opline->result.var).fe.ptr = array_ptr;
1.1       misho    27603: 
                   27604:        if (iter) {
                   27605:                iter->index = 0;
                   27606:                if (iter->funcs->rewind) {
                   27607:                        iter->funcs->rewind(iter TSRMLS_CC);
1.1.1.2   misho    27608:                        if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    27609:                                zval_ptr_dtor(&array_ptr);
                   27610: 
1.1.1.2   misho    27611:                                HANDLE_EXCEPTION();
1.1       misho    27612:                        }
                   27613:                }
                   27614:                is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
1.1.1.2   misho    27615:                if (UNEXPECTED(EG(exception) != NULL)) {
1.1       misho    27616:                        zval_ptr_dtor(&array_ptr);
                   27617: 
1.1.1.2   misho    27618:                        HANDLE_EXCEPTION();
1.1       misho    27619:                }
                   27620:                iter->index = -1; /* will be set to 0 before using next handler */
                   27621:        } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
                   27622:                zend_hash_internal_pointer_reset(fe_ht);
                   27623:                if (ce) {
                   27624:                        zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
                   27625:                        while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
                   27626:                                char *str_key;
                   27627:                                uint str_key_len;
                   27628:                                ulong int_key;
                   27629:                                zend_uchar key_type;
                   27630: 
                   27631:                                key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
                   27632:                                if (key_type != HASH_KEY_NON_EXISTANT &&
                   27633:                                        (key_type == HASH_KEY_IS_LONG ||
                   27634:                                     zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
                   27635:                                        break;
                   27636:                                }
                   27637:                                zend_hash_move_forward(fe_ht);
                   27638:                        }
                   27639:                }
                   27640:                is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
1.1.1.2   misho    27641:                zend_hash_get_pointer(fe_ht, &EX_T(opline->result.var).fe.fe_pos);
1.1       misho    27642:        } else {
                   27643:                zend_error(E_WARNING, "Invalid argument supplied for foreach()");
                   27644:                is_empty = 1;
                   27645:        }
                   27646: 
                   27647:        if (is_empty) {
1.1.1.2   misho    27648:                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
1.1       misho    27649:        } else {
1.1.1.2   misho    27650:                CHECK_EXCEPTION();
1.1       misho    27651:                ZEND_VM_NEXT_OPCODE();
                   27652:        }
                   27653: }
                   27654: 
1.1.1.2   misho    27655: static int ZEND_FASTCALL  ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    27656: {
1.1.1.2   misho    27657: #if 0 || (IS_CV != IS_UNUSED)
                   27658:        USE_OPLINE
1.1       misho    27659: 
1.1.1.2   misho    27660:        SAVE_OPLINE();
                   27661:        if (IS_CV != IS_UNUSED) {
1.1       misho    27662: 
1.1.1.2   misho    27663:                zval *ptr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27664: 
                   27665:                if (Z_TYPE_P(ptr) == IS_LONG) {
                   27666:                        EG(exit_status) = Z_LVAL_P(ptr);
1.1       misho    27667:                } else {
1.1.1.2   misho    27668:                        zend_print_variable(ptr);
1.1       misho    27669:                }
                   27670: 
1.1.1.2   misho    27671:        }
                   27672: #endif
                   27673:        zend_bailout();
                   27674:        ZEND_VM_NEXT_OPCODE(); /* Never reached */
                   27675: }
1.1       misho    27676: 
1.1.1.2   misho    27677: static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27678: {
                   27679:        USE_OPLINE
1.1       misho    27680: 
1.1.1.2   misho    27681:        zval *value;
1.1       misho    27682: 
1.1.1.2   misho    27683:        SAVE_OPLINE();
                   27684:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27685: 
1.1.1.2   misho    27686:        if (i_zend_is_true(value)) {
                   27687:                ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   27688:                if (!0) {
                   27689:                        zendi_zval_copy_ctor(EX_T(opline->result.var).tmp_var);
                   27690:                }
1.1       misho    27691: 
1.1.1.2   misho    27692: #if DEBUG_ZEND>=2
                   27693:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
                   27694: #endif
                   27695:                ZEND_VM_JMP(opline->op2.jmp_addr);
1.1       misho    27696:        }
                   27697: 
1.1.1.2   misho    27698:        CHECK_EXCEPTION();
1.1       misho    27699:        ZEND_VM_NEXT_OPCODE();
                   27700: }
                   27701: 
1.1.1.2   misho    27702: static int ZEND_FASTCALL  ZEND_JMP_SET_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    27703: {
1.1.1.2   misho    27704:        USE_OPLINE
1.1       misho    27705: 
1.1.1.2   misho    27706:        zval *value, *ret;
1.1       misho    27707: 
1.1.1.2   misho    27708:        SAVE_OPLINE();
                   27709:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27710: 
                   27711:        if (i_zend_is_true(value)) {
                   27712:                if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   27713:                        Z_ADDREF_P(value);
                   27714:                        EX_T(opline->result.var).var.ptr = value;
                   27715:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    27716:                } else {
1.1.1.2   misho    27717:                        ALLOC_ZVAL(ret);
                   27718:                        INIT_PZVAL_COPY(ret, value);
                   27719:                        EX_T(opline->result.var).var.ptr = ret;
                   27720:                        EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   27721:                        if (!0) {
                   27722:                                zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   27723:                        }
1.1       misho    27724:                }
                   27725: 
1.1.1.2   misho    27726: #if DEBUG_ZEND>=2
                   27727:                printf("Conditional jmp to %d\n", opline->op2.opline_num);
1.1       misho    27728: #endif
1.1.1.2   misho    27729:                ZEND_VM_JMP(opline->op2.jmp_addr);
                   27730:        }
                   27731: 
                   27732:        CHECK_EXCEPTION();
1.1       misho    27733:        ZEND_VM_NEXT_OPCODE();
                   27734: }
                   27735: 
1.1.1.2   misho    27736: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    27737: {
1.1.1.2   misho    27738:        USE_OPLINE
1.1       misho    27739: 
1.1.1.2   misho    27740:        zval *value;
1.1       misho    27741: 
1.1.1.2   misho    27742:        SAVE_OPLINE();
                   27743:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    27744: 
1.1.1.2   misho    27745:        ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, value);
                   27746:        if (!0) {
                   27747:                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
1.1       misho    27748:        }
                   27749: 
1.1.1.2   misho    27750:        CHECK_EXCEPTION();
1.1       misho    27751:        ZEND_VM_NEXT_OPCODE();
                   27752: }
                   27753: 
1.1.1.2   misho    27754: static int ZEND_FASTCALL  ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    27755: {
1.1.1.2   misho    27756:        USE_OPLINE
1.1       misho    27757: 
1.1.1.2   misho    27758:        zval *value, *ret;
1.1       misho    27759: 
1.1.1.2   misho    27760:        SAVE_OPLINE();
                   27761:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27762: 
                   27763:        if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   27764:                Z_ADDREF_P(value);
                   27765:                EX_T(opline->result.var).var.ptr = value;
                   27766:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   27767:        } else {
                   27768:                ALLOC_ZVAL(ret);
                   27769:                INIT_PZVAL_COPY(ret, value);
                   27770:                EX_T(opline->result.var).var.ptr = ret;
                   27771:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
                   27772:                if (!0) {
                   27773:                        zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                   27774:                }
1.1       misho    27775:        }
                   27776: 
1.1.1.2   misho    27777:        CHECK_EXCEPTION();
1.1       misho    27778:        ZEND_VM_NEXT_OPCODE();
                   27779: }
                   27780: 
                   27781: static int ZEND_FASTCALL  ZEND_INSTANCEOF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27782: {
1.1.1.2   misho    27783:        USE_OPLINE
1.1       misho    27784: 
1.1.1.2   misho    27785:        zval *expr;
1.1       misho    27786:        zend_bool result;
                   27787: 
1.1.1.2   misho    27788:        SAVE_OPLINE();
                   27789:        expr = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   27790: 
1.1       misho    27791:        if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
1.1.1.2   misho    27792:                result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.var).class_entry TSRMLS_CC);
1.1       misho    27793:        } else {
                   27794:                result = 0;
                   27795:        }
1.1.1.2   misho    27796:        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, result);
1.1       misho    27797: 
1.1.1.2   misho    27798:        CHECK_EXCEPTION();
1.1       misho    27799:        ZEND_VM_NEXT_OPCODE();
                   27800: }
                   27801: 
                   27802: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27803: {
1.1.1.2   misho    27804:        USE_OPLINE
1.1       misho    27805: 
                   27806: 
1.1.1.2   misho    27807:        SAVE_OPLINE();
                   27808:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   27809:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27810:                opline->op2.zv TSRMLS_CC);
1.1       misho    27811: 
                   27812: 
1.1.1.2   misho    27813:        CHECK_EXCEPTION();
1.1       misho    27814:        ZEND_VM_NEXT_OPCODE();
                   27815: }
                   27816: 
                   27817: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27818: {
1.1.1.2   misho    27819:        USE_OPLINE
1.1       misho    27820: 
                   27821: 
1.1.1.2   misho    27822:        SAVE_OPLINE();
                   27823:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   27824:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27825:                opline->op2.zv TSRMLS_CC);
1.1       misho    27826: 
                   27827: 
1.1.1.2   misho    27828:        CHECK_EXCEPTION();
1.1       misho    27829:        ZEND_VM_NEXT_OPCODE();
                   27830: }
                   27831: 
                   27832: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27833: {
1.1.1.2   misho    27834:        USE_OPLINE
1.1       misho    27835: 
                   27836: 
1.1.1.2   misho    27837:        SAVE_OPLINE();
                   27838:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   27839:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27840:                opline->op2.zv TSRMLS_CC);
1.1       misho    27841: 
                   27842: 
1.1.1.2   misho    27843:        CHECK_EXCEPTION();
1.1       misho    27844:        ZEND_VM_NEXT_OPCODE();
                   27845: }
                   27846: 
                   27847: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27848: {
1.1.1.2   misho    27849:        USE_OPLINE
1.1       misho    27850: 
                   27851: 
1.1.1.2   misho    27852:        SAVE_OPLINE();
                   27853:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   27854:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27855:                opline->op2.zv TSRMLS_CC);
1.1       misho    27856: 
                   27857: 
1.1.1.2   misho    27858:        CHECK_EXCEPTION();
1.1       misho    27859:        ZEND_VM_NEXT_OPCODE();
                   27860: }
                   27861: 
                   27862: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27863: {
1.1.1.2   misho    27864:        USE_OPLINE
1.1       misho    27865: 
                   27866: 
1.1.1.2   misho    27867:        SAVE_OPLINE();
                   27868:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   27869:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27870:                opline->op2.zv TSRMLS_CC);
1.1       misho    27871: 
                   27872: 
1.1.1.2   misho    27873:        CHECK_EXCEPTION();
1.1       misho    27874:        ZEND_VM_NEXT_OPCODE();
                   27875: }
                   27876: 
                   27877: static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27878: {
1.1.1.2   misho    27879:        USE_OPLINE
1.1       misho    27880: 
                   27881: 
1.1.1.2   misho    27882:        SAVE_OPLINE();
                   27883:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   27884:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27885:                opline->op2.zv TSRMLS_CC);
1.1       misho    27886: 
                   27887: 
1.1.1.2   misho    27888:        CHECK_EXCEPTION();
1.1       misho    27889:        ZEND_VM_NEXT_OPCODE();
                   27890: }
                   27891: 
                   27892: static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27893: {
1.1.1.2   misho    27894:        USE_OPLINE
1.1       misho    27895: 
                   27896: 
1.1.1.2   misho    27897:        SAVE_OPLINE();
                   27898:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   27899:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27900:                opline->op2.zv TSRMLS_CC);
1.1       misho    27901: 
                   27902: 
1.1.1.2   misho    27903:        CHECK_EXCEPTION();
1.1       misho    27904:        ZEND_VM_NEXT_OPCODE();
                   27905: }
                   27906: 
                   27907: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27908: {
1.1.1.2   misho    27909:        USE_OPLINE
1.1       misho    27910: 
                   27911: 
1.1.1.2   misho    27912:        SAVE_OPLINE();
                   27913:        concat_function(&EX_T(opline->result.var).tmp_var,
                   27914:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27915:                opline->op2.zv TSRMLS_CC);
1.1       misho    27916: 
                   27917: 
1.1.1.2   misho    27918:        CHECK_EXCEPTION();
1.1       misho    27919:        ZEND_VM_NEXT_OPCODE();
                   27920: }
                   27921: 
                   27922: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27923: {
1.1.1.2   misho    27924:        USE_OPLINE
1.1       misho    27925: 
                   27926: 
1.1.1.2   misho    27927:        SAVE_OPLINE();
                   27928:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   27929:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27930:                opline->op2.zv TSRMLS_CC);
1.1       misho    27931: 
                   27932: 
1.1.1.2   misho    27933:        CHECK_EXCEPTION();
1.1       misho    27934:        ZEND_VM_NEXT_OPCODE();
                   27935: }
                   27936: 
                   27937: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27938: {
1.1.1.2   misho    27939:        USE_OPLINE
1.1       misho    27940: 
1.1.1.2   misho    27941:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    27942: 
1.1.1.2   misho    27943:        SAVE_OPLINE();
1.1       misho    27944:        is_identical_function(result,
1.1.1.2   misho    27945:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27946:                opline->op2.zv TSRMLS_CC);
1.1       misho    27947:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   27948: 
                   27949: 
1.1.1.2   misho    27950:        CHECK_EXCEPTION();
1.1       misho    27951:        ZEND_VM_NEXT_OPCODE();
                   27952: }
                   27953: 
                   27954: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27955: {
1.1.1.2   misho    27956:        USE_OPLINE
1.1       misho    27957: 
1.1.1.2   misho    27958:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    27959: 
1.1.1.2   misho    27960:        SAVE_OPLINE();
                   27961:        ZVAL_BOOL(result, fast_equal_function(result,
                   27962:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27963:                opline->op2.zv TSRMLS_CC));
1.1       misho    27964: 
                   27965: 
1.1.1.2   misho    27966:        CHECK_EXCEPTION();
1.1       misho    27967:        ZEND_VM_NEXT_OPCODE();
                   27968: }
                   27969: 
                   27970: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27971: {
1.1.1.2   misho    27972:        USE_OPLINE
1.1       misho    27973: 
1.1.1.2   misho    27974:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    27975: 
1.1.1.2   misho    27976:        SAVE_OPLINE();
                   27977:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   27978:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27979:                opline->op2.zv TSRMLS_CC));
1.1       misho    27980: 
                   27981: 
1.1.1.2   misho    27982:        CHECK_EXCEPTION();
1.1       misho    27983:        ZEND_VM_NEXT_OPCODE();
                   27984: }
                   27985: 
                   27986: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   27987: {
1.1.1.2   misho    27988:        USE_OPLINE
1.1       misho    27989: 
1.1.1.2   misho    27990:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    27991: 
1.1.1.2   misho    27992:        SAVE_OPLINE();
                   27993:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   27994:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   27995:                opline->op2.zv TSRMLS_CC));
1.1       misho    27996: 
                   27997: 
1.1.1.2   misho    27998:        CHECK_EXCEPTION();
1.1       misho    27999:        ZEND_VM_NEXT_OPCODE();
                   28000: }
                   28001: 
                   28002: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28003: {
1.1.1.2   misho    28004:        USE_OPLINE
1.1       misho    28005: 
1.1.1.2   misho    28006:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    28007: 
1.1.1.2   misho    28008:        SAVE_OPLINE();
                   28009:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   28010:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   28011:                opline->op2.zv TSRMLS_CC));
1.1       misho    28012: 
                   28013: 
1.1.1.2   misho    28014:        CHECK_EXCEPTION();
1.1       misho    28015:        ZEND_VM_NEXT_OPCODE();
                   28016: }
                   28017: 
                   28018: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28019: {
1.1.1.2   misho    28020:        USE_OPLINE
1.1       misho    28021: 
                   28022: 
1.1.1.2   misho    28023:        SAVE_OPLINE();
                   28024:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   28025:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   28026:                opline->op2.zv TSRMLS_CC);
1.1       misho    28027: 
                   28028: 
1.1.1.2   misho    28029:        CHECK_EXCEPTION();
1.1       misho    28030:        ZEND_VM_NEXT_OPCODE();
                   28031: }
                   28032: 
                   28033: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28034: {
1.1.1.2   misho    28035:        USE_OPLINE
1.1       misho    28036: 
                   28037: 
1.1.1.2   misho    28038:        SAVE_OPLINE();
                   28039:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   28040:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   28041:                opline->op2.zv TSRMLS_CC);
1.1       misho    28042: 
                   28043: 
1.1.1.2   misho    28044:        CHECK_EXCEPTION();
1.1       misho    28045:        ZEND_VM_NEXT_OPCODE();
                   28046: }
                   28047: 
                   28048: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28049: {
1.1.1.2   misho    28050:        USE_OPLINE
1.1       misho    28051: 
                   28052: 
1.1.1.2   misho    28053:        SAVE_OPLINE();
                   28054:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   28055:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   28056:                opline->op2.zv TSRMLS_CC);
1.1       misho    28057: 
                   28058: 
1.1.1.2   misho    28059:        CHECK_EXCEPTION();
1.1       misho    28060:        ZEND_VM_NEXT_OPCODE();
                   28061: }
                   28062: 
                   28063: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28064: {
1.1.1.2   misho    28065:        USE_OPLINE
1.1       misho    28066: 
                   28067: 
1.1.1.2   misho    28068:        SAVE_OPLINE();
                   28069:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   28070:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   28071:                opline->op2.zv TSRMLS_CC);
1.1       misho    28072: 
                   28073: 
1.1.1.2   misho    28074:        CHECK_EXCEPTION();
1.1       misho    28075:        ZEND_VM_NEXT_OPCODE();
                   28076: }
                   28077: 
                   28078: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   28079: {
1.1.1.2   misho    28080:        USE_OPLINE
1.1       misho    28081:        zend_free_op free_op_data1;
1.1.1.2   misho    28082:        zval **object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28083:        zval *object;
1.1.1.2   misho    28084:        zval *property = opline->op2.zv;
                   28085:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    28086:        int have_get_ptr = 0;
                   28087: 
1.1.1.2   misho    28088:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    28089:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   28090:        }
                   28091: 
                   28092:        make_real_object(object_ptr TSRMLS_CC);
                   28093:        object = *object_ptr;
                   28094: 
1.1.1.2   misho    28095:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    28096:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   28097: 
                   28098:                FREE_OP(free_op_data1);
                   28099: 
1.1.1.2   misho    28100:                if (RETURN_VALUE_USED(opline)) {
                   28101:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   28102:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   28103:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    28104:                }
                   28105:        } else {
                   28106:                /* here we are sure we are dealing with an object */
                   28107:                if (0) {
                   28108:                        MAKE_REAL_ZVAL_PTR(property);
                   28109:                }
                   28110: 
                   28111:                /* here property is a string */
                   28112:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   28113:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    28114:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28115:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   28116:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   28117: 
                   28118:                                have_get_ptr = 1;
                   28119:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    28120:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    28121:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    28122:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   28123:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    28124:                                }
                   28125:                        }
                   28126:                }
                   28127: 
                   28128:                if (!have_get_ptr) {
                   28129:                        zval *z = NULL;
                   28130: 
                   28131:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   28132:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    28133:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28134:                                }
                   28135:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   28136:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   28137:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   28138:                                }
                   28139:                        }
                   28140:                        if (z) {
                   28141:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   28142:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   28143: 
                   28144:                                        if (Z_REFCOUNT_P(z) == 0) {
                   28145:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   28146:                                                zval_dtor(z);
                   28147:                                                FREE_ZVAL(z);
                   28148:                                        }
                   28149:                                        z = value;
                   28150:                                }
                   28151:                                Z_ADDREF_P(z);
                   28152:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   28153:                                binary_op(z, z, value TSRMLS_CC);
                   28154:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    28155:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28156:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   28157:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   28158:                                }
1.1.1.2   misho    28159:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    28160:                                        PZVAL_LOCK(z);
1.1.1.2   misho    28161:                                        EX_T(opline->result.var).var.ptr = z;
                   28162:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    28163:                                }
                   28164:                                zval_ptr_dtor(&z);
                   28165:                        } else {
                   28166:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    28167:                                if (RETURN_VALUE_USED(opline)) {
                   28168:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   28169:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   28170:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    28171:                                }
                   28172:                        }
                   28173:                }
                   28174: 
                   28175:                if (0) {
                   28176:                        zval_ptr_dtor(&property);
                   28177:                } else {
                   28178: 
                   28179:                }
                   28180:                FREE_OP(free_op_data1);
                   28181:        }
                   28182: 
                   28183:        /* assign_obj has two opcodes! */
1.1.1.2   misho    28184:        CHECK_EXCEPTION();
1.1       misho    28185:        ZEND_VM_INC_OPCODE();
                   28186:        ZEND_VM_NEXT_OPCODE();
                   28187: }
                   28188: 
                   28189: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   28190: {
1.1.1.2   misho    28191:        USE_OPLINE
1.1       misho    28192:        zend_free_op free_op_data2, free_op_data1;
                   28193:        zval **var_ptr;
                   28194:        zval *value;
                   28195: 
1.1.1.2   misho    28196:        SAVE_OPLINE();
1.1       misho    28197:        switch (opline->extended_value) {
                   28198:                case ZEND_ASSIGN_OBJ:
                   28199:                        return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28200:                        break;
                   28201:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    28202:                                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28203: 
1.1.1.2   misho    28204:                                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28205:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    28206:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    28207:                                        if (IS_CV == IS_VAR && !0) {
                   28208:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   28209:                                        }
                   28210:                                        return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28211:                                } else {
1.1.1.2   misho    28212:                                        zval *dim = opline->op2.zv;
1.1       misho    28213: 
1.1.1.2   misho    28214:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
                   28215:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   28216:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    28217:                                }
                   28218:                        }
                   28219:                        break;
                   28220:                default:
1.1.1.2   misho    28221:                        value = opline->op2.zv;
                   28222:                        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28223:                        /* do nothing */
                   28224:                        break;
                   28225:        }
                   28226: 
1.1.1.2   misho    28227:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    28228:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   28229:        }
                   28230: 
1.1.1.2   misho    28231:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   28232:                if (RETURN_VALUE_USED(opline)) {
                   28233:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   28234:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    28235:                }
                   28236: 
                   28237: 
1.1.1.2   misho    28238:                CHECK_EXCEPTION();
                   28239:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   28240:                        ZEND_VM_INC_OPCODE();
                   28241:                }
1.1       misho    28242:                ZEND_VM_NEXT_OPCODE();
                   28243:        }
                   28244: 
                   28245:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   28246: 
1.1.1.2   misho    28247:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   28248:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    28249:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   28250:                /* proxy object */
                   28251:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   28252:                Z_ADDREF_P(objval);
                   28253:                binary_op(objval, objval, value TSRMLS_CC);
                   28254:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   28255:                zval_ptr_dtor(&objval);
                   28256:        } else {
                   28257:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   28258:        }
                   28259: 
1.1.1.2   misho    28260:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    28261:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    28262:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    28263:        }
                   28264: 
                   28265:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   28266:                FREE_OP(free_op_data1);
                   28267:                FREE_OP_VAR_PTR(free_op_data2);
                   28268: 
1.1.1.2   misho    28269:                CHECK_EXCEPTION();
                   28270:                ZEND_VM_INC_OPCODE();
                   28271:        } else {
                   28272: 
                   28273:                CHECK_EXCEPTION();
                   28274:        }
1.1       misho    28275:        ZEND_VM_NEXT_OPCODE();
                   28276: }
                   28277: 
                   28278: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28279: {
                   28280:        return zend_binary_assign_op_helper_SPEC_CV_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28281: }
                   28282: 
                   28283: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28284: {
                   28285:        return zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28286: }
                   28287: 
                   28288: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28289: {
                   28290:        return zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28291: }
                   28292: 
                   28293: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28294: {
                   28295:        return zend_binary_assign_op_helper_SPEC_CV_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28296: }
                   28297: 
                   28298: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28299: {
                   28300:        return zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28301: }
                   28302: 
                   28303: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28304: {
                   28305:        return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28306: }
                   28307: 
                   28308: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28309: {
                   28310:        return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28311: }
                   28312: 
                   28313: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28314: {
                   28315:        return zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28316: }
                   28317: 
                   28318: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28319: {
                   28320:        return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28321: }
                   28322: 
                   28323: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28324: {
                   28325:        return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28326: }
                   28327: 
                   28328: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28329: {
                   28330:        return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28331: }
                   28332: 
                   28333: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   28334: {
1.1.1.2   misho    28335:        USE_OPLINE
1.1       misho    28336: 
1.1.1.2   misho    28337:        zval **object_ptr;
1.1       misho    28338:        zval *object;
1.1.1.2   misho    28339:        zval *property;
                   28340:        zval **retval;
1.1       misho    28341:        int have_get_ptr = 0;
                   28342: 
1.1.1.2   misho    28343:        SAVE_OPLINE();
                   28344:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28345:        property = opline->op2.zv;
                   28346:        retval = &EX_T(opline->result.var).var.ptr;
                   28347: 
                   28348:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    28349:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   28350:        }
                   28351: 
                   28352:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   28353:        object = *object_ptr;
                   28354: 
1.1.1.2   misho    28355:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    28356:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   28357: 
1.1.1.2   misho    28358:                if (RETURN_VALUE_USED(opline)) {
                   28359:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   28360:                        *retval = &EG(uninitialized_zval);
1.1       misho    28361:                }
                   28362: 
1.1.1.2   misho    28363:                CHECK_EXCEPTION();
1.1       misho    28364:                ZEND_VM_NEXT_OPCODE();
                   28365:        }
                   28366: 
                   28367:        /* here we are sure we are dealing with an object */
                   28368: 
                   28369:        if (0) {
                   28370:                MAKE_REAL_ZVAL_PTR(property);
                   28371:        }
                   28372: 
                   28373:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    28374:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28375:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   28376:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   28377: 
                   28378:                        have_get_ptr = 1;
                   28379:                        incdec_op(*zptr);
1.1.1.2   misho    28380:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    28381:                                *retval = *zptr;
                   28382:                                PZVAL_LOCK(*retval);
                   28383:                        }
                   28384:                }
                   28385:        }
                   28386: 
                   28387:        if (!have_get_ptr) {
                   28388:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    28389:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28390: 
1.1.1.2   misho    28391:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    28392:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   28393: 
                   28394:                                if (Z_REFCOUNT_P(z) == 0) {
                   28395:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   28396:                                        zval_dtor(z);
                   28397:                                        FREE_ZVAL(z);
                   28398:                                }
                   28399:                                z = value;
                   28400:                        }
                   28401:                        Z_ADDREF_P(z);
                   28402:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   28403:                        incdec_op(z);
                   28404:                        *retval = z;
1.1.1.2   misho    28405:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   28406:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    28407:                        zval_ptr_dtor(&z);
                   28408:                } else {
                   28409:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    28410:                        if (RETURN_VALUE_USED(opline)) {
                   28411:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   28412:                                *retval = &EG(uninitialized_zval);
1.1       misho    28413:                        }
                   28414:                }
                   28415:        }
                   28416: 
                   28417:        if (0) {
                   28418:                zval_ptr_dtor(&property);
                   28419:        } else {
                   28420: 
                   28421:        }
                   28422: 
1.1.1.2   misho    28423:        CHECK_EXCEPTION();
1.1       misho    28424:        ZEND_VM_NEXT_OPCODE();
                   28425: }
                   28426: 
                   28427: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28428: {
                   28429:        return zend_pre_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28430: }
                   28431: 
                   28432: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28433: {
                   28434:        return zend_pre_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28435: }
                   28436: 
                   28437: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   28438: {
1.1.1.2   misho    28439:        USE_OPLINE
1.1       misho    28440: 
1.1.1.2   misho    28441:        zval **object_ptr;
1.1       misho    28442:        zval *object;
1.1.1.2   misho    28443:        zval *property;
                   28444:        zval *retval;
1.1       misho    28445:        int have_get_ptr = 0;
                   28446: 
1.1.1.2   misho    28447:        SAVE_OPLINE();
                   28448:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28449:        property = opline->op2.zv;
                   28450:        retval = &EX_T(opline->result.var).tmp_var;
                   28451: 
                   28452:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    28453:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   28454:        }
                   28455: 
                   28456:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   28457:        object = *object_ptr;
                   28458: 
1.1.1.2   misho    28459:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    28460:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   28461: 
1.1.1.2   misho    28462:                ZVAL_NULL(retval);
1.1       misho    28463: 
1.1.1.2   misho    28464:                CHECK_EXCEPTION();
1.1       misho    28465:                ZEND_VM_NEXT_OPCODE();
                   28466:        }
                   28467: 
                   28468:        /* here we are sure we are dealing with an object */
                   28469: 
                   28470:        if (0) {
                   28471:                MAKE_REAL_ZVAL_PTR(property);
                   28472:        }
                   28473: 
                   28474:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    28475:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28476:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   28477:                        have_get_ptr = 1;
                   28478:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   28479: 
1.1.1.2   misho    28480:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    28481:                        zendi_zval_copy_ctor(*retval);
                   28482: 
                   28483:                        incdec_op(*zptr);
                   28484: 
                   28485:                }
                   28486:        }
                   28487: 
                   28488:        if (!have_get_ptr) {
                   28489:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    28490:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28491:                        zval *z_copy;
                   28492: 
1.1.1.2   misho    28493:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    28494:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   28495: 
                   28496:                                if (Z_REFCOUNT_P(z) == 0) {
                   28497:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   28498:                                        zval_dtor(z);
                   28499:                                        FREE_ZVAL(z);
                   28500:                                }
                   28501:                                z = value;
                   28502:                        }
1.1.1.2   misho    28503:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    28504:                        zendi_zval_copy_ctor(*retval);
                   28505:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    28506:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    28507:                        zendi_zval_copy_ctor(*z_copy);
                   28508:                        incdec_op(z_copy);
                   28509:                        Z_ADDREF_P(z);
1.1.1.2   misho    28510:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28511:                        zval_ptr_dtor(&z_copy);
                   28512:                        zval_ptr_dtor(&z);
                   28513:                } else {
                   28514:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    28515:                        ZVAL_NULL(retval);
1.1       misho    28516:                }
                   28517:        }
                   28518: 
                   28519:        if (0) {
                   28520:                zval_ptr_dtor(&property);
                   28521:        } else {
                   28522: 
                   28523:        }
                   28524: 
1.1.1.2   misho    28525:        CHECK_EXCEPTION();
1.1       misho    28526:        ZEND_VM_NEXT_OPCODE();
                   28527: }
                   28528: 
                   28529: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28530: {
                   28531:        return zend_post_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28532: }
                   28533: 
                   28534: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28535: {
                   28536:        return zend_post_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28537: }
                   28538: 
1.1.1.2   misho    28539: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
                   28540: {
                   28541:        USE_OPLINE
                   28542:        zend_free_op free_op1;
                   28543:        zval *varname;
                   28544:        zval **retval;
                   28545:        zval tmp_varname;
                   28546:        HashTable *target_symbol_table;
                   28547:        ulong hash_value;
                   28548: 
                   28549:        SAVE_OPLINE();
                   28550:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28551: 
                   28552:        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   28553:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   28554:                zval_copy_ctor(&tmp_varname);
                   28555:                Z_SET_REFCOUNT(tmp_varname, 1);
                   28556:                Z_UNSET_ISREF(tmp_varname);
                   28557:                convert_to_string(&tmp_varname);
                   28558:                varname = &tmp_varname;
                   28559:        }
                   28560: 
                   28561:        if (IS_CONST != IS_UNUSED) {
                   28562:                zend_class_entry *ce;
                   28563: 
                   28564:                if (IS_CONST == IS_CONST) {
                   28565:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   28566:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   28567:                        } else {
                   28568:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   28569:                                if (UNEXPECTED(ce == NULL)) {
                   28570:                                        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   28571:                                                zval_dtor(&tmp_varname);
                   28572:                                        }
                   28573: 
                   28574:                                        CHECK_EXCEPTION();
                   28575:                                        ZEND_VM_NEXT_OPCODE();
                   28576:                                }
                   28577:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   28578:                        }
                   28579:                } else {
                   28580:                        ce = EX_T(opline->op2.var).class_entry;
                   28581:                }
                   28582:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   28583: 
                   28584:        } else {
                   28585:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   28586: /*
                   28587:                if (!target_symbol_table) {
                   28588:                        CHECK_EXCEPTION();
                   28589:                        ZEND_VM_NEXT_OPCODE();
                   28590:                }
                   28591: */
                   28592:                if (IS_CV == IS_CONST) {
                   28593:                        hash_value = Z_HASH_P(varname);
                   28594:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   28595:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   28596:                } else {
                   28597:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   28598:                }
                   28599: 
                   28600:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   28601:                        switch (type) {
                   28602:                                case BP_VAR_R:
                   28603:                                case BP_VAR_UNSET:
                   28604:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   28605:                                        /* break missing intentionally */
                   28606:                                case BP_VAR_IS:
                   28607:                                        retval = &EG(uninitialized_zval_ptr);
                   28608:                                        break;
                   28609:                                case BP_VAR_RW:
                   28610:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   28611:                                        /* break missing intentionally */
                   28612:                                case BP_VAR_W:
                   28613:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   28614:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   28615:                                        break;
                   28616:                                EMPTY_SWITCH_DEFAULT_CASE()
                   28617:                        }
                   28618:                }
                   28619:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   28620:                        case ZEND_FETCH_GLOBAL:
                   28621:                                if (IS_CV != IS_TMP_VAR) {
                   28622: 
                   28623:                                }
                   28624:                                break;
                   28625:                        case ZEND_FETCH_LOCAL:
                   28626: 
                   28627:                                break;
                   28628:                        case ZEND_FETCH_STATIC:
                   28629:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   28630:                                break;
                   28631:                        case ZEND_FETCH_GLOBAL_LOCK:
                   28632:                                if (IS_CV == IS_VAR && !free_op1.var) {
                   28633:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   28634:                                }
                   28635:                                break;
                   28636:                }
                   28637:        }
                   28638: 
                   28639: 
                   28640:        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   28641:                zval_dtor(&tmp_varname);
                   28642:        }
                   28643:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   28644:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   28645:        }
                   28646:        PZVAL_LOCK(*retval);
                   28647:        switch (type) {
                   28648:                case BP_VAR_R:
                   28649:                case BP_VAR_IS:
                   28650:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   28651:                        break;
                   28652:                case BP_VAR_UNSET: {
                   28653:                        zend_free_op free_res;
                   28654: 
                   28655:                        PZVAL_UNLOCK(*retval, &free_res);
                   28656:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   28657:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   28658:                        }
                   28659:                        PZVAL_LOCK(*retval);
                   28660:                        FREE_OP_VAR_PTR(free_res);
                   28661:                }
                   28662:                /* break missing intentionally */
                   28663:                default:
                   28664:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   28665:                        break;
                   28666:        }
                   28667:        CHECK_EXCEPTION();
                   28668:        ZEND_VM_NEXT_OPCODE();
                   28669: }
                   28670: 
                   28671: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28672: {
                   28673:        return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28674: }
                   28675: 
                   28676: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28677: {
                   28678:        return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28679: }
                   28680: 
                   28681: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28682: {
                   28683:        return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28684: }
                   28685: 
                   28686: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28687: {
                   28688:        USE_OPLINE
                   28689: 
                   28690:        return zend_fetch_var_address_helper_SPEC_CV_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28691: }
                   28692: 
                   28693: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28694: {
                   28695:        return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28696: }
                   28697: 
                   28698: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28699: {
                   28700:        return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   28701: }
                   28702: 
1.1       misho    28703: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28704: {
1.1.1.2   misho    28705:        USE_OPLINE
1.1       misho    28706: 
1.1.1.5 ! misho    28707:        zval *container;
1.1       misho    28708: 
1.1.1.2   misho    28709:        SAVE_OPLINE();
                   28710: 
1.1.1.5 ! misho    28711:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          28712:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    28713:        }
1.1.1.5 ! misho    28714:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    28715:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
1.1       misho    28716: 
                   28717: 
1.1.1.2   misho    28718:        CHECK_EXCEPTION();
1.1       misho    28719:        ZEND_VM_NEXT_OPCODE();
                   28720: }
                   28721: 
                   28722: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28723: {
1.1.1.2   misho    28724:        USE_OPLINE
1.1       misho    28725:        zend_free_op free_op1;
1.1.1.2   misho    28726:        zval **container;
1.1       misho    28727: 
1.1.1.2   misho    28728:        SAVE_OPLINE();
                   28729:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28730: 
                   28731:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28732:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   28733:        }
1.1.1.2   misho    28734:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
1.1       misho    28735: 
1.1.1.2   misho    28736:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28737:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28738:        }
                   28739: 
                   28740:        /* We are going to assign the result by reference */
1.1.1.2   misho    28741:        if (UNEXPECTED(opline->extended_value != 0)) {
                   28742:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   28743: 
                   28744:                if (retval_ptr) {
                   28745:                        Z_DELREF_PP(retval_ptr);
                   28746:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   28747:                        Z_ADDREF_PP(retval_ptr);
                   28748:                }
1.1       misho    28749:        }
                   28750: 
1.1.1.2   misho    28751:        CHECK_EXCEPTION();
1.1       misho    28752:        ZEND_VM_NEXT_OPCODE();
                   28753: }
                   28754: 
                   28755: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28756: {
1.1.1.2   misho    28757:        USE_OPLINE
1.1       misho    28758:        zend_free_op free_op1;
1.1.1.2   misho    28759:        zval **container;
                   28760: 
                   28761:        SAVE_OPLINE();
                   28762:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28763: 
1.1.1.2   misho    28764:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28765:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   28766:        }
1.1.1.2   misho    28767:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_RW TSRMLS_CC);
1.1       misho    28768: 
1.1.1.2   misho    28769:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28770:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28771:        }
                   28772: 
1.1.1.2   misho    28773:        CHECK_EXCEPTION();
1.1       misho    28774:        ZEND_VM_NEXT_OPCODE();
                   28775: }
                   28776: 
                   28777: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28778: {
1.1.1.2   misho    28779:        USE_OPLINE
1.1       misho    28780: 
1.1.1.5 ! misho    28781:        zval *container;
1.1       misho    28782: 
1.1.1.2   misho    28783:        SAVE_OPLINE();
1.1.1.5 ! misho    28784:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    28785:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_IS TSRMLS_CC);
1.1       misho    28786: 
                   28787: 
1.1.1.2   misho    28788:        CHECK_EXCEPTION();
1.1       misho    28789:        ZEND_VM_NEXT_OPCODE();
                   28790: }
                   28791: 
                   28792: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28793: {
1.1.1.2   misho    28794:        USE_OPLINE
1.1       misho    28795:        zend_free_op free_op1;
                   28796: 
1.1.1.2   misho    28797:        SAVE_OPLINE();
                   28798: 
                   28799:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    28800:                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
        !          28801: 
1.1.1.2   misho    28802:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28803:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   28804:                }
1.1.1.2   misho    28805:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
                   28806:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28807:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28808:                }
1.1.1.5 ! misho    28809: 
        !          28810: 
1.1       misho    28811:        } else {
1.1.1.5 ! misho    28812:                zval *container;
        !          28813: 
1.1       misho    28814:                if (IS_CONST == IS_UNUSED) {
                   28815:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   28816:                }
1.1.1.5 ! misho    28817:                container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    28818:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
1.1       misho    28819: 
                   28820: 
1.1.1.5 ! misho    28821:        }
1.1.1.2   misho    28822:        CHECK_EXCEPTION();
1.1       misho    28823:        ZEND_VM_NEXT_OPCODE();
                   28824: }
                   28825: 
                   28826: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28827: {
1.1.1.2   misho    28828:        USE_OPLINE
1.1       misho    28829:        zend_free_op free_op1;
1.1.1.2   misho    28830:        zval **container;
                   28831: 
                   28832:        SAVE_OPLINE();
                   28833:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28834: 
                   28835:        if (IS_CV == IS_CV) {
                   28836:                if (container != &EG(uninitialized_zval_ptr)) {
                   28837:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   28838:                }
                   28839:        }
1.1.1.2   misho    28840:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28841:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   28842:        }
1.1.1.2   misho    28843:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    28844: 
1.1.1.2   misho    28845:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28846:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28847:        }
                   28848: 
1.1.1.2   misho    28849:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    28850:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   28851:        } else {
                   28852:                zend_free_op free_res;
1.1.1.2   misho    28853:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    28854: 
1.1.1.2   misho    28855:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   28856:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   28857:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    28858:                }
1.1.1.2   misho    28859:                PZVAL_LOCK(*retval_ptr);
1.1       misho    28860:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    28861:                CHECK_EXCEPTION();
                   28862:                ZEND_VM_NEXT_OPCODE();
1.1       misho    28863:        }
                   28864: }
                   28865: 
1.1.1.2   misho    28866: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_CONST(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    28867: {
1.1.1.2   misho    28868:        USE_OPLINE
1.1       misho    28869: 
1.1.1.2   misho    28870:        zval *container;
1.1       misho    28871: 
1.1.1.2   misho    28872:        zval *offset;
1.1       misho    28873: 
1.1.1.2   misho    28874:        SAVE_OPLINE();
                   28875:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28876:        offset  = opline->op2.zv;
                   28877: 
                   28878:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   28879:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   28880:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   28881:                PZVAL_LOCK(&EG(uninitialized_zval));
                   28882:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    28883: 
                   28884:        } else {
                   28885:                zval *retval;
                   28886: 
                   28887:                if (0) {
                   28888:                        MAKE_REAL_ZVAL_PTR(offset);
                   28889:                }
                   28890: 
                   28891:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    28892:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    28893: 
1.1.1.2   misho    28894:                PZVAL_LOCK(retval);
                   28895:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    28896: 
                   28897:                if (0) {
                   28898:                        zval_ptr_dtor(&offset);
                   28899:                } else {
                   28900: 
                   28901:                }
                   28902:        }
                   28903: 
1.1.1.2   misho    28904:        CHECK_EXCEPTION();
1.1       misho    28905:        ZEND_VM_NEXT_OPCODE();
                   28906: }
                   28907: 
                   28908: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28909: {
1.1.1.2   misho    28910:        return zend_fetch_property_address_read_helper_SPEC_CV_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    28911: }
                   28912: 
                   28913: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28914: {
1.1.1.2   misho    28915:        USE_OPLINE
1.1       misho    28916:        zend_free_op free_op1;
1.1.1.2   misho    28917:        zval *property;
1.1       misho    28918:        zval **container;
                   28919: 
1.1.1.2   misho    28920:        SAVE_OPLINE();
                   28921:        property = opline->op2.zv;
                   28922: 
1.1       misho    28923:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    28924:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   28925:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    28926:        }
                   28927: 
                   28928:        if (0) {
                   28929:                MAKE_REAL_ZVAL_PTR(property);
                   28930:        }
1.1.1.2   misho    28931:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   28932:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28933:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   28934:        }
1.1.1.2   misho    28935: 
                   28936:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    28937:        if (0) {
                   28938:                zval_ptr_dtor(&property);
                   28939:        } else {
                   28940: 
                   28941:        }
1.1.1.2   misho    28942:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28943:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28944:        }
                   28945: 
                   28946:        /* We are going to assign the result by reference */
                   28947:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    28948:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   28949: 
                   28950:                Z_DELREF_PP(retval_ptr);
                   28951:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   28952:                Z_ADDREF_PP(retval_ptr);
                   28953:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   28954:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    28955:        }
                   28956: 
1.1.1.2   misho    28957:        CHECK_EXCEPTION();
1.1       misho    28958:        ZEND_VM_NEXT_OPCODE();
                   28959: }
                   28960: 
                   28961: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28962: {
1.1.1.2   misho    28963:        USE_OPLINE
1.1       misho    28964:        zend_free_op free_op1;
1.1.1.2   misho    28965:        zval *property;
                   28966:        zval **container;
                   28967: 
                   28968:        SAVE_OPLINE();
                   28969:        property = opline->op2.zv;
                   28970:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    28971: 
                   28972:        if (0) {
                   28973:                MAKE_REAL_ZVAL_PTR(property);
                   28974:        }
1.1.1.2   misho    28975:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    28976:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   28977:        }
1.1.1.2   misho    28978:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    28979:        if (0) {
                   28980:                zval_ptr_dtor(&property);
                   28981:        } else {
                   28982: 
                   28983:        }
1.1.1.2   misho    28984:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   28985:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    28986:        }
                   28987: 
1.1.1.2   misho    28988:        CHECK_EXCEPTION();
1.1       misho    28989:        ZEND_VM_NEXT_OPCODE();
                   28990: }
                   28991: 
                   28992: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   28993: {
1.1.1.2   misho    28994:        USE_OPLINE
                   28995: 
                   28996:        zval *container;
                   28997: 
                   28998:        zval *offset;
                   28999: 
                   29000:        SAVE_OPLINE();
                   29001:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29002:        offset  = opline->op2.zv;
                   29003: 
                   29004:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   29005:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   29006:                PZVAL_LOCK(&EG(uninitialized_zval));
                   29007:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   29008: 
                   29009:        } else {
                   29010:                zval *retval;
                   29011: 
                   29012:                if (0) {
                   29013:                        MAKE_REAL_ZVAL_PTR(offset);
                   29014:                }
                   29015: 
                   29016:                /* here we are sure we are dealing with an object */
                   29017:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   29018: 
                   29019:                PZVAL_LOCK(retval);
                   29020:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   29021: 
                   29022:                if (0) {
                   29023:                        zval_ptr_dtor(&offset);
                   29024:                } else {
                   29025: 
                   29026:                }
                   29027:        }
                   29028: 
                   29029:        CHECK_EXCEPTION();
                   29030:        ZEND_VM_NEXT_OPCODE();
1.1       misho    29031: }
                   29032: 
                   29033: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29034: {
1.1.1.2   misho    29035:        USE_OPLINE
1.1       misho    29036: 
1.1.1.2   misho    29037:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    29038:                /* Behave like FETCH_OBJ_W */
                   29039:                zend_free_op free_op1;
1.1.1.2   misho    29040:                zval *property;
                   29041:                zval **container;
                   29042: 
                   29043:                SAVE_OPLINE();
                   29044:                property = opline->op2.zv;
                   29045:                container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    29046: 
                   29047:                if (0) {
                   29048:                        MAKE_REAL_ZVAL_PTR(property);
                   29049:                }
1.1.1.2   misho    29050:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    29051:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   29052:                }
1.1.1.2   misho    29053:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    29054:                if (0) {
                   29055:                        zval_ptr_dtor(&property);
                   29056:                } else {
                   29057: 
                   29058:                }
1.1.1.2   misho    29059:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   29060:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    29061:                }
                   29062: 
1.1.1.2   misho    29063:                CHECK_EXCEPTION();
1.1       misho    29064:                ZEND_VM_NEXT_OPCODE();
                   29065:        } else {
1.1.1.2   misho    29066:                return zend_fetch_property_address_read_helper_SPEC_CV_CONST(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    29067:        }
                   29068: }
                   29069: 
                   29070: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29071: {
1.1.1.2   misho    29072:        USE_OPLINE
1.1       misho    29073:        zend_free_op free_op1, free_res;
1.1.1.2   misho    29074:        zval **container;
                   29075:        zval *property;
                   29076: 
                   29077:        SAVE_OPLINE();
                   29078:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29079:        property = opline->op2.zv;
1.1       misho    29080: 
                   29081:        if (IS_CV == IS_CV) {
                   29082:                if (container != &EG(uninitialized_zval_ptr)) {
                   29083:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   29084:                }
                   29085:        }
                   29086:        if (0) {
                   29087:                MAKE_REAL_ZVAL_PTR(property);
                   29088:        }
1.1.1.2   misho    29089:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    29090:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   29091:        }
1.1.1.2   misho    29092:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    29093:        if (0) {
                   29094:                zval_ptr_dtor(&property);
                   29095:        } else {
                   29096: 
                   29097:        }
1.1.1.2   misho    29098:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   29099:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    29100:        }
                   29101: 
1.1.1.2   misho    29102:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   29103:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   29104:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    29105:        }
1.1.1.2   misho    29106:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    29107:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    29108:        CHECK_EXCEPTION();
1.1       misho    29109:        ZEND_VM_NEXT_OPCODE();
                   29110: }
                   29111: 
                   29112: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29113: {
1.1.1.2   misho    29114:        USE_OPLINE
                   29115: 
                   29116:        zval **object_ptr;
                   29117:        zval *property_name;
1.1       misho    29118: 
1.1.1.2   misho    29119:        SAVE_OPLINE();
                   29120:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29121:        property_name = opline->op2.zv;
1.1       misho    29122: 
                   29123:        if (0) {
                   29124:                MAKE_REAL_ZVAL_PTR(property_name);
                   29125:        }
1.1.1.2   misho    29126:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    29127:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   29128:        }
1.1.1.2   misho    29129:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    29130:        if (0) {
                   29131:                zval_ptr_dtor(&property_name);
                   29132:        } else {
                   29133: 
                   29134:        }
                   29135: 
                   29136:        /* assign_obj has two opcodes! */
1.1.1.2   misho    29137:        CHECK_EXCEPTION();
1.1       misho    29138:        ZEND_VM_INC_OPCODE();
                   29139:        ZEND_VM_NEXT_OPCODE();
                   29140: }
                   29141: 
                   29142: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29143: {
1.1.1.2   misho    29144:        USE_OPLINE
1.1       misho    29145: 
1.1.1.2   misho    29146:        zval **object_ptr;
1.1       misho    29147: 
1.1.1.2   misho    29148:        SAVE_OPLINE();
                   29149:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29150: 
                   29151:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    29152:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   29153:        }
                   29154:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   29155: 
1.1.1.2   misho    29156:                zval *property_name = opline->op2.zv;
1.1       misho    29157: 
                   29158:                if (0) {
                   29159:                        MAKE_REAL_ZVAL_PTR(property_name);
                   29160:                }
1.1.1.2   misho    29161:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    29162:                if (0) {
                   29163:                        zval_ptr_dtor(&property_name);
                   29164:                } else {
                   29165: 
                   29166:                }
                   29167:        } else {
                   29168:                zend_free_op free_op_data1, free_op_data2;
                   29169:                zval *value;
1.1.1.2   misho    29170:                zval *dim = opline->op2.zv;
1.1       misho    29171:                zval **variable_ptr_ptr;
                   29172: 
1.1.1.2   misho    29173:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_CONST, BP_VAR_W TSRMLS_CC);
                   29174: 
                   29175:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   29176:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   29177:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   29178:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   29179:                                if (RETURN_VALUE_USED(opline)) {
                   29180:                                        zval *retval;
1.1       misho    29181: 
1.1.1.2   misho    29182:                                        ALLOC_ZVAL(retval);
                   29183:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   29184:                                        INIT_PZVAL(retval);
                   29185:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   29186:                                }
                   29187:                        } else if (RETURN_VALUE_USED(opline)) {
                   29188:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   29189:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   29190:                        }
                   29191:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   29192:                        if (IS_TMP_FREE(free_op_data1)) {
                   29193:                                zval_dtor(value);
                   29194:                        }
                   29195:                        if (RETURN_VALUE_USED(opline)) {
                   29196:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   29197:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   29198:                        }
                   29199:                } else {
                   29200:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   29201:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29202:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   29203:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29204:                        } else {
                   29205:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29206:                        }
                   29207:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    29208:                                PZVAL_LOCK(value);
1.1.1.2   misho    29209:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    29210:                        }
                   29211:                }
                   29212:                FREE_OP_VAR_PTR(free_op_data2);
                   29213:                FREE_OP_IF_VAR(free_op_data1);
                   29214:        }
                   29215: 
                   29216:        /* assign_dim has two opcodes! */
1.1.1.2   misho    29217:        CHECK_EXCEPTION();
1.1       misho    29218:        ZEND_VM_INC_OPCODE();
                   29219:        ZEND_VM_NEXT_OPCODE();
                   29220: }
                   29221: 
                   29222: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29223: {
1.1.1.2   misho    29224:        USE_OPLINE
1.1       misho    29225: 
1.1.1.2   misho    29226:        zval *value;
                   29227:        zval **variable_ptr_ptr;
1.1       misho    29228: 
1.1.1.2   misho    29229:        SAVE_OPLINE();
                   29230:        value = opline->op2.zv;
                   29231:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29232: 
                   29233:        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   29234:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_CONST TSRMLS_CC)) {
                   29235:                        if (RETURN_VALUE_USED(opline)) {
                   29236:                                zval *retval;
                   29237: 
                   29238:                                ALLOC_ZVAL(retval);
                   29239:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   29240:                                INIT_PZVAL(retval);
                   29241:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   29242:                        }
                   29243:                } else if (RETURN_VALUE_USED(opline)) {
                   29244:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   29245:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   29246:                }
                   29247:        } else if (IS_CV == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   29248:                if (0) {
                   29249:                        zval_dtor(value);
                   29250:                }
                   29251:                if (RETURN_VALUE_USED(opline)) {
                   29252:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   29253:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   29254:                }
                   29255:        } else {
                   29256:                if (IS_CONST == IS_TMP_VAR) {
                   29257:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29258:                } else if (IS_CONST == IS_CONST) {
                   29259:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29260:                } else {
                   29261:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   29262:                }
                   29263:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    29264:                        PZVAL_LOCK(value);
1.1.1.2   misho    29265:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    29266:                }
                   29267:        }
                   29268: 
                   29269:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   29270: 
1.1.1.2   misho    29271:        CHECK_EXCEPTION();
1.1       misho    29272:        ZEND_VM_NEXT_OPCODE();
                   29273: }
                   29274: 
                   29275: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29276: {
1.1.1.2   misho    29277:        USE_OPLINE
1.1       misho    29278:        zval *function_name;
                   29279:        char *function_name_strval;
                   29280:        int function_name_strlen;
                   29281: 
                   29282: 
1.1.1.2   misho    29283:        SAVE_OPLINE();
1.1       misho    29284:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   29285: 
1.1.1.2   misho    29286:        function_name = opline->op2.zv;
1.1       misho    29287: 
1.1.1.2   misho    29288:        if (IS_CONST != IS_CONST &&
                   29289:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    29290:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   29291:        }
                   29292: 
                   29293:        function_name_strval = Z_STRVAL_P(function_name);
                   29294:        function_name_strlen = Z_STRLEN_P(function_name);
                   29295: 
1.1.1.2   misho    29296:        EX(object) = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    29297: 
1.1.1.2   misho    29298:        if (EXPECTED(EX(object) != NULL) &&
                   29299:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   29300:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    29301: 
1.1.1.2   misho    29302:                if (IS_CONST != IS_CONST ||
                   29303:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   29304:                    zval *object = EX(object);
                   29305: 
                   29306:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   29307:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   29308:                        }
                   29309: 
                   29310:                        /* First, locate the function. */
                   29311:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CONST == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   29312:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   29313:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   29314:                        }
                   29315:                        if (IS_CONST == IS_CONST &&
                   29316:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   29317:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   29318:                            EXPECTED(EX(object) == object)) {
                   29319:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   29320:                        }
1.1       misho    29321:                }
                   29322:        } else {
                   29323:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   29324:        }
                   29325: 
                   29326:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   29327:                EX(object) = NULL;
                   29328:        } else {
                   29329:                if (!PZVAL_IS_REF(EX(object))) {
                   29330:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   29331:                } else {
                   29332:                        zval *this_ptr;
                   29333:                        ALLOC_ZVAL(this_ptr);
                   29334:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   29335:                        zval_copy_ctor(this_ptr);
                   29336:                        EX(object) = this_ptr;
                   29337:                }
                   29338:        }
                   29339: 
                   29340: 
1.1.1.2   misho    29341:        CHECK_EXCEPTION();
1.1       misho    29342:        ZEND_VM_NEXT_OPCODE();
                   29343: }
                   29344: 
                   29345: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29346: {
1.1.1.2   misho    29347:        USE_OPLINE
1.1       misho    29348: 
                   29349: 
1.1.1.2   misho    29350:        SAVE_OPLINE();
1.1       misho    29351:        if (IS_CV==IS_VAR) {
1.1.1.2   misho    29352:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    29353:        }
1.1.1.2   misho    29354:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   29355:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29356:                                 opline->op2.zv TSRMLS_CC);
1.1       misho    29357: 
1.1.1.2   misho    29358:        CHECK_EXCEPTION();
1.1       misho    29359:        ZEND_VM_NEXT_OPCODE();
                   29360: }
                   29361: 
                   29362: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29363: {
1.1.1.2   misho    29364:        USE_OPLINE
1.1       misho    29365: 
                   29366:        zval *expr_ptr;
                   29367: 
1.1.1.2   misho    29368:        SAVE_OPLINE();
                   29369:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   29370:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    29371: 
1.1.1.2   misho    29372:                if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   29373:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   29374:                }
                   29375:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    29376:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    29377:                Z_ADDREF_P(expr_ptr);
1.1       misho    29378:        } else {
1.1.1.2   misho    29379:                expr_ptr=_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29380:                if (0) { /* temporary variable */
                   29381:                        zval *new_expr;
1.1       misho    29382: 
1.1.1.2   misho    29383:                        ALLOC_ZVAL(new_expr);
                   29384:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   29385:                        expr_ptr = new_expr;
                   29386:                } else if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    29387:                        zval *new_expr;
                   29388: 
                   29389:                        ALLOC_ZVAL(new_expr);
                   29390:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   29391:                        expr_ptr = new_expr;
                   29392:                        zendi_zval_copy_ctor(*expr_ptr);
                   29393:                } else {
                   29394:                        Z_ADDREF_P(expr_ptr);
                   29395:                }
                   29396:        }
1.1.1.2   misho    29397: 
                   29398:        if (IS_CONST != IS_UNUSED) {
                   29399: 
                   29400:                zval *offset = opline->op2.zv;
                   29401:                ulong hval;
                   29402: 
1.1       misho    29403:                switch (Z_TYPE_P(offset)) {
                   29404:                        case IS_DOUBLE:
1.1.1.2   misho    29405:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   29406:                                goto num_index;
1.1       misho    29407:                        case IS_LONG:
                   29408:                        case IS_BOOL:
1.1.1.2   misho    29409:                                hval = Z_LVAL_P(offset);
                   29410: num_index:
                   29411:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    29412:                                break;
                   29413:                        case IS_STRING:
1.1.1.2   misho    29414:                                if (IS_CONST == IS_CONST) {
                   29415:                                        hval = Z_HASH_P(offset);
                   29416:                                } else {
                   29417:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   29418:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   29419:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   29420:                                        } else {
                   29421:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   29422:                                        }
                   29423:                                }
                   29424:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    29425:                                break;
                   29426:                        case IS_NULL:
1.1.1.2   misho    29427:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    29428:                                break;
                   29429:                        default:
                   29430:                                zend_error(E_WARNING, "Illegal offset type");
                   29431:                                zval_ptr_dtor(&expr_ptr);
                   29432:                                /* do nothing */
                   29433:                                break;
                   29434:                }
                   29435: 
                   29436:        } else {
1.1.1.2   misho    29437:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
                   29438:        }
                   29439:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   29440: 
                   29441:        } else {
                   29442: 
                   29443:        }
                   29444:        CHECK_EXCEPTION();
                   29445:        ZEND_VM_NEXT_OPCODE();
                   29446: }
                   29447: 
                   29448: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29449: {
                   29450:        USE_OPLINE
                   29451: 
                   29452:        array_init(&EX_T(opline->result.var).tmp_var);
                   29453:        if (IS_CV == IS_UNUSED) {
                   29454:                ZEND_VM_NEXT_OPCODE();
                   29455: #if 0 || IS_CV != IS_UNUSED
                   29456:        } else {
                   29457:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   29458: #endif
                   29459:        }
                   29460: }
                   29461: 
                   29462: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29463: {
                   29464:        USE_OPLINE
                   29465:        zval tmp, *varname;
                   29466:        HashTable *target_symbol_table;
                   29467: 
                   29468: 
                   29469:        SAVE_OPLINE();
                   29470:        if (IS_CV == IS_CV &&
                   29471:            IS_CONST == IS_UNUSED &&
                   29472:            (opline->extended_value & ZEND_QUICK_SET)) {
                   29473:                if (EG(active_symbol_table)) {
                   29474:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   29475: 
                   29476:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   29477:                        EX_CV(opline->op1.var) = NULL;
                   29478:                } else if (EX_CV(opline->op1.var)) {
                   29479:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   29480:                        EX_CV(opline->op1.var) = NULL;
                   29481:                }
                   29482:                CHECK_EXCEPTION();
                   29483:                ZEND_VM_NEXT_OPCODE();
                   29484:        }
                   29485: 
                   29486:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29487: 
                   29488:        if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   29489:                ZVAL_COPY_VALUE(&tmp, varname);
                   29490:                zval_copy_ctor(&tmp);
                   29491:                convert_to_string(&tmp);
                   29492:                varname = &tmp;
                   29493:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   29494:                Z_ADDREF_P(varname);
1.1       misho    29495:        }
                   29496: 
1.1.1.2   misho    29497:        if (IS_CONST != IS_UNUSED) {
                   29498:                zend_class_entry *ce;
                   29499: 
                   29500:                if (IS_CONST == IS_CONST) {
                   29501:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   29502:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   29503:                        } else {
                   29504:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    29505:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    29506:                                        if (IS_CV != IS_CONST && varname == &tmp) {
                   29507:                                                zval_dtor(&tmp);
                   29508:                                        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   29509:                                                zval_ptr_dtor(&varname);
                   29510:                                        }
                   29511: 
1.1.1.4   misho    29512:                                        HANDLE_EXCEPTION();
                   29513:                                }
                   29514:                                if (UNEXPECTED(ce == NULL)) {
                   29515:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    29516:                                }
                   29517:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   29518:                        }
                   29519:                } else {
                   29520:                        ce = EX_T(opline->op2.var).class_entry;
                   29521:                }
                   29522:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
1.1       misho    29523:        } else {
1.1.1.2   misho    29524:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
1.1       misho    29525: 
1.1.1.2   misho    29526:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   29527:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
1.1       misho    29528:        }
                   29529: 
1.1.1.2   misho    29530:        if (IS_CV != IS_CONST && varname == &tmp) {
                   29531:                zval_dtor(&tmp);
                   29532:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   29533:                zval_ptr_dtor(&varname);
1.1       misho    29534:        }
1.1.1.2   misho    29535: 
                   29536:        CHECK_EXCEPTION();
                   29537:        ZEND_VM_NEXT_OPCODE();
1.1       misho    29538: }
                   29539: 
                   29540: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29541: {
1.1.1.2   misho    29542:        USE_OPLINE
1.1       misho    29543: 
1.1.1.2   misho    29544:        zval **container;
1.1       misho    29545:        zval *offset;
1.1.1.2   misho    29546:        ulong hval;
1.1       misho    29547: 
1.1.1.2   misho    29548:        SAVE_OPLINE();
                   29549:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    29550:        if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   29551:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   29552:        }
1.1.1.2   misho    29553:        offset = opline->op2.zv;
1.1       misho    29554: 
                   29555:        if (IS_CV != IS_VAR || container) {
                   29556:                switch (Z_TYPE_PP(container)) {
                   29557:                        case IS_ARRAY: {
                   29558:                                HashTable *ht = Z_ARRVAL_PP(container);
                   29559: 
                   29560:                                switch (Z_TYPE_P(offset)) {
                   29561:                                        case IS_DOUBLE:
1.1.1.2   misho    29562:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    29563:                                                zend_hash_index_del(ht, hval);
                   29564:                                                break;
1.1       misho    29565:                                        case IS_RESOURCE:
                   29566:                                        case IS_BOOL:
                   29567:                                        case IS_LONG:
1.1.1.2   misho    29568:                                                hval = Z_LVAL_P(offset);
                   29569:                                                zend_hash_index_del(ht, hval);
1.1       misho    29570:                                                break;
                   29571:                                        case IS_STRING:
                   29572:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   29573:                                                        Z_ADDREF_P(offset);
                   29574:                                                }
1.1.1.2   misho    29575:                                                if (IS_CONST == IS_CONST) {
                   29576:                                                        hval = Z_HASH_P(offset);
                   29577:                                                } else {
                   29578:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   29579:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   29580:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   29581:                                                        } else {
                   29582:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    29583:                                                        }
                   29584:                                                }
1.1.1.2   misho    29585:                                                if (ht == &EG(symbol_table)) {
                   29586:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   29587:                                                } else {
                   29588:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   29589:                                                }
                   29590:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   29591:                                                        zval_ptr_dtor(&offset);
                   29592:                                                }
                   29593:                                                break;
                   29594: num_index_dim:
                   29595:                                                zend_hash_index_del(ht, hval);
1.1       misho    29596:                                                if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                   29597:                                                        zval_ptr_dtor(&offset);
                   29598:                                                }
                   29599:                                                break;
                   29600:                                        case IS_NULL:
                   29601:                                                zend_hash_del(ht, "", sizeof(""));
                   29602:                                                break;
                   29603:                                        default:
                   29604:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   29605:                                                break;
                   29606:                                }
                   29607: 
                   29608:                                break;
                   29609:                        }
                   29610:                        case IS_OBJECT:
1.1.1.2   misho    29611:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    29612:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   29613:                                }
                   29614:                                if (0) {
                   29615:                                        MAKE_REAL_ZVAL_PTR(offset);
                   29616:                                }
                   29617:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   29618:                                if (0) {
                   29619:                                        zval_ptr_dtor(&offset);
                   29620:                                } else {
                   29621: 
                   29622:                                }
                   29623:                                break;
                   29624:                        case IS_STRING:
                   29625:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   29626:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   29627:                        default:
                   29628: 
                   29629:                                break;
                   29630:                }
                   29631:        } else {
                   29632: 
                   29633:        }
                   29634: 
1.1.1.2   misho    29635:        CHECK_EXCEPTION();
1.1       misho    29636:        ZEND_VM_NEXT_OPCODE();
                   29637: }
                   29638: 
                   29639: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29640: {
1.1.1.2   misho    29641:        USE_OPLINE
                   29642: 
                   29643:        zval **container;
                   29644:        zval *offset;
1.1       misho    29645: 
1.1.1.2   misho    29646:        SAVE_OPLINE();
                   29647:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29648:        offset = opline->op2.zv;
1.1       misho    29649: 
                   29650:        if (IS_CV != IS_VAR || container) {
                   29651:                if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   29652:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   29653:                }
                   29654:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   29655:                        if (0) {
                   29656:                                MAKE_REAL_ZVAL_PTR(offset);
                   29657:                        }
                   29658:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    29659:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    29660:                        } else {
                   29661:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   29662:                        }
                   29663:                        if (0) {
                   29664:                                zval_ptr_dtor(&offset);
                   29665:                        } else {
                   29666: 
                   29667:                        }
                   29668:                } else {
                   29669: 
                   29670:                }
                   29671:        } else {
                   29672: 
                   29673:        }
                   29674: 
1.1.1.2   misho    29675:        CHECK_EXCEPTION();
                   29676:        ZEND_VM_NEXT_OPCODE();
                   29677: }
                   29678: 
                   29679: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29680: {
                   29681:        USE_OPLINE
                   29682:        zval **value;
                   29683:        zend_bool isset = 1;
                   29684: 
                   29685:        SAVE_OPLINE();
                   29686:        if (IS_CV == IS_CV &&
                   29687:            IS_CONST == IS_UNUSED &&
                   29688:            (opline->extended_value & ZEND_QUICK_SET)) {
                   29689:                if (EX_CV(opline->op1.var)) {
                   29690:                        value = EX_CV(opline->op1.var);
                   29691:                } else if (EG(active_symbol_table)) {
                   29692:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   29693: 
                   29694:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   29695:                                isset = 0;
                   29696:                        }
                   29697:                } else {
                   29698:                        isset = 0;
                   29699:                }
                   29700:        } else {
                   29701:                HashTable *target_symbol_table;
                   29702: 
                   29703:                zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   29704: 
                   29705:                if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   29706:                        ZVAL_COPY_VALUE(&tmp, varname);
                   29707:                        zval_copy_ctor(&tmp);
                   29708:                        convert_to_string(&tmp);
                   29709:                        varname = &tmp;
                   29710:                }
                   29711: 
                   29712:                if (IS_CONST != IS_UNUSED) {
                   29713:                        zend_class_entry *ce;
                   29714: 
                   29715:                        if (IS_CONST == IS_CONST) {
                   29716:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   29717:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   29718:                                } else {
                   29719:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   29720:                                        if (UNEXPECTED(ce == NULL)) {
                   29721:                                                CHECK_EXCEPTION();
                   29722:                                                ZEND_VM_NEXT_OPCODE();
                   29723:                                        }
                   29724:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   29725:                                }
                   29726:                        } else {
                   29727:                                ce = EX_T(opline->op2.var).class_entry;
                   29728:                        }
                   29729:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   29730:                        if (!value) {
                   29731:                                isset = 0;
                   29732:                        }
                   29733:                } else {
                   29734:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   29735:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   29736:                                isset = 0;
                   29737:                        }
                   29738:                }
                   29739: 
                   29740:                if (IS_CV != IS_CONST && varname == &tmp) {
                   29741:                        zval_dtor(&tmp);
                   29742:                }
                   29743: 
                   29744:        }
                   29745: 
                   29746:        if (opline->extended_value & ZEND_ISSET) {
                   29747:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   29748:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   29749:                } else {
                   29750:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   29751:                }
                   29752:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   29753:                if (!isset || !i_zend_is_true(*value)) {
                   29754:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   29755:                } else {
                   29756:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   29757:                }
                   29758:        }
                   29759: 
                   29760:        CHECK_EXCEPTION();
1.1       misho    29761:        ZEND_VM_NEXT_OPCODE();
                   29762: }
                   29763: 
                   29764: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   29765: {
1.1.1.2   misho    29766:        USE_OPLINE
1.1       misho    29767: 
1.1.1.2   misho    29768:        zval **container;
1.1       misho    29769:        zval **value = NULL;
                   29770:        int result = 0;
1.1.1.2   misho    29771:        ulong hval;
                   29772:        zval *offset;
1.1       misho    29773: 
1.1.1.2   misho    29774:        SAVE_OPLINE();
                   29775:        container = _get_zval_ptr_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    29776: 
1.1.1.2   misho    29777:        offset = opline->op2.zv;
1.1       misho    29778: 
1.1.1.2   misho    29779:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   29780:                HashTable *ht;
                   29781:                int isset = 0;
1.1       misho    29782: 
1.1.1.2   misho    29783:                ht = Z_ARRVAL_PP(container);
1.1       misho    29784: 
1.1.1.2   misho    29785:                switch (Z_TYPE_P(offset)) {
                   29786:                        case IS_DOUBLE:
                   29787:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   29788:                                goto num_index_prop;
                   29789:                        case IS_RESOURCE:
                   29790:                        case IS_BOOL:
                   29791:                        case IS_LONG:
                   29792:                                hval = Z_LVAL_P(offset);
                   29793: num_index_prop:
                   29794:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   29795:                                        isset = 1;
                   29796:                                }
                   29797:                                break;
                   29798:                        case IS_STRING:
                   29799:                                if (IS_CONST == IS_CONST) {
                   29800:                                        hval = Z_HASH_P(offset);
                   29801:                                } else {
                   29802:                                        if (!prop_dim) {
                   29803:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    29804:                                        }
1.1.1.2   misho    29805:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   29806:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    29807:                                        } else {
1.1.1.2   misho    29808:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    29809:                                        }
                   29810:                                }
1.1.1.2   misho    29811:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   29812:                                        isset = 1;
                   29813:                                }
                   29814:                                break;
                   29815:                        case IS_NULL:
                   29816:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   29817:                                        isset = 1;
1.1       misho    29818:                                }
1.1.1.2   misho    29819:                                break;
                   29820:                        default:
                   29821:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   29822:                                break;
                   29823:                }
                   29824: 
                   29825:                if (opline->extended_value & ZEND_ISSET) {
                   29826:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   29827:                                result = 0;
                   29828:                        } else {
                   29829:                                result = isset;
1.1       misho    29830:                        }
1.1.1.2   misho    29831:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   29832:                        if (!isset || !i_zend_is_true(*value)) {
                   29833:                                result = 0;
1.1       misho    29834:                        } else {
1.1.1.2   misho    29835:                                result = 1;
                   29836:                        }
                   29837:                }
1.1       misho    29838: 
1.1.1.2   misho    29839:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   29840:                if (0) {
                   29841:                        MAKE_REAL_ZVAL_PTR(offset);
                   29842:                }
                   29843:                if (prop_dim) {
                   29844:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   29845:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   29846:                        } else {
                   29847:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   29848:                                result = 0;
                   29849:                        }
                   29850:                } else {
                   29851:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   29852:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   29853:                        } else {
                   29854:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   29855:                                result = 0;
1.1       misho    29856:                        }
1.1.1.2   misho    29857:                }
                   29858:                if (0) {
                   29859:                        zval_ptr_dtor(&offset);
                   29860:                } else {
1.1       misho    29861: 
1.1.1.2   misho    29862:                }
                   29863:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   29864:                zval tmp;
                   29865: 
                   29866:                if (Z_TYPE_P(offset) != IS_LONG) {
                   29867:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   29868:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   29869:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   29870:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    29871:                                zval_copy_ctor(&tmp);
                   29872:                                convert_to_long(&tmp);
                   29873:                                offset = &tmp;
1.1.1.2   misho    29874:                        } else {
                   29875:                                /* can not be converted to proper offset, return "not set" */
                   29876:                                result = 0;
1.1       misho    29877:                        }
1.1.1.2   misho    29878:                }
                   29879:                if (Z_TYPE_P(offset) == IS_LONG) {
                   29880:                        if (opline->extended_value & ZEND_ISSET) {
                   29881:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   29882:                                        result = 1;
                   29883:                                }
                   29884:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   29885:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   29886:                                        result = 1;
1.1       misho    29887:                                }
                   29888:                        }
1.1.1.2   misho    29889:                }
1.1       misho    29890: 
1.1.1.2   misho    29891:        } else {
1.1       misho    29892: 
                   29893:        }
                   29894: 
1.1.1.2   misho    29895:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   29896:        if (opline->extended_value & ZEND_ISSET) {
                   29897:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   29898:        } else {
                   29899:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    29900:        }
                   29901: 
1.1.1.2   misho    29902:        CHECK_EXCEPTION();
1.1       misho    29903:        ZEND_VM_NEXT_OPCODE();
                   29904: }
                   29905: 
                   29906: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29907: {
                   29908:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   29909: }
                   29910: 
                   29911: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29912: {
                   29913:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   29914: }
                   29915: 
                   29916: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29917: {
1.1.1.2   misho    29918:        USE_OPLINE
1.1       misho    29919:        zend_free_op free_op2;
                   29920: 
1.1.1.2   misho    29921:        SAVE_OPLINE();
                   29922:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   29923:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29924:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    29925: 
                   29926:        zval_dtor(free_op2.var);
1.1.1.2   misho    29927:        CHECK_EXCEPTION();
1.1       misho    29928:        ZEND_VM_NEXT_OPCODE();
                   29929: }
                   29930: 
                   29931: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29932: {
1.1.1.2   misho    29933:        USE_OPLINE
1.1       misho    29934:        zend_free_op free_op2;
                   29935: 
1.1.1.2   misho    29936:        SAVE_OPLINE();
                   29937:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   29938:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29939:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    29940: 
                   29941:        zval_dtor(free_op2.var);
1.1.1.2   misho    29942:        CHECK_EXCEPTION();
1.1       misho    29943:        ZEND_VM_NEXT_OPCODE();
                   29944: }
                   29945: 
                   29946: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29947: {
1.1.1.2   misho    29948:        USE_OPLINE
1.1       misho    29949:        zend_free_op free_op2;
                   29950: 
1.1.1.2   misho    29951:        SAVE_OPLINE();
                   29952:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   29953:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29954:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    29955: 
                   29956:        zval_dtor(free_op2.var);
1.1.1.2   misho    29957:        CHECK_EXCEPTION();
1.1       misho    29958:        ZEND_VM_NEXT_OPCODE();
                   29959: }
                   29960: 
                   29961: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29962: {
1.1.1.2   misho    29963:        USE_OPLINE
1.1       misho    29964:        zend_free_op free_op2;
                   29965: 
1.1.1.2   misho    29966:        SAVE_OPLINE();
                   29967:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   29968:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29969:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    29970: 
                   29971:        zval_dtor(free_op2.var);
1.1.1.2   misho    29972:        CHECK_EXCEPTION();
1.1       misho    29973:        ZEND_VM_NEXT_OPCODE();
                   29974: }
                   29975: 
                   29976: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29977: {
1.1.1.2   misho    29978:        USE_OPLINE
1.1       misho    29979:        zend_free_op free_op2;
                   29980: 
1.1.1.2   misho    29981:        SAVE_OPLINE();
                   29982:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   29983:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29984:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    29985: 
                   29986:        zval_dtor(free_op2.var);
1.1.1.2   misho    29987:        CHECK_EXCEPTION();
1.1       misho    29988:        ZEND_VM_NEXT_OPCODE();
                   29989: }
                   29990: 
                   29991: static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   29992: {
1.1.1.2   misho    29993:        USE_OPLINE
1.1       misho    29994:        zend_free_op free_op2;
                   29995: 
1.1.1.2   misho    29996:        SAVE_OPLINE();
                   29997:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   29998:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   29999:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30000: 
                   30001:        zval_dtor(free_op2.var);
1.1.1.2   misho    30002:        CHECK_EXCEPTION();
1.1       misho    30003:        ZEND_VM_NEXT_OPCODE();
                   30004: }
                   30005: 
                   30006: static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30007: {
1.1.1.2   misho    30008:        USE_OPLINE
1.1       misho    30009:        zend_free_op free_op2;
                   30010: 
1.1.1.2   misho    30011:        SAVE_OPLINE();
                   30012:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   30013:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30014:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30015: 
                   30016:        zval_dtor(free_op2.var);
1.1.1.2   misho    30017:        CHECK_EXCEPTION();
1.1       misho    30018:        ZEND_VM_NEXT_OPCODE();
                   30019: }
                   30020: 
                   30021: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30022: {
1.1.1.2   misho    30023:        USE_OPLINE
1.1       misho    30024:        zend_free_op free_op2;
                   30025: 
1.1.1.2   misho    30026:        SAVE_OPLINE();
                   30027:        concat_function(&EX_T(opline->result.var).tmp_var,
                   30028:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30029:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30030: 
                   30031:        zval_dtor(free_op2.var);
1.1.1.2   misho    30032:        CHECK_EXCEPTION();
1.1       misho    30033:        ZEND_VM_NEXT_OPCODE();
                   30034: }
                   30035: 
                   30036: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30037: {
1.1.1.2   misho    30038:        USE_OPLINE
1.1       misho    30039:        zend_free_op free_op2;
                   30040: 
1.1.1.2   misho    30041:        SAVE_OPLINE();
                   30042:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   30043:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30044:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30045: 
                   30046:        zval_dtor(free_op2.var);
1.1.1.2   misho    30047:        CHECK_EXCEPTION();
1.1       misho    30048:        ZEND_VM_NEXT_OPCODE();
                   30049: }
                   30050: 
                   30051: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30052: {
1.1.1.2   misho    30053:        USE_OPLINE
1.1       misho    30054:        zend_free_op free_op2;
1.1.1.2   misho    30055:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    30056: 
1.1.1.2   misho    30057:        SAVE_OPLINE();
1.1       misho    30058:        is_identical_function(result,
1.1.1.2   misho    30059:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30060:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30061:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   30062: 
                   30063:        zval_dtor(free_op2.var);
1.1.1.2   misho    30064:        CHECK_EXCEPTION();
1.1       misho    30065:        ZEND_VM_NEXT_OPCODE();
                   30066: }
                   30067: 
                   30068: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30069: {
1.1.1.2   misho    30070:        USE_OPLINE
1.1       misho    30071:        zend_free_op free_op2;
1.1.1.2   misho    30072:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    30073: 
1.1.1.2   misho    30074:        SAVE_OPLINE();
                   30075:        ZVAL_BOOL(result, fast_equal_function(result,
                   30076:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30077:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    30078: 
                   30079:        zval_dtor(free_op2.var);
1.1.1.2   misho    30080:        CHECK_EXCEPTION();
1.1       misho    30081:        ZEND_VM_NEXT_OPCODE();
                   30082: }
                   30083: 
                   30084: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30085: {
1.1.1.2   misho    30086:        USE_OPLINE
1.1       misho    30087:        zend_free_op free_op2;
1.1.1.2   misho    30088:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    30089: 
1.1.1.2   misho    30090:        SAVE_OPLINE();
                   30091:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   30092:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30093:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    30094: 
                   30095:        zval_dtor(free_op2.var);
1.1.1.2   misho    30096:        CHECK_EXCEPTION();
1.1       misho    30097:        ZEND_VM_NEXT_OPCODE();
                   30098: }
                   30099: 
                   30100: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30101: {
1.1.1.2   misho    30102:        USE_OPLINE
1.1       misho    30103:        zend_free_op free_op2;
1.1.1.2   misho    30104:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    30105: 
1.1.1.2   misho    30106:        SAVE_OPLINE();
                   30107:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   30108:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30109:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    30110: 
                   30111:        zval_dtor(free_op2.var);
1.1.1.2   misho    30112:        CHECK_EXCEPTION();
1.1       misho    30113:        ZEND_VM_NEXT_OPCODE();
                   30114: }
                   30115: 
                   30116: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30117: {
1.1.1.2   misho    30118:        USE_OPLINE
1.1       misho    30119:        zend_free_op free_op2;
1.1.1.2   misho    30120:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    30121: 
1.1.1.2   misho    30122:        SAVE_OPLINE();
                   30123:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   30124:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30125:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    30126: 
                   30127:        zval_dtor(free_op2.var);
1.1.1.2   misho    30128:        CHECK_EXCEPTION();
1.1       misho    30129:        ZEND_VM_NEXT_OPCODE();
                   30130: }
                   30131: 
                   30132: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30133: {
1.1.1.2   misho    30134:        USE_OPLINE
1.1       misho    30135:        zend_free_op free_op2;
                   30136: 
1.1.1.2   misho    30137:        SAVE_OPLINE();
                   30138:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   30139:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30140:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30141: 
                   30142:        zval_dtor(free_op2.var);
1.1.1.2   misho    30143:        CHECK_EXCEPTION();
1.1       misho    30144:        ZEND_VM_NEXT_OPCODE();
                   30145: }
                   30146: 
                   30147: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30148: {
1.1.1.2   misho    30149:        USE_OPLINE
1.1       misho    30150:        zend_free_op free_op2;
                   30151: 
1.1.1.2   misho    30152:        SAVE_OPLINE();
                   30153:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   30154:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30155:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30156: 
                   30157:        zval_dtor(free_op2.var);
1.1.1.2   misho    30158:        CHECK_EXCEPTION();
1.1       misho    30159:        ZEND_VM_NEXT_OPCODE();
                   30160: }
                   30161: 
                   30162: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30163: {
1.1.1.2   misho    30164:        USE_OPLINE
1.1       misho    30165:        zend_free_op free_op2;
                   30166: 
1.1.1.2   misho    30167:        SAVE_OPLINE();
                   30168:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   30169:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30170:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30171: 
                   30172:        zval_dtor(free_op2.var);
1.1.1.2   misho    30173:        CHECK_EXCEPTION();
1.1       misho    30174:        ZEND_VM_NEXT_OPCODE();
                   30175: }
                   30176: 
                   30177: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30178: {
1.1.1.2   misho    30179:        USE_OPLINE
1.1       misho    30180:        zend_free_op free_op2;
                   30181: 
1.1.1.2   misho    30182:        SAVE_OPLINE();
                   30183:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   30184:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   30185:                _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    30186: 
                   30187:        zval_dtor(free_op2.var);
1.1.1.2   misho    30188:        CHECK_EXCEPTION();
1.1       misho    30189:        ZEND_VM_NEXT_OPCODE();
                   30190: }
                   30191: 
                   30192: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   30193: {
1.1.1.2   misho    30194:        USE_OPLINE
1.1       misho    30195:        zend_free_op free_op2, free_op_data1;
1.1.1.2   misho    30196:        zval **object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30197:        zval *object;
1.1.1.2   misho    30198:        zval *property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30199:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    30200:        int have_get_ptr = 0;
                   30201: 
1.1.1.2   misho    30202:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    30203:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   30204:        }
                   30205: 
                   30206:        make_real_object(object_ptr TSRMLS_CC);
                   30207:        object = *object_ptr;
                   30208: 
1.1.1.2   misho    30209:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    30210:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   30211:                zval_dtor(free_op2.var);
                   30212:                FREE_OP(free_op_data1);
                   30213: 
1.1.1.2   misho    30214:                if (RETURN_VALUE_USED(opline)) {
                   30215:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   30216:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   30217:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    30218:                }
                   30219:        } else {
                   30220:                /* here we are sure we are dealing with an object */
                   30221:                if (1) {
                   30222:                        MAKE_REAL_ZVAL_PTR(property);
                   30223:                }
                   30224: 
                   30225:                /* here property is a string */
                   30226:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   30227:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    30228:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30229:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   30230:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   30231: 
                   30232:                                have_get_ptr = 1;
                   30233:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    30234:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    30235:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    30236:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   30237:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    30238:                                }
                   30239:                        }
                   30240:                }
                   30241: 
                   30242:                if (!have_get_ptr) {
                   30243:                        zval *z = NULL;
                   30244: 
                   30245:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   30246:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    30247:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30248:                                }
                   30249:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   30250:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   30251:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   30252:                                }
                   30253:                        }
                   30254:                        if (z) {
                   30255:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   30256:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   30257: 
                   30258:                                        if (Z_REFCOUNT_P(z) == 0) {
                   30259:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   30260:                                                zval_dtor(z);
                   30261:                                                FREE_ZVAL(z);
                   30262:                                        }
                   30263:                                        z = value;
                   30264:                                }
                   30265:                                Z_ADDREF_P(z);
                   30266:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   30267:                                binary_op(z, z, value TSRMLS_CC);
                   30268:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    30269:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30270:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   30271:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   30272:                                }
1.1.1.2   misho    30273:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    30274:                                        PZVAL_LOCK(z);
1.1.1.2   misho    30275:                                        EX_T(opline->result.var).var.ptr = z;
                   30276:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    30277:                                }
                   30278:                                zval_ptr_dtor(&z);
                   30279:                        } else {
                   30280:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    30281:                                if (RETURN_VALUE_USED(opline)) {
                   30282:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   30283:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   30284:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    30285:                                }
                   30286:                        }
                   30287:                }
                   30288: 
                   30289:                if (1) {
                   30290:                        zval_ptr_dtor(&property);
                   30291:                } else {
                   30292:                        zval_dtor(free_op2.var);
                   30293:                }
                   30294:                FREE_OP(free_op_data1);
                   30295:        }
                   30296: 
                   30297:        /* assign_obj has two opcodes! */
1.1.1.2   misho    30298:        CHECK_EXCEPTION();
1.1       misho    30299:        ZEND_VM_INC_OPCODE();
                   30300:        ZEND_VM_NEXT_OPCODE();
                   30301: }
                   30302: 
                   30303: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   30304: {
1.1.1.2   misho    30305:        USE_OPLINE
1.1       misho    30306:        zend_free_op free_op2, free_op_data2, free_op_data1;
                   30307:        zval **var_ptr;
                   30308:        zval *value;
                   30309: 
1.1.1.2   misho    30310:        SAVE_OPLINE();
1.1       misho    30311:        switch (opline->extended_value) {
                   30312:                case ZEND_ASSIGN_OBJ:
                   30313:                        return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30314:                        break;
                   30315:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    30316:                                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30317: 
1.1.1.2   misho    30318:                                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30319:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    30320:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    30321:                                        if (IS_CV == IS_VAR && !0) {
                   30322:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   30323:                                        }
                   30324:                                        return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30325:                                } else {
1.1.1.2   misho    30326:                                        zval *dim = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    30327: 
1.1.1.2   misho    30328:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
                   30329:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   30330:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    30331:                                }
                   30332:                        }
                   30333:                        break;
                   30334:                default:
1.1.1.2   misho    30335:                        value = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30336:                        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30337:                        /* do nothing */
                   30338:                        break;
                   30339:        }
                   30340: 
1.1.1.2   misho    30341:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    30342:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   30343:        }
                   30344: 
1.1.1.2   misho    30345:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   30346:                if (RETURN_VALUE_USED(opline)) {
                   30347:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   30348:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    30349:                }
                   30350:                zval_dtor(free_op2.var);
                   30351: 
1.1.1.2   misho    30352:                CHECK_EXCEPTION();
                   30353:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   30354:                        ZEND_VM_INC_OPCODE();
                   30355:                }
1.1       misho    30356:                ZEND_VM_NEXT_OPCODE();
                   30357:        }
                   30358: 
                   30359:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   30360: 
1.1.1.2   misho    30361:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   30362:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    30363:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   30364:                /* proxy object */
                   30365:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   30366:                Z_ADDREF_P(objval);
                   30367:                binary_op(objval, objval, value TSRMLS_CC);
                   30368:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   30369:                zval_ptr_dtor(&objval);
                   30370:        } else {
                   30371:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   30372:        }
                   30373: 
1.1.1.2   misho    30374:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    30375:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    30376:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    30377:        }
                   30378:        zval_dtor(free_op2.var);
                   30379: 
                   30380:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   30381:                FREE_OP(free_op_data1);
                   30382:                FREE_OP_VAR_PTR(free_op_data2);
                   30383: 
1.1.1.2   misho    30384:                CHECK_EXCEPTION();
                   30385:                ZEND_VM_INC_OPCODE();
                   30386:        } else {
                   30387: 
                   30388:                CHECK_EXCEPTION();
                   30389:        }
1.1       misho    30390:        ZEND_VM_NEXT_OPCODE();
                   30391: }
                   30392: 
                   30393: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30394: {
                   30395:        return zend_binary_assign_op_helper_SPEC_CV_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30396: }
                   30397: 
                   30398: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30399: {
                   30400:        return zend_binary_assign_op_helper_SPEC_CV_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30401: }
                   30402: 
                   30403: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30404: {
                   30405:        return zend_binary_assign_op_helper_SPEC_CV_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30406: }
                   30407: 
                   30408: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30409: {
                   30410:        return zend_binary_assign_op_helper_SPEC_CV_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30411: }
                   30412: 
                   30413: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30414: {
                   30415:        return zend_binary_assign_op_helper_SPEC_CV_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30416: }
                   30417: 
                   30418: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30419: {
                   30420:        return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30421: }
                   30422: 
                   30423: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30424: {
                   30425:        return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30426: }
                   30427: 
                   30428: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30429: {
                   30430:        return zend_binary_assign_op_helper_SPEC_CV_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30431: }
                   30432: 
                   30433: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30434: {
                   30435:        return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30436: }
                   30437: 
                   30438: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30439: {
                   30440:        return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30441: }
                   30442: 
                   30443: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30444: {
                   30445:        return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30446: }
                   30447: 
                   30448: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   30449: {
1.1.1.2   misho    30450:        USE_OPLINE
1.1       misho    30451:        zend_free_op free_op2;
1.1.1.2   misho    30452:        zval **object_ptr;
1.1       misho    30453:        zval *object;
1.1.1.2   misho    30454:        zval *property;
                   30455:        zval **retval;
1.1       misho    30456:        int have_get_ptr = 0;
                   30457: 
1.1.1.2   misho    30458:        SAVE_OPLINE();
                   30459:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30460:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30461:        retval = &EX_T(opline->result.var).var.ptr;
                   30462: 
                   30463:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    30464:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   30465:        }
                   30466: 
                   30467:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   30468:        object = *object_ptr;
                   30469: 
1.1.1.2   misho    30470:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    30471:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   30472:                zval_dtor(free_op2.var);
1.1.1.2   misho    30473:                if (RETURN_VALUE_USED(opline)) {
                   30474:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   30475:                        *retval = &EG(uninitialized_zval);
1.1       misho    30476:                }
                   30477: 
1.1.1.2   misho    30478:                CHECK_EXCEPTION();
1.1       misho    30479:                ZEND_VM_NEXT_OPCODE();
                   30480:        }
                   30481: 
                   30482:        /* here we are sure we are dealing with an object */
                   30483: 
                   30484:        if (1) {
                   30485:                MAKE_REAL_ZVAL_PTR(property);
                   30486:        }
                   30487: 
                   30488:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    30489:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30490:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   30491:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   30492: 
                   30493:                        have_get_ptr = 1;
                   30494:                        incdec_op(*zptr);
1.1.1.2   misho    30495:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    30496:                                *retval = *zptr;
                   30497:                                PZVAL_LOCK(*retval);
                   30498:                        }
                   30499:                }
                   30500:        }
                   30501: 
                   30502:        if (!have_get_ptr) {
                   30503:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    30504:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30505: 
1.1.1.2   misho    30506:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    30507:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   30508: 
                   30509:                                if (Z_REFCOUNT_P(z) == 0) {
                   30510:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   30511:                                        zval_dtor(z);
                   30512:                                        FREE_ZVAL(z);
                   30513:                                }
                   30514:                                z = value;
                   30515:                        }
                   30516:                        Z_ADDREF_P(z);
                   30517:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   30518:                        incdec_op(z);
                   30519:                        *retval = z;
1.1.1.2   misho    30520:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   30521:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    30522:                        zval_ptr_dtor(&z);
                   30523:                } else {
                   30524:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    30525:                        if (RETURN_VALUE_USED(opline)) {
                   30526:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   30527:                                *retval = &EG(uninitialized_zval);
1.1       misho    30528:                        }
                   30529:                }
                   30530:        }
                   30531: 
                   30532:        if (1) {
                   30533:                zval_ptr_dtor(&property);
                   30534:        } else {
                   30535:                zval_dtor(free_op2.var);
                   30536:        }
                   30537: 
1.1.1.2   misho    30538:        CHECK_EXCEPTION();
1.1       misho    30539:        ZEND_VM_NEXT_OPCODE();
                   30540: }
                   30541: 
                   30542: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30543: {
                   30544:        return zend_pre_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30545: }
                   30546: 
                   30547: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30548: {
                   30549:        return zend_pre_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30550: }
                   30551: 
                   30552: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   30553: {
1.1.1.2   misho    30554:        USE_OPLINE
1.1       misho    30555:        zend_free_op free_op2;
1.1.1.2   misho    30556:        zval **object_ptr;
1.1       misho    30557:        zval *object;
1.1.1.2   misho    30558:        zval *property;
                   30559:        zval *retval;
1.1       misho    30560:        int have_get_ptr = 0;
                   30561: 
1.1.1.2   misho    30562:        SAVE_OPLINE();
                   30563:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30564:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30565:        retval = &EX_T(opline->result.var).tmp_var;
                   30566: 
                   30567:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    30568:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   30569:        }
                   30570: 
                   30571:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   30572:        object = *object_ptr;
                   30573: 
1.1.1.2   misho    30574:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    30575:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   30576:                zval_dtor(free_op2.var);
1.1.1.2   misho    30577:                ZVAL_NULL(retval);
1.1       misho    30578: 
1.1.1.2   misho    30579:                CHECK_EXCEPTION();
1.1       misho    30580:                ZEND_VM_NEXT_OPCODE();
                   30581:        }
                   30582: 
                   30583:        /* here we are sure we are dealing with an object */
                   30584: 
                   30585:        if (1) {
                   30586:                MAKE_REAL_ZVAL_PTR(property);
                   30587:        }
                   30588: 
                   30589:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    30590:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30591:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   30592:                        have_get_ptr = 1;
                   30593:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   30594: 
1.1.1.2   misho    30595:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    30596:                        zendi_zval_copy_ctor(*retval);
                   30597: 
                   30598:                        incdec_op(*zptr);
                   30599: 
                   30600:                }
                   30601:        }
                   30602: 
                   30603:        if (!have_get_ptr) {
                   30604:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    30605:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30606:                        zval *z_copy;
                   30607: 
1.1.1.2   misho    30608:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    30609:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   30610: 
                   30611:                                if (Z_REFCOUNT_P(z) == 0) {
                   30612:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   30613:                                        zval_dtor(z);
                   30614:                                        FREE_ZVAL(z);
                   30615:                                }
                   30616:                                z = value;
                   30617:                        }
1.1.1.2   misho    30618:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    30619:                        zendi_zval_copy_ctor(*retval);
                   30620:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    30621:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    30622:                        zendi_zval_copy_ctor(*z_copy);
                   30623:                        incdec_op(z_copy);
                   30624:                        Z_ADDREF_P(z);
1.1.1.2   misho    30625:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30626:                        zval_ptr_dtor(&z_copy);
                   30627:                        zval_ptr_dtor(&z);
                   30628:                } else {
                   30629:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    30630:                        ZVAL_NULL(retval);
1.1       misho    30631:                }
                   30632:        }
                   30633: 
                   30634:        if (1) {
                   30635:                zval_ptr_dtor(&property);
                   30636:        } else {
                   30637:                zval_dtor(free_op2.var);
                   30638:        }
                   30639: 
1.1.1.2   misho    30640:        CHECK_EXCEPTION();
1.1       misho    30641:        ZEND_VM_NEXT_OPCODE();
                   30642: }
                   30643: 
                   30644: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30645: {
                   30646:        return zend_post_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30647: }
                   30648: 
                   30649: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30650: {
                   30651:        return zend_post_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   30652: }
                   30653: 
                   30654: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30655: {
1.1.1.2   misho    30656:        USE_OPLINE
1.1       misho    30657:        zend_free_op free_op2;
1.1.1.5 ! misho    30658:        zval *container;
1.1       misho    30659: 
1.1.1.2   misho    30660:        SAVE_OPLINE();
                   30661: 
1.1.1.5 ! misho    30662:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          30663:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    30664:        }
1.1.1.5 ! misho    30665:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    30666:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
1.1       misho    30667:        zval_dtor(free_op2.var);
                   30668: 
1.1.1.2   misho    30669:        CHECK_EXCEPTION();
1.1       misho    30670:        ZEND_VM_NEXT_OPCODE();
                   30671: }
                   30672: 
                   30673: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30674: {
1.1.1.2   misho    30675:        USE_OPLINE
1.1       misho    30676:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    30677:        zval **container;
                   30678: 
                   30679:        SAVE_OPLINE();
                   30680:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30681: 
1.1.1.2   misho    30682:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30683:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   30684:        }
1.1.1.2   misho    30685:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    30686:        zval_dtor(free_op2.var);
1.1.1.2   misho    30687:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30688:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30689:        }
                   30690: 
                   30691:        /* We are going to assign the result by reference */
1.1.1.2   misho    30692:        if (UNEXPECTED(opline->extended_value != 0)) {
                   30693:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   30694: 
                   30695:                if (retval_ptr) {
                   30696:                        Z_DELREF_PP(retval_ptr);
                   30697:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   30698:                        Z_ADDREF_PP(retval_ptr);
                   30699:                }
1.1       misho    30700:        }
                   30701: 
1.1.1.2   misho    30702:        CHECK_EXCEPTION();
1.1       misho    30703:        ZEND_VM_NEXT_OPCODE();
                   30704: }
                   30705: 
                   30706: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30707: {
1.1.1.2   misho    30708:        USE_OPLINE
1.1       misho    30709:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    30710:        zval **container;
1.1       misho    30711: 
1.1.1.2   misho    30712:        SAVE_OPLINE();
                   30713:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30714: 
                   30715:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30716:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   30717:        }
1.1.1.2   misho    30718:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
1.1       misho    30719:        zval_dtor(free_op2.var);
1.1.1.2   misho    30720:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30721:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30722:        }
                   30723: 
1.1.1.2   misho    30724:        CHECK_EXCEPTION();
1.1       misho    30725:        ZEND_VM_NEXT_OPCODE();
                   30726: }
                   30727: 
                   30728: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30729: {
1.1.1.2   misho    30730:        USE_OPLINE
1.1       misho    30731:        zend_free_op free_op2;
1.1.1.5 ! misho    30732:        zval *container;
1.1       misho    30733: 
1.1.1.2   misho    30734:        SAVE_OPLINE();
1.1.1.5 ! misho    30735:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    30736:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
1.1       misho    30737:        zval_dtor(free_op2.var);
                   30738: 
1.1.1.2   misho    30739:        CHECK_EXCEPTION();
1.1       misho    30740:        ZEND_VM_NEXT_OPCODE();
                   30741: }
                   30742: 
                   30743: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30744: {
1.1.1.2   misho    30745:        USE_OPLINE
1.1       misho    30746:        zend_free_op free_op1, free_op2;
                   30747: 
1.1.1.2   misho    30748:        SAVE_OPLINE();
                   30749: 
                   30750:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    30751:                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
        !          30752: 
1.1.1.2   misho    30753:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30754:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   30755:                }
1.1.1.2   misho    30756:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
                   30757:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30758:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30759:                }
1.1.1.5 ! misho    30760:                zval_dtor(free_op2.var);
        !          30761: 
1.1       misho    30762:        } else {
1.1.1.5 ! misho    30763:                zval *container;
        !          30764: 
1.1       misho    30765:                if (IS_TMP_VAR == IS_UNUSED) {
                   30766:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   30767:                }
1.1.1.5 ! misho    30768:                container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    30769:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
1.1.1.5 ! misho    30770:                zval_dtor(free_op2.var);
1.1       misho    30771: 
1.1.1.5 ! misho    30772:        }
1.1.1.2   misho    30773:        CHECK_EXCEPTION();
1.1       misho    30774:        ZEND_VM_NEXT_OPCODE();
                   30775: }
                   30776: 
                   30777: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30778: {
1.1.1.2   misho    30779:        USE_OPLINE
1.1       misho    30780:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    30781:        zval **container;
                   30782: 
                   30783:        SAVE_OPLINE();
                   30784:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30785: 
                   30786:        if (IS_CV == IS_CV) {
                   30787:                if (container != &EG(uninitialized_zval_ptr)) {
                   30788:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   30789:                }
                   30790:        }
1.1.1.2   misho    30791:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30792:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   30793:        }
1.1.1.2   misho    30794:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    30795:        zval_dtor(free_op2.var);
1.1.1.2   misho    30796:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30797:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30798:        }
                   30799: 
1.1.1.2   misho    30800:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    30801:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   30802:        } else {
                   30803:                zend_free_op free_res;
1.1.1.2   misho    30804:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    30805: 
1.1.1.2   misho    30806:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   30807:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   30808:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    30809:                }
1.1.1.2   misho    30810:                PZVAL_LOCK(*retval_ptr);
1.1       misho    30811:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    30812:                CHECK_EXCEPTION();
                   30813:                ZEND_VM_NEXT_OPCODE();
1.1       misho    30814:        }
                   30815: }
                   30816: 
1.1.1.2   misho    30817: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_TMP(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    30818: {
1.1.1.2   misho    30819:        USE_OPLINE
1.1       misho    30820: 
1.1.1.2   misho    30821:        zval *container;
1.1       misho    30822:        zend_free_op free_op2;
1.1.1.2   misho    30823:        zval *offset;
1.1       misho    30824: 
1.1.1.2   misho    30825:        SAVE_OPLINE();
                   30826:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30827:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30828: 
                   30829:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   30830:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   30831:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   30832:                PZVAL_LOCK(&EG(uninitialized_zval));
                   30833:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    30834:                zval_dtor(free_op2.var);
                   30835:        } else {
                   30836:                zval *retval;
                   30837: 
                   30838:                if (1) {
                   30839:                        MAKE_REAL_ZVAL_PTR(offset);
                   30840:                }
                   30841: 
                   30842:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    30843:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    30844: 
1.1.1.2   misho    30845:                PZVAL_LOCK(retval);
                   30846:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    30847: 
                   30848:                if (1) {
                   30849:                        zval_ptr_dtor(&offset);
                   30850:                } else {
                   30851:                        zval_dtor(free_op2.var);
                   30852:                }
                   30853:        }
                   30854: 
1.1.1.2   misho    30855:        CHECK_EXCEPTION();
1.1       misho    30856:        ZEND_VM_NEXT_OPCODE();
                   30857: }
                   30858: 
                   30859: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30860: {
1.1.1.2   misho    30861:        return zend_fetch_property_address_read_helper_SPEC_CV_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    30862: }
                   30863: 
                   30864: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30865: {
1.1.1.2   misho    30866:        USE_OPLINE
1.1       misho    30867:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    30868:        zval *property;
1.1       misho    30869:        zval **container;
                   30870: 
1.1.1.2   misho    30871:        SAVE_OPLINE();
                   30872:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30873: 
1.1       misho    30874:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    30875:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   30876:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    30877:        }
                   30878: 
                   30879:        if (1) {
                   30880:                MAKE_REAL_ZVAL_PTR(property);
                   30881:        }
1.1.1.2   misho    30882:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30883:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30884:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   30885:        }
1.1.1.2   misho    30886: 
                   30887:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    30888:        if (1) {
                   30889:                zval_ptr_dtor(&property);
                   30890:        } else {
                   30891:                zval_dtor(free_op2.var);
                   30892:        }
1.1.1.2   misho    30893:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30894:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30895:        }
                   30896: 
                   30897:        /* We are going to assign the result by reference */
                   30898:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    30899:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   30900: 
                   30901:                Z_DELREF_PP(retval_ptr);
                   30902:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   30903:                Z_ADDREF_PP(retval_ptr);
                   30904:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   30905:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    30906:        }
                   30907: 
1.1.1.2   misho    30908:        CHECK_EXCEPTION();
1.1       misho    30909:        ZEND_VM_NEXT_OPCODE();
                   30910: }
                   30911: 
                   30912: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30913: {
1.1.1.2   misho    30914:        USE_OPLINE
1.1       misho    30915:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    30916:        zval *property;
                   30917:        zval **container;
                   30918: 
                   30919:        SAVE_OPLINE();
                   30920:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30921:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30922: 
                   30923:        if (1) {
                   30924:                MAKE_REAL_ZVAL_PTR(property);
                   30925:        }
1.1.1.2   misho    30926:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    30927:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   30928:        }
1.1.1.2   misho    30929:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    30930:        if (1) {
                   30931:                zval_ptr_dtor(&property);
                   30932:        } else {
                   30933:                zval_dtor(free_op2.var);
                   30934:        }
1.1.1.2   misho    30935:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   30936:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    30937:        }
                   30938: 
1.1.1.2   misho    30939:        CHECK_EXCEPTION();
1.1       misho    30940:        ZEND_VM_NEXT_OPCODE();
                   30941: }
                   30942: 
                   30943: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30944: {
1.1.1.2   misho    30945:        USE_OPLINE
                   30946: 
                   30947:        zval *container;
                   30948:        zend_free_op free_op2;
                   30949:        zval *offset;
                   30950: 
                   30951:        SAVE_OPLINE();
                   30952:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   30953:        offset  = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30954: 
                   30955:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   30956:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   30957:                PZVAL_LOCK(&EG(uninitialized_zval));
                   30958:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   30959:                zval_dtor(free_op2.var);
                   30960:        } else {
                   30961:                zval *retval;
                   30962: 
                   30963:                if (1) {
                   30964:                        MAKE_REAL_ZVAL_PTR(offset);
                   30965:                }
                   30966: 
                   30967:                /* here we are sure we are dealing with an object */
                   30968:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   30969: 
                   30970:                PZVAL_LOCK(retval);
                   30971:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   30972: 
                   30973:                if (1) {
                   30974:                        zval_ptr_dtor(&offset);
                   30975:                } else {
                   30976:                        zval_dtor(free_op2.var);
                   30977:                }
                   30978:        }
                   30979: 
                   30980:        CHECK_EXCEPTION();
                   30981:        ZEND_VM_NEXT_OPCODE();
1.1       misho    30982: }
                   30983: 
                   30984: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   30985: {
1.1.1.2   misho    30986:        USE_OPLINE
1.1       misho    30987: 
1.1.1.2   misho    30988:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    30989:                /* Behave like FETCH_OBJ_W */
                   30990:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    30991:                zval *property;
                   30992:                zval **container;
                   30993: 
                   30994:                SAVE_OPLINE();
                   30995:                property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   30996:                container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    30997: 
                   30998:                if (1) {
                   30999:                        MAKE_REAL_ZVAL_PTR(property);
                   31000:                }
1.1.1.2   misho    31001:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    31002:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   31003:                }
1.1.1.2   misho    31004:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    31005:                if (1) {
                   31006:                        zval_ptr_dtor(&property);
                   31007:                } else {
                   31008:                        zval_dtor(free_op2.var);
                   31009:                }
1.1.1.2   misho    31010:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   31011:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    31012:                }
                   31013: 
1.1.1.2   misho    31014:                CHECK_EXCEPTION();
1.1       misho    31015:                ZEND_VM_NEXT_OPCODE();
                   31016:        } else {
1.1.1.2   misho    31017:                return zend_fetch_property_address_read_helper_SPEC_CV_TMP(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    31018:        }
                   31019: }
                   31020: 
                   31021: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31022: {
1.1.1.2   misho    31023:        USE_OPLINE
1.1       misho    31024:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    31025:        zval **container;
                   31026:        zval *property;
                   31027: 
                   31028:        SAVE_OPLINE();
                   31029:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   31030:        property = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31031: 
                   31032:        if (IS_CV == IS_CV) {
                   31033:                if (container != &EG(uninitialized_zval_ptr)) {
                   31034:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   31035:                }
                   31036:        }
                   31037:        if (1) {
                   31038:                MAKE_REAL_ZVAL_PTR(property);
                   31039:        }
1.1.1.2   misho    31040:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    31041:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   31042:        }
1.1.1.2   misho    31043:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    31044:        if (1) {
                   31045:                zval_ptr_dtor(&property);
                   31046:        } else {
                   31047:                zval_dtor(free_op2.var);
                   31048:        }
1.1.1.2   misho    31049:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   31050:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    31051:        }
                   31052: 
1.1.1.2   misho    31053:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   31054:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   31055:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    31056:        }
1.1.1.2   misho    31057:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    31058:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    31059:        CHECK_EXCEPTION();
1.1       misho    31060:        ZEND_VM_NEXT_OPCODE();
                   31061: }
                   31062: 
                   31063: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31064: {
1.1.1.2   misho    31065:        USE_OPLINE
1.1       misho    31066:        zend_free_op free_op2;
1.1.1.2   misho    31067:        zval **object_ptr;
                   31068:        zval *property_name;
                   31069: 
                   31070:        SAVE_OPLINE();
                   31071:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   31072:        property_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31073: 
                   31074:        if (1) {
                   31075:                MAKE_REAL_ZVAL_PTR(property_name);
                   31076:        }
1.1.1.2   misho    31077:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    31078:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   31079:        }
1.1.1.2   misho    31080:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    31081:        if (1) {
                   31082:                zval_ptr_dtor(&property_name);
                   31083:        } else {
                   31084:                zval_dtor(free_op2.var);
                   31085:        }
                   31086: 
                   31087:        /* assign_obj has two opcodes! */
1.1.1.2   misho    31088:        CHECK_EXCEPTION();
1.1       misho    31089:        ZEND_VM_INC_OPCODE();
                   31090:        ZEND_VM_NEXT_OPCODE();
                   31091: }
                   31092: 
                   31093: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31094: {
1.1.1.2   misho    31095:        USE_OPLINE
                   31096: 
                   31097:        zval **object_ptr;
1.1       misho    31098: 
1.1.1.2   misho    31099:        SAVE_OPLINE();
                   31100:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31101: 
1.1.1.2   misho    31102:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    31103:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   31104:        }
                   31105:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   31106:                zend_free_op free_op2;
1.1.1.2   misho    31107:                zval *property_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31108: 
                   31109:                if (1) {
                   31110:                        MAKE_REAL_ZVAL_PTR(property_name);
                   31111:                }
1.1.1.2   misho    31112:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    31113:                if (1) {
                   31114:                        zval_ptr_dtor(&property_name);
                   31115:                } else {
                   31116:                        zval_dtor(free_op2.var);
                   31117:                }
                   31118:        } else {
                   31119:                zend_free_op free_op2, free_op_data1, free_op_data2;
                   31120:                zval *value;
1.1.1.2   misho    31121:                zval *dim = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31122:                zval **variable_ptr_ptr;
                   31123: 
1.1.1.2   misho    31124:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    31125:                zval_dtor(free_op2.var);
                   31126: 
1.1.1.2   misho    31127:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   31128:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   31129:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   31130:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   31131:                                if (RETURN_VALUE_USED(opline)) {
                   31132:                                        zval *retval;
                   31133: 
                   31134:                                        ALLOC_ZVAL(retval);
                   31135:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   31136:                                        INIT_PZVAL(retval);
                   31137:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   31138:                                }
                   31139:                        } else if (RETURN_VALUE_USED(opline)) {
                   31140:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   31141:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   31142:                        }
                   31143:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   31144:                        if (IS_TMP_FREE(free_op_data1)) {
                   31145:                                zval_dtor(value);
                   31146:                        }
                   31147:                        if (RETURN_VALUE_USED(opline)) {
                   31148:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   31149:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   31150:                        }
                   31151:                } else {
                   31152:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   31153:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31154:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   31155:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31156:                        } else {
                   31157:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31158:                        }
                   31159:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    31160:                                PZVAL_LOCK(value);
1.1.1.2   misho    31161:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    31162:                        }
                   31163:                }
                   31164:                FREE_OP_VAR_PTR(free_op_data2);
                   31165:                FREE_OP_IF_VAR(free_op_data1);
                   31166:        }
                   31167: 
                   31168:        /* assign_dim has two opcodes! */
1.1.1.2   misho    31169:        CHECK_EXCEPTION();
1.1       misho    31170:        ZEND_VM_INC_OPCODE();
                   31171:        ZEND_VM_NEXT_OPCODE();
                   31172: }
                   31173: 
                   31174: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31175: {
1.1.1.2   misho    31176:        USE_OPLINE
1.1       misho    31177:        zend_free_op free_op2;
1.1.1.2   misho    31178:        zval *value;
                   31179:        zval **variable_ptr_ptr;
1.1       misho    31180: 
1.1.1.2   misho    31181:        SAVE_OPLINE();
                   31182:        value = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   31183:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   31184: 
                   31185:        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   31186:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_TMP_VAR TSRMLS_CC)) {
                   31187:                        if (RETURN_VALUE_USED(opline)) {
                   31188:                                zval *retval;
                   31189: 
                   31190:                                ALLOC_ZVAL(retval);
                   31191:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   31192:                                INIT_PZVAL(retval);
                   31193:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   31194:                        }
                   31195:                } else if (RETURN_VALUE_USED(opline)) {
                   31196:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   31197:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   31198:                }
                   31199:        } else if (IS_CV == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   31200:                if (1) {
                   31201:                        zval_dtor(value);
                   31202:                }
                   31203:                if (RETURN_VALUE_USED(opline)) {
                   31204:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   31205:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   31206:                }
                   31207:        } else {
                   31208:                if (IS_TMP_VAR == IS_TMP_VAR) {
                   31209:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31210:                } else if (IS_TMP_VAR == IS_CONST) {
                   31211:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31212:                } else {
                   31213:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   31214:                }
                   31215:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    31216:                        PZVAL_LOCK(value);
1.1.1.2   misho    31217:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    31218:                }
                   31219:        }
                   31220: 
                   31221:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   31222: 
1.1.1.2   misho    31223:        CHECK_EXCEPTION();
1.1       misho    31224:        ZEND_VM_NEXT_OPCODE();
                   31225: }
                   31226: 
                   31227: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31228: {
1.1.1.2   misho    31229:        USE_OPLINE
1.1       misho    31230:        zval *function_name;
                   31231:        char *function_name_strval;
                   31232:        int function_name_strlen;
                   31233:        zend_free_op free_op2;
                   31234: 
1.1.1.2   misho    31235:        SAVE_OPLINE();
1.1       misho    31236:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   31237: 
1.1.1.2   misho    31238:        function_name = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31239: 
1.1.1.2   misho    31240:        if (IS_TMP_VAR != IS_CONST &&
                   31241:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    31242:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   31243:        }
                   31244: 
                   31245:        function_name_strval = Z_STRVAL_P(function_name);
                   31246:        function_name_strlen = Z_STRLEN_P(function_name);
                   31247: 
1.1.1.2   misho    31248:        EX(object) = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31249: 
1.1.1.2   misho    31250:        if (EXPECTED(EX(object) != NULL) &&
                   31251:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   31252:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    31253: 
1.1.1.2   misho    31254:                if (IS_TMP_VAR != IS_CONST ||
                   31255:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   31256:                    zval *object = EX(object);
                   31257: 
                   31258:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   31259:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   31260:                        }
                   31261: 
                   31262:                        /* First, locate the function. */
                   31263:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_TMP_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   31264:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   31265:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   31266:                        }
                   31267:                        if (IS_TMP_VAR == IS_CONST &&
                   31268:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   31269:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   31270:                            EXPECTED(EX(object) == object)) {
                   31271:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   31272:                        }
1.1       misho    31273:                }
                   31274:        } else {
                   31275:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   31276:        }
                   31277: 
                   31278:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   31279:                EX(object) = NULL;
                   31280:        } else {
                   31281:                if (!PZVAL_IS_REF(EX(object))) {
                   31282:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   31283:                } else {
                   31284:                        zval *this_ptr;
                   31285:                        ALLOC_ZVAL(this_ptr);
                   31286:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   31287:                        zval_copy_ctor(this_ptr);
                   31288:                        EX(object) = this_ptr;
                   31289:                }
                   31290:        }
                   31291: 
                   31292:        zval_dtor(free_op2.var);
                   31293: 
1.1.1.2   misho    31294:        CHECK_EXCEPTION();
1.1       misho    31295:        ZEND_VM_NEXT_OPCODE();
                   31296: }
                   31297: 
                   31298: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31299: {
1.1.1.2   misho    31300:        USE_OPLINE
1.1       misho    31301:        zend_free_op free_op2;
                   31302: 
1.1.1.2   misho    31303:        SAVE_OPLINE();
1.1       misho    31304:        if (IS_CV==IS_VAR) {
1.1.1.2   misho    31305:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    31306:        }
1.1.1.2   misho    31307:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   31308:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31309:                                 _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31310: 
                   31311:        zval_dtor(free_op2.var);
1.1.1.2   misho    31312:        CHECK_EXCEPTION();
1.1       misho    31313:        ZEND_VM_NEXT_OPCODE();
                   31314: }
                   31315: 
                   31316: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31317: {
1.1.1.2   misho    31318:        USE_OPLINE
                   31319: 
1.1       misho    31320:        zval *expr_ptr;
                   31321: 
1.1.1.2   misho    31322:        SAVE_OPLINE();
                   31323:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   31324:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31325: 
1.1.1.2   misho    31326:                if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   31327:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   31328:                }
                   31329:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    31330:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    31331:                Z_ADDREF_P(expr_ptr);
1.1       misho    31332:        } else {
1.1.1.2   misho    31333:                expr_ptr=_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   31334:                if (0) { /* temporary variable */
                   31335:                        zval *new_expr;
1.1       misho    31336: 
1.1.1.2   misho    31337:                        ALLOC_ZVAL(new_expr);
                   31338:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   31339:                        expr_ptr = new_expr;
                   31340:                } else if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    31341:                        zval *new_expr;
                   31342: 
                   31343:                        ALLOC_ZVAL(new_expr);
                   31344:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   31345:                        expr_ptr = new_expr;
                   31346:                        zendi_zval_copy_ctor(*expr_ptr);
                   31347:                } else {
                   31348:                        Z_ADDREF_P(expr_ptr);
                   31349:                }
                   31350:        }
1.1.1.2   misho    31351: 
                   31352:        if (IS_TMP_VAR != IS_UNUSED) {
                   31353:                zend_free_op free_op2;
                   31354:                zval *offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   31355:                ulong hval;
                   31356: 
1.1       misho    31357:                switch (Z_TYPE_P(offset)) {
                   31358:                        case IS_DOUBLE:
1.1.1.2   misho    31359:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   31360:                                goto num_index;
1.1       misho    31361:                        case IS_LONG:
                   31362:                        case IS_BOOL:
1.1.1.2   misho    31363:                                hval = Z_LVAL_P(offset);
                   31364: num_index:
                   31365:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    31366:                                break;
                   31367:                        case IS_STRING:
1.1.1.2   misho    31368:                                if (IS_TMP_VAR == IS_CONST) {
                   31369:                                        hval = Z_HASH_P(offset);
                   31370:                                } else {
                   31371:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   31372:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   31373:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   31374:                                        } else {
                   31375:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   31376:                                        }
                   31377:                                }
                   31378:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    31379:                                break;
                   31380:                        case IS_NULL:
1.1.1.2   misho    31381:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    31382:                                break;
                   31383:                        default:
                   31384:                                zend_error(E_WARNING, "Illegal offset type");
                   31385:                                zval_ptr_dtor(&expr_ptr);
                   31386:                                /* do nothing */
                   31387:                                break;
                   31388:                }
                   31389:                zval_dtor(free_op2.var);
                   31390:        } else {
1.1.1.2   misho    31391:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    31392:        }
1.1.1.2   misho    31393:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
1.1       misho    31394: 
                   31395:        } else {
                   31396: 
                   31397:        }
1.1.1.2   misho    31398:        CHECK_EXCEPTION();
1.1       misho    31399:        ZEND_VM_NEXT_OPCODE();
                   31400: }
                   31401: 
                   31402: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31403: {
1.1.1.2   misho    31404:        USE_OPLINE
1.1       misho    31405: 
1.1.1.2   misho    31406:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    31407:        if (IS_CV == IS_UNUSED) {
                   31408:                ZEND_VM_NEXT_OPCODE();
                   31409: #if 0 || IS_CV != IS_UNUSED
                   31410:        } else {
                   31411:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   31412: #endif
                   31413:        }
                   31414: }
                   31415: 
                   31416: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31417: {
1.1.1.2   misho    31418:        USE_OPLINE
1.1       misho    31419:        zend_free_op free_op2;
1.1.1.2   misho    31420:        zval **container;
1.1       misho    31421:        zval *offset;
1.1.1.2   misho    31422:        ulong hval;
1.1       misho    31423: 
1.1.1.2   misho    31424:        SAVE_OPLINE();
                   31425:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31426:        if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   31427:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   31428:        }
1.1.1.2   misho    31429:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31430: 
                   31431:        if (IS_CV != IS_VAR || container) {
                   31432:                switch (Z_TYPE_PP(container)) {
                   31433:                        case IS_ARRAY: {
                   31434:                                HashTable *ht = Z_ARRVAL_PP(container);
                   31435: 
                   31436:                                switch (Z_TYPE_P(offset)) {
                   31437:                                        case IS_DOUBLE:
1.1.1.2   misho    31438:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    31439:                                                zend_hash_index_del(ht, hval);
                   31440:                                                break;
1.1       misho    31441:                                        case IS_RESOURCE:
                   31442:                                        case IS_BOOL:
                   31443:                                        case IS_LONG:
1.1.1.2   misho    31444:                                                hval = Z_LVAL_P(offset);
                   31445:                                                zend_hash_index_del(ht, hval);
1.1       misho    31446:                                                break;
                   31447:                                        case IS_STRING:
                   31448:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   31449:                                                        Z_ADDREF_P(offset);
                   31450:                                                }
1.1.1.2   misho    31451:                                                if (IS_TMP_VAR == IS_CONST) {
                   31452:                                                        hval = Z_HASH_P(offset);
                   31453:                                                } else {
                   31454:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   31455:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   31456:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   31457:                                                        } else {
                   31458:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    31459:                                                        }
                   31460:                                                }
1.1.1.2   misho    31461:                                                if (ht == &EG(symbol_table)) {
                   31462:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   31463:                                                } else {
                   31464:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   31465:                                                }
                   31466:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   31467:                                                        zval_ptr_dtor(&offset);
                   31468:                                                }
                   31469:                                                break;
                   31470: num_index_dim:
                   31471:                                                zend_hash_index_del(ht, hval);
1.1       misho    31472:                                                if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                   31473:                                                        zval_ptr_dtor(&offset);
                   31474:                                                }
                   31475:                                                break;
                   31476:                                        case IS_NULL:
                   31477:                                                zend_hash_del(ht, "", sizeof(""));
                   31478:                                                break;
                   31479:                                        default:
                   31480:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   31481:                                                break;
                   31482:                                }
                   31483:                                zval_dtor(free_op2.var);
                   31484:                                break;
                   31485:                        }
                   31486:                        case IS_OBJECT:
1.1.1.2   misho    31487:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    31488:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   31489:                                }
                   31490:                                if (1) {
                   31491:                                        MAKE_REAL_ZVAL_PTR(offset);
                   31492:                                }
                   31493:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   31494:                                if (1) {
                   31495:                                        zval_ptr_dtor(&offset);
                   31496:                                } else {
                   31497:                                        zval_dtor(free_op2.var);
                   31498:                                }
                   31499:                                break;
                   31500:                        case IS_STRING:
                   31501:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   31502:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   31503:                        default:
                   31504:                                zval_dtor(free_op2.var);
                   31505:                                break;
                   31506:                }
                   31507:        } else {
                   31508:                zval_dtor(free_op2.var);
                   31509:        }
                   31510: 
1.1.1.2   misho    31511:        CHECK_EXCEPTION();
1.1       misho    31512:        ZEND_VM_NEXT_OPCODE();
                   31513: }
                   31514: 
                   31515: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31516: {
1.1.1.2   misho    31517:        USE_OPLINE
1.1       misho    31518:        zend_free_op free_op2;
1.1.1.2   misho    31519:        zval **container;
                   31520:        zval *offset;
                   31521: 
                   31522:        SAVE_OPLINE();
                   31523:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   31524:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31525: 
                   31526:        if (IS_CV != IS_VAR || container) {
                   31527:                if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   31528:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   31529:                }
                   31530:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   31531:                        if (1) {
                   31532:                                MAKE_REAL_ZVAL_PTR(offset);
                   31533:                        }
                   31534:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    31535:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    31536:                        } else {
                   31537:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   31538:                        }
                   31539:                        if (1) {
                   31540:                                zval_ptr_dtor(&offset);
                   31541:                        } else {
                   31542:                                zval_dtor(free_op2.var);
                   31543:                        }
                   31544:                } else {
                   31545:                        zval_dtor(free_op2.var);
                   31546:                }
                   31547:        } else {
                   31548:                zval_dtor(free_op2.var);
                   31549:        }
                   31550: 
1.1.1.2   misho    31551:        CHECK_EXCEPTION();
1.1       misho    31552:        ZEND_VM_NEXT_OPCODE();
                   31553: }
                   31554: 
                   31555: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   31556: {
1.1.1.2   misho    31557:        USE_OPLINE
                   31558:        zend_free_op free_op2;
                   31559:        zval **container;
1.1       misho    31560:        zval **value = NULL;
                   31561:        int result = 0;
1.1.1.2   misho    31562:        ulong hval;
                   31563:        zval *offset;
1.1       misho    31564: 
1.1.1.2   misho    31565:        SAVE_OPLINE();
                   31566:        container = _get_zval_ptr_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31567: 
1.1.1.2   misho    31568:        offset = _get_zval_ptr_tmp(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    31569: 
1.1.1.2   misho    31570:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   31571:                HashTable *ht;
                   31572:                int isset = 0;
1.1       misho    31573: 
1.1.1.2   misho    31574:                ht = Z_ARRVAL_PP(container);
                   31575: 
                   31576:                switch (Z_TYPE_P(offset)) {
                   31577:                        case IS_DOUBLE:
                   31578:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   31579:                                goto num_index_prop;
                   31580:                        case IS_RESOURCE:
                   31581:                        case IS_BOOL:
                   31582:                        case IS_LONG:
                   31583:                                hval = Z_LVAL_P(offset);
                   31584: num_index_prop:
                   31585:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   31586:                                        isset = 1;
                   31587:                                }
                   31588:                                break;
                   31589:                        case IS_STRING:
                   31590:                                if (IS_TMP_VAR == IS_CONST) {
                   31591:                                        hval = Z_HASH_P(offset);
                   31592:                                } else {
                   31593:                                        if (!prop_dim) {
                   31594:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    31595:                                        }
1.1.1.2   misho    31596:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   31597:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    31598:                                        } else {
1.1.1.2   misho    31599:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    31600:                                        }
1.1.1.2   misho    31601:                                }
                   31602:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   31603:                                        isset = 1;
                   31604:                                }
                   31605:                                break;
                   31606:                        case IS_NULL:
                   31607:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   31608:                                        isset = 1;
                   31609:                                }
                   31610:                                break;
                   31611:                        default:
                   31612:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   31613:                                break;
                   31614:                }
                   31615: 
                   31616:                if (opline->extended_value & ZEND_ISSET) {
                   31617:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   31618:                                result = 0;
                   31619:                        } else {
                   31620:                                result = isset;
1.1       misho    31621:                        }
1.1.1.2   misho    31622:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   31623:                        if (!isset || !i_zend_is_true(*value)) {
                   31624:                                result = 0;
                   31625:                        } else {
                   31626:                                result = 1;
1.1       misho    31627:                        }
1.1.1.2   misho    31628:                }
                   31629:                zval_dtor(free_op2.var);
                   31630:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   31631:                if (1) {
                   31632:                        MAKE_REAL_ZVAL_PTR(offset);
                   31633:                }
                   31634:                if (prop_dim) {
                   31635:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   31636:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    31637:                        } else {
1.1.1.2   misho    31638:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   31639:                                result = 0;
1.1       misho    31640:                        }
1.1.1.2   misho    31641:                } else {
                   31642:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   31643:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    31644:                        } else {
1.1.1.2   misho    31645:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   31646:                                result = 0;
1.1       misho    31647:                        }
1.1.1.2   misho    31648:                }
                   31649:                if (1) {
                   31650:                        zval_ptr_dtor(&offset);
                   31651:                } else {
                   31652:                        zval_dtor(free_op2.var);
                   31653:                }
                   31654:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   31655:                zval tmp;
1.1       misho    31656: 
1.1.1.2   misho    31657:                if (Z_TYPE_P(offset) != IS_LONG) {
                   31658:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   31659:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   31660:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   31661:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    31662:                                zval_copy_ctor(&tmp);
                   31663:                                convert_to_long(&tmp);
                   31664:                                offset = &tmp;
1.1.1.2   misho    31665:                        } else {
                   31666:                                /* can not be converted to proper offset, return "not set" */
                   31667:                                result = 0;
1.1       misho    31668:                        }
1.1.1.2   misho    31669:                }
                   31670:                if (Z_TYPE_P(offset) == IS_LONG) {
                   31671:                        if (opline->extended_value & ZEND_ISSET) {
                   31672:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   31673:                                        result = 1;
                   31674:                                }
                   31675:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   31676:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   31677:                                        result = 1;
1.1       misho    31678:                                }
                   31679:                        }
                   31680:                }
1.1.1.2   misho    31681:                zval_dtor(free_op2.var);
                   31682:        } else {
                   31683:                zval_dtor(free_op2.var);
1.1       misho    31684:        }
                   31685: 
1.1.1.2   misho    31686:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   31687:        if (opline->extended_value & ZEND_ISSET) {
                   31688:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   31689:        } else {
                   31690:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    31691:        }
                   31692: 
1.1.1.2   misho    31693:        CHECK_EXCEPTION();
1.1       misho    31694:        ZEND_VM_NEXT_OPCODE();
                   31695: }
                   31696: 
                   31697: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31698: {
                   31699:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   31700: }
                   31701: 
                   31702: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31703: {
                   31704:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   31705: }
                   31706: 
                   31707: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31708: {
1.1.1.2   misho    31709:        USE_OPLINE
1.1       misho    31710:        zend_free_op free_op2;
                   31711: 
1.1.1.2   misho    31712:        SAVE_OPLINE();
                   31713:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   31714:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31715:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31716: 
                   31717:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31718:        CHECK_EXCEPTION();
1.1       misho    31719:        ZEND_VM_NEXT_OPCODE();
                   31720: }
                   31721: 
                   31722: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31723: {
1.1.1.2   misho    31724:        USE_OPLINE
1.1       misho    31725:        zend_free_op free_op2;
                   31726: 
1.1.1.2   misho    31727:        SAVE_OPLINE();
                   31728:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   31729:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31730:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31731: 
                   31732:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31733:        CHECK_EXCEPTION();
1.1       misho    31734:        ZEND_VM_NEXT_OPCODE();
                   31735: }
                   31736: 
                   31737: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31738: {
1.1.1.2   misho    31739:        USE_OPLINE
1.1       misho    31740:        zend_free_op free_op2;
                   31741: 
1.1.1.2   misho    31742:        SAVE_OPLINE();
                   31743:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   31744:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31745:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31746: 
                   31747:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31748:        CHECK_EXCEPTION();
1.1       misho    31749:        ZEND_VM_NEXT_OPCODE();
                   31750: }
                   31751: 
                   31752: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31753: {
1.1.1.2   misho    31754:        USE_OPLINE
1.1       misho    31755:        zend_free_op free_op2;
                   31756: 
1.1.1.2   misho    31757:        SAVE_OPLINE();
                   31758:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   31759:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31760:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31761: 
                   31762:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31763:        CHECK_EXCEPTION();
1.1       misho    31764:        ZEND_VM_NEXT_OPCODE();
                   31765: }
                   31766: 
                   31767: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31768: {
1.1.1.2   misho    31769:        USE_OPLINE
1.1       misho    31770:        zend_free_op free_op2;
                   31771: 
1.1.1.2   misho    31772:        SAVE_OPLINE();
                   31773:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   31774:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31775:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31776: 
                   31777:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31778:        CHECK_EXCEPTION();
1.1       misho    31779:        ZEND_VM_NEXT_OPCODE();
                   31780: }
                   31781: 
                   31782: static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31783: {
1.1.1.2   misho    31784:        USE_OPLINE
1.1       misho    31785:        zend_free_op free_op2;
                   31786: 
1.1.1.2   misho    31787:        SAVE_OPLINE();
                   31788:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   31789:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31790:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31791: 
                   31792:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31793:        CHECK_EXCEPTION();
1.1       misho    31794:        ZEND_VM_NEXT_OPCODE();
                   31795: }
                   31796: 
                   31797: static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31798: {
1.1.1.2   misho    31799:        USE_OPLINE
1.1       misho    31800:        zend_free_op free_op2;
                   31801: 
1.1.1.2   misho    31802:        SAVE_OPLINE();
                   31803:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   31804:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31805:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31806: 
                   31807:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31808:        CHECK_EXCEPTION();
1.1       misho    31809:        ZEND_VM_NEXT_OPCODE();
                   31810: }
                   31811: 
                   31812: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31813: {
1.1.1.2   misho    31814:        USE_OPLINE
1.1       misho    31815:        zend_free_op free_op2;
                   31816: 
1.1.1.2   misho    31817:        SAVE_OPLINE();
                   31818:        concat_function(&EX_T(opline->result.var).tmp_var,
                   31819:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31820:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31821: 
                   31822:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31823:        CHECK_EXCEPTION();
1.1       misho    31824:        ZEND_VM_NEXT_OPCODE();
                   31825: }
                   31826: 
                   31827: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31828: {
1.1.1.2   misho    31829:        USE_OPLINE
1.1       misho    31830:        zend_free_op free_op2;
                   31831: 
1.1.1.2   misho    31832:        SAVE_OPLINE();
                   31833:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   31834:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31835:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31836: 
                   31837:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31838:        CHECK_EXCEPTION();
1.1       misho    31839:        ZEND_VM_NEXT_OPCODE();
                   31840: }
                   31841: 
                   31842: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31843: {
1.1.1.2   misho    31844:        USE_OPLINE
1.1       misho    31845:        zend_free_op free_op2;
1.1.1.2   misho    31846:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    31847: 
1.1.1.2   misho    31848:        SAVE_OPLINE();
1.1       misho    31849:        is_identical_function(result,
1.1.1.2   misho    31850:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31851:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31852:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   31853: 
                   31854:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31855:        CHECK_EXCEPTION();
1.1       misho    31856:        ZEND_VM_NEXT_OPCODE();
                   31857: }
                   31858: 
                   31859: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31860: {
1.1.1.2   misho    31861:        USE_OPLINE
1.1       misho    31862:        zend_free_op free_op2;
1.1.1.2   misho    31863:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    31864: 
1.1.1.2   misho    31865:        SAVE_OPLINE();
                   31866:        ZVAL_BOOL(result, fast_equal_function(result,
                   31867:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31868:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    31869: 
                   31870:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31871:        CHECK_EXCEPTION();
1.1       misho    31872:        ZEND_VM_NEXT_OPCODE();
                   31873: }
                   31874: 
                   31875: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31876: {
1.1.1.2   misho    31877:        USE_OPLINE
1.1       misho    31878:        zend_free_op free_op2;
1.1.1.2   misho    31879:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    31880: 
1.1.1.2   misho    31881:        SAVE_OPLINE();
                   31882:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   31883:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31884:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    31885: 
                   31886:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31887:        CHECK_EXCEPTION();
1.1       misho    31888:        ZEND_VM_NEXT_OPCODE();
                   31889: }
                   31890: 
                   31891: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31892: {
1.1.1.2   misho    31893:        USE_OPLINE
1.1       misho    31894:        zend_free_op free_op2;
1.1.1.2   misho    31895:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    31896: 
1.1.1.2   misho    31897:        SAVE_OPLINE();
                   31898:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   31899:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31900:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    31901: 
                   31902:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31903:        CHECK_EXCEPTION();
1.1       misho    31904:        ZEND_VM_NEXT_OPCODE();
                   31905: }
                   31906: 
                   31907: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31908: {
1.1.1.2   misho    31909:        USE_OPLINE
1.1       misho    31910:        zend_free_op free_op2;
1.1.1.2   misho    31911:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    31912: 
1.1.1.2   misho    31913:        SAVE_OPLINE();
                   31914:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   31915:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31916:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC));
1.1       misho    31917: 
                   31918:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31919:        CHECK_EXCEPTION();
1.1       misho    31920:        ZEND_VM_NEXT_OPCODE();
                   31921: }
                   31922: 
                   31923: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31924: {
1.1.1.2   misho    31925:        USE_OPLINE
1.1       misho    31926:        zend_free_op free_op2;
                   31927: 
1.1.1.2   misho    31928:        SAVE_OPLINE();
                   31929:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   31930:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31931:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31932: 
                   31933:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31934:        CHECK_EXCEPTION();
1.1       misho    31935:        ZEND_VM_NEXT_OPCODE();
                   31936: }
                   31937: 
                   31938: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31939: {
1.1.1.2   misho    31940:        USE_OPLINE
1.1       misho    31941:        zend_free_op free_op2;
                   31942: 
1.1.1.2   misho    31943:        SAVE_OPLINE();
                   31944:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   31945:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31946:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31947: 
                   31948:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31949:        CHECK_EXCEPTION();
1.1       misho    31950:        ZEND_VM_NEXT_OPCODE();
                   31951: }
                   31952: 
                   31953: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31954: {
1.1.1.2   misho    31955:        USE_OPLINE
1.1       misho    31956:        zend_free_op free_op2;
                   31957: 
1.1.1.2   misho    31958:        SAVE_OPLINE();
                   31959:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   31960:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31961:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31962: 
                   31963:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31964:        CHECK_EXCEPTION();
1.1       misho    31965:        ZEND_VM_NEXT_OPCODE();
                   31966: }
                   31967: 
                   31968: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   31969: {
1.1.1.2   misho    31970:        USE_OPLINE
1.1       misho    31971:        zend_free_op free_op2;
                   31972: 
1.1.1.2   misho    31973:        SAVE_OPLINE();
                   31974:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   31975:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   31976:                _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    31977: 
                   31978:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    31979:        CHECK_EXCEPTION();
1.1       misho    31980:        ZEND_VM_NEXT_OPCODE();
                   31981: }
                   31982: 
                   31983: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   31984: {
1.1.1.2   misho    31985:        USE_OPLINE
1.1       misho    31986:        zend_free_op free_op2, free_op_data1;
1.1.1.2   misho    31987:        zval **object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    31988:        zval *object;
1.1.1.2   misho    31989:        zval *property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   31990:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    31991:        int have_get_ptr = 0;
                   31992: 
1.1.1.2   misho    31993:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    31994:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   31995:        }
                   31996: 
                   31997:        make_real_object(object_ptr TSRMLS_CC);
                   31998:        object = *object_ptr;
                   31999: 
1.1.1.2   misho    32000:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    32001:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   32002:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32003:                FREE_OP(free_op_data1);
                   32004: 
1.1.1.2   misho    32005:                if (RETURN_VALUE_USED(opline)) {
                   32006:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   32007:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   32008:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    32009:                }
                   32010:        } else {
                   32011:                /* here we are sure we are dealing with an object */
                   32012:                if (0) {
                   32013:                        MAKE_REAL_ZVAL_PTR(property);
                   32014:                }
                   32015: 
                   32016:                /* here property is a string */
                   32017:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   32018:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    32019:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32020:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   32021:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   32022: 
                   32023:                                have_get_ptr = 1;
                   32024:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    32025:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    32026:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    32027:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   32028:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    32029:                                }
                   32030:                        }
                   32031:                }
                   32032: 
                   32033:                if (!have_get_ptr) {
                   32034:                        zval *z = NULL;
                   32035: 
                   32036:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   32037:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    32038:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32039:                                }
                   32040:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   32041:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   32042:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   32043:                                }
                   32044:                        }
                   32045:                        if (z) {
                   32046:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   32047:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   32048: 
                   32049:                                        if (Z_REFCOUNT_P(z) == 0) {
                   32050:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   32051:                                                zval_dtor(z);
                   32052:                                                FREE_ZVAL(z);
                   32053:                                        }
                   32054:                                        z = value;
                   32055:                                }
                   32056:                                Z_ADDREF_P(z);
                   32057:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   32058:                                binary_op(z, z, value TSRMLS_CC);
                   32059:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    32060:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32061:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   32062:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   32063:                                }
1.1.1.2   misho    32064:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    32065:                                        PZVAL_LOCK(z);
1.1.1.2   misho    32066:                                        EX_T(opline->result.var).var.ptr = z;
                   32067:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    32068:                                }
                   32069:                                zval_ptr_dtor(&z);
                   32070:                        } else {
                   32071:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    32072:                                if (RETURN_VALUE_USED(opline)) {
                   32073:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   32074:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   32075:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    32076:                                }
                   32077:                        }
                   32078:                }
                   32079: 
                   32080:                if (0) {
                   32081:                        zval_ptr_dtor(&property);
                   32082:                } else {
                   32083:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32084:                }
                   32085:                FREE_OP(free_op_data1);
                   32086:        }
                   32087: 
                   32088:        /* assign_obj has two opcodes! */
1.1.1.2   misho    32089:        CHECK_EXCEPTION();
1.1       misho    32090:        ZEND_VM_INC_OPCODE();
                   32091:        ZEND_VM_NEXT_OPCODE();
                   32092: }
                   32093: 
                   32094: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   32095: {
1.1.1.2   misho    32096:        USE_OPLINE
1.1       misho    32097:        zend_free_op free_op2, free_op_data2, free_op_data1;
                   32098:        zval **var_ptr;
                   32099:        zval *value;
                   32100: 
1.1.1.2   misho    32101:        SAVE_OPLINE();
1.1       misho    32102:        switch (opline->extended_value) {
                   32103:                case ZEND_ASSIGN_OBJ:
                   32104:                        return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32105:                        break;
                   32106:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    32107:                                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32108: 
1.1.1.2   misho    32109:                                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32110:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    32111:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    32112:                                        if (IS_CV == IS_VAR && !0) {
                   32113:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   32114:                                        }
                   32115:                                        return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32116:                                } else {
1.1.1.2   misho    32117:                                        zval *dim = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    32118: 
1.1.1.2   misho    32119:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
                   32120:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   32121:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    32122:                                }
                   32123:                        }
                   32124:                        break;
                   32125:                default:
1.1.1.2   misho    32126:                        value = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32127:                        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32128:                        /* do nothing */
                   32129:                        break;
                   32130:        }
                   32131: 
1.1.1.2   misho    32132:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    32133:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   32134:        }
                   32135: 
1.1.1.2   misho    32136:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   32137:                if (RETURN_VALUE_USED(opline)) {
                   32138:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   32139:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    32140:                }
                   32141:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32142: 
1.1.1.2   misho    32143:                CHECK_EXCEPTION();
                   32144:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   32145:                        ZEND_VM_INC_OPCODE();
                   32146:                }
1.1       misho    32147:                ZEND_VM_NEXT_OPCODE();
                   32148:        }
                   32149: 
                   32150:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   32151: 
1.1.1.2   misho    32152:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   32153:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    32154:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   32155:                /* proxy object */
                   32156:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   32157:                Z_ADDREF_P(objval);
                   32158:                binary_op(objval, objval, value TSRMLS_CC);
                   32159:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   32160:                zval_ptr_dtor(&objval);
                   32161:        } else {
                   32162:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   32163:        }
                   32164: 
1.1.1.2   misho    32165:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    32166:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    32167:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    32168:        }
                   32169:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32170: 
                   32171:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   32172:                FREE_OP(free_op_data1);
                   32173:                FREE_OP_VAR_PTR(free_op_data2);
                   32174: 
1.1.1.2   misho    32175:                CHECK_EXCEPTION();
                   32176:                ZEND_VM_INC_OPCODE();
                   32177:        } else {
                   32178: 
                   32179:                CHECK_EXCEPTION();
                   32180:        }
1.1       misho    32181:        ZEND_VM_NEXT_OPCODE();
                   32182: }
                   32183: 
                   32184: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32185: {
                   32186:        return zend_binary_assign_op_helper_SPEC_CV_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32187: }
                   32188: 
                   32189: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32190: {
                   32191:        return zend_binary_assign_op_helper_SPEC_CV_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32192: }
                   32193: 
                   32194: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32195: {
                   32196:        return zend_binary_assign_op_helper_SPEC_CV_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32197: }
                   32198: 
                   32199: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32200: {
                   32201:        return zend_binary_assign_op_helper_SPEC_CV_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32202: }
                   32203: 
                   32204: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32205: {
                   32206:        return zend_binary_assign_op_helper_SPEC_CV_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32207: }
                   32208: 
                   32209: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32210: {
                   32211:        return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32212: }
                   32213: 
                   32214: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32215: {
                   32216:        return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32217: }
                   32218: 
                   32219: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32220: {
                   32221:        return zend_binary_assign_op_helper_SPEC_CV_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32222: }
                   32223: 
                   32224: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32225: {
                   32226:        return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32227: }
                   32228: 
                   32229: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32230: {
                   32231:        return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32232: }
                   32233: 
                   32234: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32235: {
                   32236:        return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32237: }
                   32238: 
                   32239: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   32240: {
1.1.1.2   misho    32241:        USE_OPLINE
1.1       misho    32242:        zend_free_op free_op2;
1.1.1.2   misho    32243:        zval **object_ptr;
1.1       misho    32244:        zval *object;
1.1.1.2   misho    32245:        zval *property;
                   32246:        zval **retval;
1.1       misho    32247:        int have_get_ptr = 0;
                   32248: 
1.1.1.2   misho    32249:        SAVE_OPLINE();
                   32250:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32251:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32252:        retval = &EX_T(opline->result.var).var.ptr;
                   32253: 
                   32254:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    32255:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   32256:        }
                   32257: 
                   32258:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   32259:        object = *object_ptr;
                   32260: 
1.1.1.2   misho    32261:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    32262:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   32263:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    32264:                if (RETURN_VALUE_USED(opline)) {
                   32265:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   32266:                        *retval = &EG(uninitialized_zval);
1.1       misho    32267:                }
                   32268: 
1.1.1.2   misho    32269:                CHECK_EXCEPTION();
1.1       misho    32270:                ZEND_VM_NEXT_OPCODE();
                   32271:        }
                   32272: 
                   32273:        /* here we are sure we are dealing with an object */
                   32274: 
                   32275:        if (0) {
                   32276:                MAKE_REAL_ZVAL_PTR(property);
                   32277:        }
                   32278: 
                   32279:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    32280:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32281:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   32282:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   32283: 
                   32284:                        have_get_ptr = 1;
                   32285:                        incdec_op(*zptr);
1.1.1.2   misho    32286:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    32287:                                *retval = *zptr;
                   32288:                                PZVAL_LOCK(*retval);
                   32289:                        }
                   32290:                }
                   32291:        }
                   32292: 
                   32293:        if (!have_get_ptr) {
                   32294:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    32295:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32296: 
1.1.1.2   misho    32297:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    32298:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   32299: 
                   32300:                                if (Z_REFCOUNT_P(z) == 0) {
                   32301:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   32302:                                        zval_dtor(z);
                   32303:                                        FREE_ZVAL(z);
                   32304:                                }
                   32305:                                z = value;
                   32306:                        }
                   32307:                        Z_ADDREF_P(z);
                   32308:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   32309:                        incdec_op(z);
                   32310:                        *retval = z;
1.1.1.2   misho    32311:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   32312:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    32313:                        zval_ptr_dtor(&z);
                   32314:                } else {
                   32315:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    32316:                        if (RETURN_VALUE_USED(opline)) {
                   32317:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   32318:                                *retval = &EG(uninitialized_zval);
1.1       misho    32319:                        }
                   32320:                }
                   32321:        }
                   32322: 
                   32323:        if (0) {
                   32324:                zval_ptr_dtor(&property);
                   32325:        } else {
                   32326:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32327:        }
                   32328: 
1.1.1.2   misho    32329:        CHECK_EXCEPTION();
1.1       misho    32330:        ZEND_VM_NEXT_OPCODE();
                   32331: }
                   32332: 
                   32333: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32334: {
                   32335:        return zend_pre_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32336: }
                   32337: 
                   32338: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32339: {
                   32340:        return zend_pre_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32341: }
                   32342: 
                   32343: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   32344: {
1.1.1.2   misho    32345:        USE_OPLINE
1.1       misho    32346:        zend_free_op free_op2;
1.1.1.2   misho    32347:        zval **object_ptr;
1.1       misho    32348:        zval *object;
1.1.1.2   misho    32349:        zval *property;
                   32350:        zval *retval;
1.1       misho    32351:        int have_get_ptr = 0;
                   32352: 
1.1.1.2   misho    32353:        SAVE_OPLINE();
                   32354:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32355:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32356:        retval = &EX_T(opline->result.var).tmp_var;
                   32357: 
                   32358:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    32359:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   32360:        }
                   32361: 
                   32362:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   32363:        object = *object_ptr;
                   32364: 
1.1.1.2   misho    32365:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    32366:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   32367:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    32368:                ZVAL_NULL(retval);
1.1       misho    32369: 
1.1.1.2   misho    32370:                CHECK_EXCEPTION();
1.1       misho    32371:                ZEND_VM_NEXT_OPCODE();
                   32372:        }
                   32373: 
                   32374:        /* here we are sure we are dealing with an object */
                   32375: 
                   32376:        if (0) {
                   32377:                MAKE_REAL_ZVAL_PTR(property);
                   32378:        }
                   32379: 
                   32380:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    32381:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32382:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   32383:                        have_get_ptr = 1;
                   32384:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   32385: 
1.1.1.2   misho    32386:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    32387:                        zendi_zval_copy_ctor(*retval);
                   32388: 
                   32389:                        incdec_op(*zptr);
                   32390: 
                   32391:                }
                   32392:        }
                   32393: 
                   32394:        if (!have_get_ptr) {
                   32395:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    32396:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32397:                        zval *z_copy;
                   32398: 
1.1.1.2   misho    32399:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    32400:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   32401: 
                   32402:                                if (Z_REFCOUNT_P(z) == 0) {
                   32403:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   32404:                                        zval_dtor(z);
                   32405:                                        FREE_ZVAL(z);
                   32406:                                }
                   32407:                                z = value;
                   32408:                        }
1.1.1.2   misho    32409:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    32410:                        zendi_zval_copy_ctor(*retval);
                   32411:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    32412:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    32413:                        zendi_zval_copy_ctor(*z_copy);
                   32414:                        incdec_op(z_copy);
                   32415:                        Z_ADDREF_P(z);
1.1.1.2   misho    32416:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32417:                        zval_ptr_dtor(&z_copy);
                   32418:                        zval_ptr_dtor(&z);
                   32419:                } else {
                   32420:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    32421:                        ZVAL_NULL(retval);
                   32422:                }
                   32423:        }
                   32424: 
                   32425:        if (0) {
                   32426:                zval_ptr_dtor(&property);
                   32427:        } else {
                   32428:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32429:        }
                   32430: 
                   32431:        CHECK_EXCEPTION();
                   32432:        ZEND_VM_NEXT_OPCODE();
                   32433: }
                   32434: 
                   32435: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32436: {
                   32437:        return zend_post_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32438: }
                   32439: 
                   32440: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32441: {
                   32442:        return zend_post_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32443: }
                   32444: 
                   32445: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
                   32446: {
                   32447:        USE_OPLINE
                   32448:        zend_free_op free_op1;
                   32449:        zval *varname;
                   32450:        zval **retval;
                   32451:        zval tmp_varname;
                   32452:        HashTable *target_symbol_table;
                   32453:        ulong hash_value;
                   32454: 
                   32455:        SAVE_OPLINE();
                   32456:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32457: 
                   32458:        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   32459:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   32460:                zval_copy_ctor(&tmp_varname);
                   32461:                Z_SET_REFCOUNT(tmp_varname, 1);
                   32462:                Z_UNSET_ISREF(tmp_varname);
                   32463:                convert_to_string(&tmp_varname);
                   32464:                varname = &tmp_varname;
                   32465:        }
                   32466: 
                   32467:        if (IS_VAR != IS_UNUSED) {
                   32468:                zend_class_entry *ce;
                   32469: 
                   32470:                if (IS_VAR == IS_CONST) {
                   32471:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   32472:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   32473:                        } else {
                   32474:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   32475:                                if (UNEXPECTED(ce == NULL)) {
                   32476:                                        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   32477:                                                zval_dtor(&tmp_varname);
                   32478:                                        }
                   32479: 
                   32480:                                        CHECK_EXCEPTION();
                   32481:                                        ZEND_VM_NEXT_OPCODE();
                   32482:                                }
                   32483:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   32484:                        }
                   32485:                } else {
                   32486:                        ce = EX_T(opline->op2.var).class_entry;
                   32487:                }
                   32488:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   32489: 
                   32490:        } else {
                   32491:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   32492: /*
                   32493:                if (!target_symbol_table) {
                   32494:                        CHECK_EXCEPTION();
                   32495:                        ZEND_VM_NEXT_OPCODE();
                   32496:                }
                   32497: */
                   32498:                if (IS_CV == IS_CONST) {
                   32499:                        hash_value = Z_HASH_P(varname);
                   32500:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   32501:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   32502:                } else {
                   32503:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   32504:                }
                   32505: 
                   32506:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   32507:                        switch (type) {
                   32508:                                case BP_VAR_R:
                   32509:                                case BP_VAR_UNSET:
                   32510:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   32511:                                        /* break missing intentionally */
                   32512:                                case BP_VAR_IS:
                   32513:                                        retval = &EG(uninitialized_zval_ptr);
                   32514:                                        break;
                   32515:                                case BP_VAR_RW:
                   32516:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   32517:                                        /* break missing intentionally */
                   32518:                                case BP_VAR_W:
                   32519:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   32520:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   32521:                                        break;
                   32522:                                EMPTY_SWITCH_DEFAULT_CASE()
                   32523:                        }
                   32524:                }
                   32525:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   32526:                        case ZEND_FETCH_GLOBAL:
                   32527:                                if (IS_CV != IS_TMP_VAR) {
                   32528: 
                   32529:                                }
                   32530:                                break;
                   32531:                        case ZEND_FETCH_LOCAL:
                   32532: 
                   32533:                                break;
                   32534:                        case ZEND_FETCH_STATIC:
                   32535:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   32536:                                break;
                   32537:                        case ZEND_FETCH_GLOBAL_LOCK:
                   32538:                                if (IS_CV == IS_VAR && !free_op1.var) {
                   32539:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   32540:                                }
                   32541:                                break;
                   32542:                }
                   32543:        }
                   32544: 
                   32545: 
                   32546:        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   32547:                zval_dtor(&tmp_varname);
                   32548:        }
                   32549:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   32550:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   32551:        }
                   32552:        PZVAL_LOCK(*retval);
                   32553:        switch (type) {
                   32554:                case BP_VAR_R:
                   32555:                case BP_VAR_IS:
                   32556:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   32557:                        break;
                   32558:                case BP_VAR_UNSET: {
                   32559:                        zend_free_op free_res;
                   32560: 
                   32561:                        PZVAL_UNLOCK(*retval, &free_res);
                   32562:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   32563:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   32564:                        }
                   32565:                        PZVAL_LOCK(*retval);
                   32566:                        FREE_OP_VAR_PTR(free_res);
1.1       misho    32567:                }
1.1.1.2   misho    32568:                /* break missing intentionally */
                   32569:                default:
                   32570:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   32571:                        break;
1.1       misho    32572:        }
1.1.1.2   misho    32573:        CHECK_EXCEPTION();
                   32574:        ZEND_VM_NEXT_OPCODE();
                   32575: }
                   32576: 
                   32577: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32578: {
                   32579:        return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32580: }
                   32581: 
                   32582: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32583: {
                   32584:        return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32585: }
1.1       misho    32586: 
1.1.1.2   misho    32587: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32588: {
                   32589:        return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   32590: }
1.1       misho    32591: 
1.1.1.2   misho    32592: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32593: {
                   32594:        USE_OPLINE
                   32595: 
                   32596:        return zend_fetch_var_address_helper_SPEC_CV_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    32597: }
                   32598: 
1.1.1.2   misho    32599: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    32600: {
1.1.1.2   misho    32601:        return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    32602: }
                   32603: 
1.1.1.2   misho    32604: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    32605: {
1.1.1.2   misho    32606:        return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    32607: }
                   32608: 
                   32609: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32610: {
1.1.1.2   misho    32611:        USE_OPLINE
1.1       misho    32612:        zend_free_op free_op2;
1.1.1.5 ! misho    32613:        zval *container;
1.1       misho    32614: 
1.1.1.2   misho    32615:        SAVE_OPLINE();
                   32616: 
1.1.1.5 ! misho    32617:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          32618:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    32619:        }
1.1.1.5 ! misho    32620:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    32621:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
1.1       misho    32622:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32623: 
1.1.1.2   misho    32624:        CHECK_EXCEPTION();
1.1       misho    32625:        ZEND_VM_NEXT_OPCODE();
                   32626: }
                   32627: 
                   32628: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32629: {
1.1.1.2   misho    32630:        USE_OPLINE
1.1       misho    32631:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    32632:        zval **container;
1.1       misho    32633: 
1.1.1.2   misho    32634:        SAVE_OPLINE();
                   32635:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32636: 
                   32637:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32638:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   32639:        }
1.1.1.2   misho    32640:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    32641:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    32642:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32643:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32644:        }
                   32645: 
                   32646:        /* We are going to assign the result by reference */
1.1.1.2   misho    32647:        if (UNEXPECTED(opline->extended_value != 0)) {
                   32648:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   32649: 
                   32650:                if (retval_ptr) {
                   32651:                        Z_DELREF_PP(retval_ptr);
                   32652:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   32653:                        Z_ADDREF_PP(retval_ptr);
                   32654:                }
1.1       misho    32655:        }
                   32656: 
1.1.1.2   misho    32657:        CHECK_EXCEPTION();
1.1       misho    32658:        ZEND_VM_NEXT_OPCODE();
                   32659: }
                   32660: 
                   32661: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32662: {
1.1.1.2   misho    32663:        USE_OPLINE
1.1       misho    32664:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    32665:        zval **container;
                   32666: 
                   32667:        SAVE_OPLINE();
                   32668:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32669: 
1.1.1.2   misho    32670:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32671:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   32672:        }
1.1.1.2   misho    32673:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_RW TSRMLS_CC);
1.1       misho    32674:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    32675:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32676:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32677:        }
                   32678: 
1.1.1.2   misho    32679:        CHECK_EXCEPTION();
1.1       misho    32680:        ZEND_VM_NEXT_OPCODE();
                   32681: }
                   32682: 
                   32683: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32684: {
1.1.1.2   misho    32685:        USE_OPLINE
1.1       misho    32686:        zend_free_op free_op2;
1.1.1.5 ! misho    32687:        zval *container;
1.1       misho    32688: 
1.1.1.2   misho    32689:        SAVE_OPLINE();
1.1.1.5 ! misho    32690:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    32691:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
1.1       misho    32692:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32693: 
1.1.1.2   misho    32694:        CHECK_EXCEPTION();
1.1       misho    32695:        ZEND_VM_NEXT_OPCODE();
                   32696: }
                   32697: 
                   32698: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32699: {
1.1.1.2   misho    32700:        USE_OPLINE
1.1       misho    32701:        zend_free_op free_op1, free_op2;
                   32702: 
1.1.1.2   misho    32703:        SAVE_OPLINE();
                   32704: 
                   32705:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    32706:                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
        !          32707: 
1.1.1.2   misho    32708:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32709:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   32710:                }
1.1.1.2   misho    32711:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
                   32712:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32713:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32714:                }
1.1.1.5 ! misho    32715:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        !          32716: 
1.1       misho    32717:        } else {
1.1.1.5 ! misho    32718:                zval *container;
        !          32719: 
1.1       misho    32720:                if (IS_VAR == IS_UNUSED) {
                   32721:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   32722:                }
1.1.1.5 ! misho    32723:                container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    32724:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
1.1.1.5 ! misho    32725:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    32726: 
1.1.1.5 ! misho    32727:        }
1.1.1.2   misho    32728:        CHECK_EXCEPTION();
1.1       misho    32729:        ZEND_VM_NEXT_OPCODE();
                   32730: }
                   32731: 
                   32732: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32733: {
1.1.1.2   misho    32734:        USE_OPLINE
1.1       misho    32735:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    32736:        zval **container;
                   32737: 
                   32738:        SAVE_OPLINE();
                   32739:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32740: 
                   32741:        if (IS_CV == IS_CV) {
                   32742:                if (container != &EG(uninitialized_zval_ptr)) {
                   32743:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   32744:                }
                   32745:        }
1.1.1.2   misho    32746:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32747:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   32748:        }
1.1.1.2   misho    32749:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    32750:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    32751:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32752:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32753:        }
                   32754: 
1.1.1.2   misho    32755:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    32756:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   32757:        } else {
                   32758:                zend_free_op free_res;
1.1.1.2   misho    32759:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    32760: 
1.1.1.2   misho    32761:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   32762:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   32763:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    32764:                }
1.1.1.2   misho    32765:                PZVAL_LOCK(*retval_ptr);
1.1       misho    32766:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    32767:                CHECK_EXCEPTION();
                   32768:                ZEND_VM_NEXT_OPCODE();
1.1       misho    32769:        }
                   32770: }
                   32771: 
1.1.1.2   misho    32772: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_VAR(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    32773: {
1.1.1.2   misho    32774:        USE_OPLINE
1.1       misho    32775: 
1.1.1.2   misho    32776:        zval *container;
1.1       misho    32777:        zend_free_op free_op2;
1.1.1.2   misho    32778:        zval *offset;
1.1       misho    32779: 
1.1.1.2   misho    32780:        SAVE_OPLINE();
                   32781:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32782:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32783: 
                   32784:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   32785:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   32786:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   32787:                PZVAL_LOCK(&EG(uninitialized_zval));
                   32788:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    32789:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32790:        } else {
                   32791:                zval *retval;
                   32792: 
                   32793:                if (0) {
                   32794:                        MAKE_REAL_ZVAL_PTR(offset);
                   32795:                }
                   32796: 
                   32797:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    32798:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    32799: 
1.1.1.2   misho    32800:                PZVAL_LOCK(retval);
                   32801:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    32802: 
                   32803:                if (0) {
                   32804:                        zval_ptr_dtor(&offset);
                   32805:                } else {
                   32806:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32807:                }
                   32808:        }
                   32809: 
1.1.1.2   misho    32810:        CHECK_EXCEPTION();
1.1       misho    32811:        ZEND_VM_NEXT_OPCODE();
                   32812: }
                   32813: 
                   32814: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32815: {
1.1.1.2   misho    32816:        return zend_fetch_property_address_read_helper_SPEC_CV_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    32817: }
                   32818: 
                   32819: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32820: {
1.1.1.2   misho    32821:        USE_OPLINE
1.1       misho    32822:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    32823:        zval *property;
1.1       misho    32824:        zval **container;
                   32825: 
1.1.1.2   misho    32826:        SAVE_OPLINE();
                   32827:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32828: 
1.1       misho    32829:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    32830:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   32831:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    32832:        }
                   32833: 
                   32834:        if (0) {
                   32835:                MAKE_REAL_ZVAL_PTR(property);
                   32836:        }
1.1.1.2   misho    32837:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32838:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32839:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   32840:        }
1.1.1.2   misho    32841: 
                   32842:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    32843:        if (0) {
                   32844:                zval_ptr_dtor(&property);
                   32845:        } else {
                   32846:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32847:        }
1.1.1.2   misho    32848:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32849:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32850:        }
                   32851: 
                   32852:        /* We are going to assign the result by reference */
                   32853:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    32854:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   32855: 
                   32856:                Z_DELREF_PP(retval_ptr);
                   32857:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   32858:                Z_ADDREF_PP(retval_ptr);
                   32859:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   32860:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    32861:        }
                   32862: 
1.1.1.2   misho    32863:        CHECK_EXCEPTION();
1.1       misho    32864:        ZEND_VM_NEXT_OPCODE();
                   32865: }
                   32866: 
                   32867: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32868: {
1.1.1.2   misho    32869:        USE_OPLINE
1.1       misho    32870:        zend_free_op free_op1, free_op2;
1.1.1.2   misho    32871:        zval *property;
                   32872:        zval **container;
                   32873: 
                   32874:        SAVE_OPLINE();
                   32875:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32876:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32877: 
                   32878:        if (0) {
                   32879:                MAKE_REAL_ZVAL_PTR(property);
                   32880:        }
1.1.1.2   misho    32881:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32882:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   32883:        }
1.1.1.2   misho    32884:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    32885:        if (0) {
                   32886:                zval_ptr_dtor(&property);
                   32887:        } else {
                   32888:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32889:        }
1.1.1.2   misho    32890:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32891:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32892:        }
                   32893: 
1.1.1.2   misho    32894:        CHECK_EXCEPTION();
1.1       misho    32895:        ZEND_VM_NEXT_OPCODE();
                   32896: }
                   32897: 
                   32898: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32899: {
1.1.1.2   misho    32900:        USE_OPLINE
                   32901: 
                   32902:        zval *container;
                   32903:        zend_free_op free_op2;
                   32904:        zval *offset;
                   32905: 
                   32906:        SAVE_OPLINE();
                   32907:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32908:        offset  = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32909: 
                   32910:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   32911:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   32912:                PZVAL_LOCK(&EG(uninitialized_zval));
                   32913:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   32914:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32915:        } else {
                   32916:                zval *retval;
                   32917: 
                   32918:                if (0) {
                   32919:                        MAKE_REAL_ZVAL_PTR(offset);
                   32920:                }
                   32921: 
                   32922:                /* here we are sure we are dealing with an object */
                   32923:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   32924: 
                   32925:                PZVAL_LOCK(retval);
                   32926:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   32927: 
                   32928:                if (0) {
                   32929:                        zval_ptr_dtor(&offset);
                   32930:                } else {
                   32931:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32932:                }
                   32933:        }
                   32934: 
                   32935:        CHECK_EXCEPTION();
                   32936:        ZEND_VM_NEXT_OPCODE();
1.1       misho    32937: }
                   32938: 
                   32939: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32940: {
1.1.1.2   misho    32941:        USE_OPLINE
1.1       misho    32942: 
1.1.1.2   misho    32943:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    32944:                /* Behave like FETCH_OBJ_W */
                   32945:                zend_free_op free_op1, free_op2;
1.1.1.2   misho    32946:                zval *property;
                   32947:                zval **container;
                   32948: 
                   32949:                SAVE_OPLINE();
                   32950:                property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   32951:                container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    32952: 
                   32953:                if (0) {
                   32954:                        MAKE_REAL_ZVAL_PTR(property);
                   32955:                }
1.1.1.2   misho    32956:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32957:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   32958:                }
1.1.1.2   misho    32959:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    32960:                if (0) {
                   32961:                        zval_ptr_dtor(&property);
                   32962:                } else {
                   32963:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   32964:                }
1.1.1.2   misho    32965:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   32966:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    32967:                }
                   32968: 
1.1.1.2   misho    32969:                CHECK_EXCEPTION();
1.1       misho    32970:                ZEND_VM_NEXT_OPCODE();
                   32971:        } else {
1.1.1.2   misho    32972:                return zend_fetch_property_address_read_helper_SPEC_CV_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    32973:        }
                   32974: }
                   32975: 
                   32976: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   32977: {
1.1.1.2   misho    32978:        USE_OPLINE
1.1       misho    32979:        zend_free_op free_op1, free_op2, free_res;
1.1.1.2   misho    32980:        zval **container;
                   32981:        zval *property;
                   32982: 
                   32983:        SAVE_OPLINE();
                   32984:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   32985:        property = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    32986: 
                   32987:        if (IS_CV == IS_CV) {
                   32988:                if (container != &EG(uninitialized_zval_ptr)) {
                   32989:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   32990:                }
                   32991:        }
                   32992:        if (0) {
                   32993:                MAKE_REAL_ZVAL_PTR(property);
                   32994:        }
1.1.1.2   misho    32995:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    32996:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   32997:        }
1.1.1.2   misho    32998:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    32999:        if (0) {
                   33000:                zval_ptr_dtor(&property);
                   33001:        } else {
                   33002:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33003:        }
1.1.1.2   misho    33004:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   33005:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    33006:        }
                   33007: 
1.1.1.2   misho    33008:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   33009:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   33010:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    33011:        }
1.1.1.2   misho    33012:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    33013:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    33014:        CHECK_EXCEPTION();
1.1       misho    33015:        ZEND_VM_NEXT_OPCODE();
                   33016: }
                   33017: 
                   33018: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33019: {
1.1.1.2   misho    33020:        USE_OPLINE
1.1       misho    33021:        zend_free_op free_op2;
1.1.1.2   misho    33022:        zval **object_ptr;
                   33023:        zval *property_name;
                   33024: 
                   33025:        SAVE_OPLINE();
                   33026:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33027:        property_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33028: 
                   33029:        if (0) {
                   33030:                MAKE_REAL_ZVAL_PTR(property_name);
                   33031:        }
1.1.1.2   misho    33032:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    33033:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   33034:        }
1.1.1.2   misho    33035:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33036:        if (0) {
                   33037:                zval_ptr_dtor(&property_name);
                   33038:        } else {
                   33039:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33040:        }
                   33041: 
                   33042:        /* assign_obj has two opcodes! */
1.1.1.2   misho    33043:        CHECK_EXCEPTION();
1.1       misho    33044:        ZEND_VM_INC_OPCODE();
                   33045:        ZEND_VM_NEXT_OPCODE();
                   33046: }
                   33047: 
                   33048: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33049: {
1.1.1.2   misho    33050:        USE_OPLINE
1.1       misho    33051: 
1.1.1.2   misho    33052:        zval **object_ptr;
1.1       misho    33053: 
1.1.1.2   misho    33054:        SAVE_OPLINE();
                   33055:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33056: 
                   33057:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    33058:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   33059:        }
                   33060:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   33061:                zend_free_op free_op2;
1.1.1.2   misho    33062:                zval *property_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33063: 
                   33064:                if (0) {
                   33065:                        MAKE_REAL_ZVAL_PTR(property_name);
                   33066:                }
1.1.1.2   misho    33067:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33068:                if (0) {
                   33069:                        zval_ptr_dtor(&property_name);
                   33070:                } else {
                   33071:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33072:                }
                   33073:        } else {
                   33074:                zend_free_op free_op2, free_op_data1, free_op_data2;
                   33075:                zval *value;
1.1.1.2   misho    33076:                zval *dim = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33077:                zval **variable_ptr_ptr;
                   33078: 
1.1.1.2   misho    33079:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_VAR, BP_VAR_W TSRMLS_CC);
1.1       misho    33080:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33081: 
1.1.1.2   misho    33082:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   33083:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   33084:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   33085:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   33086:                                if (RETURN_VALUE_USED(opline)) {
                   33087:                                        zval *retval;
                   33088: 
                   33089:                                        ALLOC_ZVAL(retval);
                   33090:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   33091:                                        INIT_PZVAL(retval);
                   33092:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   33093:                                }
                   33094:                        } else if (RETURN_VALUE_USED(opline)) {
                   33095:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   33096:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   33097:                        }
                   33098:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   33099:                        if (IS_TMP_FREE(free_op_data1)) {
                   33100:                                zval_dtor(value);
                   33101:                        }
                   33102:                        if (RETURN_VALUE_USED(opline)) {
                   33103:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   33104:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   33105:                        }
                   33106:                } else {
                   33107:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   33108:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33109:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   33110:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33111:                        } else {
                   33112:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33113:                        }
                   33114:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    33115:                                PZVAL_LOCK(value);
1.1.1.2   misho    33116:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    33117:                        }
                   33118:                }
                   33119:                FREE_OP_VAR_PTR(free_op_data2);
                   33120:                FREE_OP_IF_VAR(free_op_data1);
                   33121:        }
                   33122: 
                   33123:        /* assign_dim has two opcodes! */
1.1.1.2   misho    33124:        CHECK_EXCEPTION();
1.1       misho    33125:        ZEND_VM_INC_OPCODE();
                   33126:        ZEND_VM_NEXT_OPCODE();
                   33127: }
                   33128: 
                   33129: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33130: {
1.1.1.2   misho    33131:        USE_OPLINE
1.1       misho    33132:        zend_free_op free_op2;
1.1.1.2   misho    33133:        zval *value;
                   33134:        zval **variable_ptr_ptr;
1.1       misho    33135: 
1.1.1.2   misho    33136:        SAVE_OPLINE();
                   33137:        value = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   33138:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33139: 
                   33140:        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   33141:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_VAR TSRMLS_CC)) {
                   33142:                        if (RETURN_VALUE_USED(opline)) {
                   33143:                                zval *retval;
                   33144: 
                   33145:                                ALLOC_ZVAL(retval);
                   33146:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   33147:                                INIT_PZVAL(retval);
                   33148:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   33149:                        }
                   33150:                } else if (RETURN_VALUE_USED(opline)) {
                   33151:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   33152:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   33153:                }
                   33154:        } else if (IS_CV == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   33155:                if (0) {
                   33156:                        zval_dtor(value);
                   33157:                }
                   33158:                if (RETURN_VALUE_USED(opline)) {
                   33159:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   33160:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   33161:                }
                   33162:        } else {
                   33163:                if (IS_VAR == IS_TMP_VAR) {
                   33164:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33165:                } else if (IS_VAR == IS_CONST) {
                   33166:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33167:                } else {
                   33168:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   33169:                }
                   33170:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    33171:                        PZVAL_LOCK(value);
1.1.1.2   misho    33172:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    33173:                }
                   33174:        }
                   33175: 
                   33176:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   33177:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33178: 
1.1.1.2   misho    33179:        CHECK_EXCEPTION();
1.1       misho    33180:        ZEND_VM_NEXT_OPCODE();
                   33181: }
                   33182: 
                   33183: static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33184: {
1.1.1.2   misho    33185:        USE_OPLINE
1.1       misho    33186:        zend_free_op free_op2;
                   33187:        zval **variable_ptr_ptr;
1.1.1.2   misho    33188:        zval **value_ptr_ptr;
                   33189: 
                   33190:        SAVE_OPLINE();
                   33191:        value_ptr_ptr = _get_zval_ptr_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33192: 
                   33193:        if (IS_VAR == IS_VAR &&
                   33194:            value_ptr_ptr &&
                   33195:            !Z_ISREF_PP(value_ptr_ptr) &&
                   33196:            opline->extended_value == ZEND_RETURNS_FUNCTION &&
1.1.1.2   misho    33197:            !EX_T(opline->op2.var).var.fcall_returned_reference) {
1.1       misho    33198:                if (free_op2.var == NULL) {
                   33199:                        PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
                   33200:                }
                   33201:                zend_error(E_STRICT, "Only variables should be assigned by reference");
                   33202:                if (UNEXPECTED(EG(exception) != NULL)) {
                   33203:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    33204:                        HANDLE_EXCEPTION();
1.1       misho    33205:                }
                   33206:                return ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   33207:        } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   33208:                PZVAL_LOCK(*value_ptr_ptr);
                   33209:        }
1.1.1.2   misho    33210:        if (IS_CV == IS_VAR && UNEXPECTED(EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr)) {
1.1       misho    33211:                zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
                   33212:        }
                   33213: 
1.1.1.2   misho    33214:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33215:        if ((IS_VAR == IS_VAR && UNEXPECTED(value_ptr_ptr == NULL)) ||
                   33216:            (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL))) {
1.1       misho    33217:                zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
                   33218:        }
                   33219:        zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
                   33220: 
                   33221:        if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   33222:                Z_DELREF_PP(variable_ptr_ptr);
                   33223:        }
                   33224: 
1.1.1.2   misho    33225:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    33226:                PZVAL_LOCK(*variable_ptr_ptr);
1.1.1.2   misho    33227:                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
1.1       misho    33228:        }
                   33229: 
                   33230:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33231: 
1.1.1.2   misho    33232:        CHECK_EXCEPTION();
1.1       misho    33233:        ZEND_VM_NEXT_OPCODE();
                   33234: }
                   33235: 
                   33236: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33237: {
1.1.1.2   misho    33238:        USE_OPLINE
1.1       misho    33239:        zval *function_name;
                   33240:        char *function_name_strval;
                   33241:        int function_name_strlen;
                   33242:        zend_free_op free_op2;
                   33243: 
1.1.1.2   misho    33244:        SAVE_OPLINE();
1.1       misho    33245:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   33246: 
1.1.1.2   misho    33247:        function_name = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33248: 
1.1.1.2   misho    33249:        if (IS_VAR != IS_CONST &&
                   33250:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    33251:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   33252:        }
                   33253: 
                   33254:        function_name_strval = Z_STRVAL_P(function_name);
                   33255:        function_name_strlen = Z_STRLEN_P(function_name);
                   33256: 
1.1.1.2   misho    33257:        EX(object) = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    33258: 
1.1.1.2   misho    33259:        if (EXPECTED(EX(object) != NULL) &&
                   33260:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   33261:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    33262: 
1.1.1.2   misho    33263:                if (IS_VAR != IS_CONST ||
                   33264:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   33265:                    zval *object = EX(object);
                   33266: 
                   33267:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   33268:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   33269:                        }
                   33270: 
                   33271:                        /* First, locate the function. */
                   33272:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_VAR == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   33273:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   33274:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   33275:                        }
                   33276:                        if (IS_VAR == IS_CONST &&
                   33277:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   33278:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   33279:                            EXPECTED(EX(object) == object)) {
                   33280:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   33281:                        }
1.1       misho    33282:                }
                   33283:        } else {
                   33284:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   33285:        }
                   33286: 
                   33287:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   33288:                EX(object) = NULL;
                   33289:        } else {
                   33290:                if (!PZVAL_IS_REF(EX(object))) {
                   33291:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   33292:                } else {
                   33293:                        zval *this_ptr;
                   33294:                        ALLOC_ZVAL(this_ptr);
                   33295:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   33296:                        zval_copy_ctor(this_ptr);
                   33297:                        EX(object) = this_ptr;
                   33298:                }
                   33299:        }
                   33300: 
                   33301:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33302: 
1.1.1.2   misho    33303:        CHECK_EXCEPTION();
1.1       misho    33304:        ZEND_VM_NEXT_OPCODE();
                   33305: }
                   33306: 
                   33307: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33308: {
1.1.1.2   misho    33309:        USE_OPLINE
1.1       misho    33310:        zend_free_op free_op2;
                   33311: 
1.1.1.2   misho    33312:        SAVE_OPLINE();
1.1       misho    33313:        if (IS_CV==IS_VAR) {
1.1.1.2   misho    33314:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    33315:        }
1.1.1.2   misho    33316:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   33317:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   33318:                                 _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC) TSRMLS_CC);
1.1       misho    33319: 
                   33320:        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1.1.2   misho    33321:        CHECK_EXCEPTION();
1.1       misho    33322:        ZEND_VM_NEXT_OPCODE();
                   33323: }
                   33324: 
                   33325: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33326: {
1.1.1.2   misho    33327:        USE_OPLINE
                   33328: 
1.1       misho    33329:        zval *expr_ptr;
                   33330: 
1.1.1.2   misho    33331:        SAVE_OPLINE();
                   33332:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   33333:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    33334: 
1.1.1.2   misho    33335:                if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   33336:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   33337:                }
                   33338:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    33339:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    33340:                Z_ADDREF_P(expr_ptr);
1.1       misho    33341:        } else {
1.1.1.2   misho    33342:                expr_ptr=_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33343:                if (0) { /* temporary variable */
                   33344:                        zval *new_expr;
1.1       misho    33345: 
1.1.1.2   misho    33346:                        ALLOC_ZVAL(new_expr);
                   33347:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   33348:                        expr_ptr = new_expr;
                   33349:                } else if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    33350:                        zval *new_expr;
                   33351: 
                   33352:                        ALLOC_ZVAL(new_expr);
                   33353:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   33354:                        expr_ptr = new_expr;
                   33355:                        zendi_zval_copy_ctor(*expr_ptr);
                   33356:                } else {
                   33357:                        Z_ADDREF_P(expr_ptr);
                   33358:                }
                   33359:        }
1.1.1.2   misho    33360: 
                   33361:        if (IS_VAR != IS_UNUSED) {
                   33362:                zend_free_op free_op2;
                   33363:                zval *offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   33364:                ulong hval;
                   33365: 
1.1       misho    33366:                switch (Z_TYPE_P(offset)) {
                   33367:                        case IS_DOUBLE:
1.1.1.2   misho    33368:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   33369:                                goto num_index;
1.1       misho    33370:                        case IS_LONG:
                   33371:                        case IS_BOOL:
1.1.1.2   misho    33372:                                hval = Z_LVAL_P(offset);
                   33373: num_index:
                   33374:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    33375:                                break;
                   33376:                        case IS_STRING:
1.1.1.2   misho    33377:                                if (IS_VAR == IS_CONST) {
                   33378:                                        hval = Z_HASH_P(offset);
                   33379:                                } else {
                   33380:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   33381:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   33382:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   33383:                                        } else {
                   33384:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   33385:                                        }
                   33386:                                }
                   33387:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    33388:                                break;
                   33389:                        case IS_NULL:
1.1.1.2   misho    33390:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    33391:                                break;
                   33392:                        default:
                   33393:                                zend_error(E_WARNING, "Illegal offset type");
                   33394:                                zval_ptr_dtor(&expr_ptr);
                   33395:                                /* do nothing */
                   33396:                                break;
                   33397:                }
                   33398:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33399:        } else {
1.1.1.2   misho    33400:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    33401:        }
1.1.1.2   misho    33402:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
1.1       misho    33403: 
                   33404:        } else {
                   33405: 
                   33406:        }
1.1.1.2   misho    33407:        CHECK_EXCEPTION();
1.1       misho    33408:        ZEND_VM_NEXT_OPCODE();
                   33409: }
                   33410: 
                   33411: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33412: {
1.1.1.2   misho    33413:        USE_OPLINE
1.1       misho    33414: 
1.1.1.2   misho    33415:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    33416:        if (IS_CV == IS_UNUSED) {
                   33417:                ZEND_VM_NEXT_OPCODE();
                   33418: #if 0 || IS_CV != IS_UNUSED
                   33419:        } else {
                   33420:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   33421: #endif
                   33422:        }
                   33423: }
                   33424: 
1.1.1.2   misho    33425: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33426: {
                   33427:        USE_OPLINE
                   33428:        zval tmp, *varname;
                   33429:        HashTable *target_symbol_table;
                   33430: 
                   33431: 
                   33432:        SAVE_OPLINE();
                   33433:        if (IS_CV == IS_CV &&
                   33434:            IS_VAR == IS_UNUSED &&
                   33435:            (opline->extended_value & ZEND_QUICK_SET)) {
                   33436:                if (EG(active_symbol_table)) {
                   33437:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   33438: 
                   33439:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   33440:                        EX_CV(opline->op1.var) = NULL;
                   33441:                } else if (EX_CV(opline->op1.var)) {
                   33442:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   33443:                        EX_CV(opline->op1.var) = NULL;
                   33444:                }
                   33445:                CHECK_EXCEPTION();
                   33446:                ZEND_VM_NEXT_OPCODE();
                   33447:        }
                   33448: 
                   33449:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33450: 
                   33451:        if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   33452:                ZVAL_COPY_VALUE(&tmp, varname);
                   33453:                zval_copy_ctor(&tmp);
                   33454:                convert_to_string(&tmp);
                   33455:                varname = &tmp;
                   33456:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   33457:                Z_ADDREF_P(varname);
                   33458:        }
                   33459: 
                   33460:        if (IS_VAR != IS_UNUSED) {
                   33461:                zend_class_entry *ce;
                   33462: 
                   33463:                if (IS_VAR == IS_CONST) {
                   33464:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   33465:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   33466:                        } else {
                   33467:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    33468:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    33469:                                        if (IS_CV != IS_CONST && varname == &tmp) {
                   33470:                                                zval_dtor(&tmp);
                   33471:                                        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   33472:                                                zval_ptr_dtor(&varname);
                   33473:                                        }
                   33474: 
1.1.1.4   misho    33475:                                        HANDLE_EXCEPTION();
                   33476:                                }
                   33477:                                if (UNEXPECTED(ce == NULL)) {
                   33478:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    33479:                                }
                   33480:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   33481:                        }
                   33482:                } else {
                   33483:                        ce = EX_T(opline->op2.var).class_entry;
                   33484:                }
                   33485:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   33486:        } else {
                   33487:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   33488: 
                   33489:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   33490:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   33491:        }
                   33492: 
                   33493:        if (IS_CV != IS_CONST && varname == &tmp) {
                   33494:                zval_dtor(&tmp);
                   33495:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   33496:                zval_ptr_dtor(&varname);
                   33497:        }
                   33498: 
                   33499:        CHECK_EXCEPTION();
                   33500:        ZEND_VM_NEXT_OPCODE();
                   33501: }
                   33502: 
1.1       misho    33503: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33504: {
1.1.1.2   misho    33505:        USE_OPLINE
1.1       misho    33506:        zend_free_op free_op2;
1.1.1.2   misho    33507:        zval **container;
1.1       misho    33508:        zval *offset;
1.1.1.2   misho    33509:        ulong hval;
1.1       misho    33510: 
1.1.1.2   misho    33511:        SAVE_OPLINE();
                   33512:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    33513:        if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   33514:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   33515:        }
1.1.1.2   misho    33516:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33517: 
                   33518:        if (IS_CV != IS_VAR || container) {
                   33519:                switch (Z_TYPE_PP(container)) {
                   33520:                        case IS_ARRAY: {
                   33521:                                HashTable *ht = Z_ARRVAL_PP(container);
                   33522: 
                   33523:                                switch (Z_TYPE_P(offset)) {
                   33524:                                        case IS_DOUBLE:
1.1.1.2   misho    33525:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    33526:                                                zend_hash_index_del(ht, hval);
                   33527:                                                break;
1.1       misho    33528:                                        case IS_RESOURCE:
                   33529:                                        case IS_BOOL:
                   33530:                                        case IS_LONG:
1.1.1.2   misho    33531:                                                hval = Z_LVAL_P(offset);
                   33532:                                                zend_hash_index_del(ht, hval);
1.1       misho    33533:                                                break;
                   33534:                                        case IS_STRING:
                   33535:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   33536:                                                        Z_ADDREF_P(offset);
                   33537:                                                }
1.1.1.2   misho    33538:                                                if (IS_VAR == IS_CONST) {
                   33539:                                                        hval = Z_HASH_P(offset);
                   33540:                                                } else {
                   33541:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   33542:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   33543:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   33544:                                                        } else {
                   33545:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    33546:                                                        }
                   33547:                                                }
1.1.1.2   misho    33548:                                                if (ht == &EG(symbol_table)) {
                   33549:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   33550:                                                } else {
                   33551:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   33552:                                                }
                   33553:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   33554:                                                        zval_ptr_dtor(&offset);
                   33555:                                                }
                   33556:                                                break;
                   33557: num_index_dim:
                   33558:                                                zend_hash_index_del(ht, hval);
1.1       misho    33559:                                                if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                   33560:                                                        zval_ptr_dtor(&offset);
                   33561:                                                }
                   33562:                                                break;
                   33563:                                        case IS_NULL:
                   33564:                                                zend_hash_del(ht, "", sizeof(""));
                   33565:                                                break;
                   33566:                                        default:
                   33567:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   33568:                                                break;
                   33569:                                }
                   33570:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33571:                                break;
                   33572:                        }
                   33573:                        case IS_OBJECT:
1.1.1.2   misho    33574:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    33575:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   33576:                                }
                   33577:                                if (0) {
                   33578:                                        MAKE_REAL_ZVAL_PTR(offset);
                   33579:                                }
                   33580:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   33581:                                if (0) {
                   33582:                                        zval_ptr_dtor(&offset);
                   33583:                                } else {
                   33584:                                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33585:                                }
                   33586:                                break;
                   33587:                        case IS_STRING:
                   33588:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   33589:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   33590:                        default:
                   33591:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33592:                                break;
                   33593:                }
1.1.1.2   misho    33594:        } else {
                   33595:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33596:        }
                   33597: 
                   33598:        CHECK_EXCEPTION();
                   33599:        ZEND_VM_NEXT_OPCODE();
                   33600: }
                   33601: 
                   33602: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33603: {
                   33604:        USE_OPLINE
                   33605:        zend_free_op free_op2;
                   33606:        zval **container;
                   33607:        zval *offset;
                   33608: 
                   33609:        SAVE_OPLINE();
                   33610:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33611:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
                   33612: 
                   33613:        if (IS_CV != IS_VAR || container) {
                   33614:                if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   33615:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   33616:                }
                   33617:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   33618:                        if (0) {
                   33619:                                MAKE_REAL_ZVAL_PTR(offset);
                   33620:                        }
                   33621:                        if (Z_OBJ_HT_P(*container)->unset_property) {
                   33622:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   33623:                        } else {
                   33624:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   33625:                        }
                   33626:                        if (0) {
                   33627:                                zval_ptr_dtor(&offset);
                   33628:                        } else {
                   33629:                                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33630:                        }
                   33631:                } else {
                   33632:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33633:                }
                   33634:        } else {
                   33635:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33636:        }
                   33637: 
                   33638:        CHECK_EXCEPTION();
                   33639:        ZEND_VM_NEXT_OPCODE();
                   33640: }
                   33641: 
                   33642: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33643: {
                   33644:        USE_OPLINE
                   33645:        zval **value;
                   33646:        zend_bool isset = 1;
                   33647: 
                   33648:        SAVE_OPLINE();
                   33649:        if (IS_CV == IS_CV &&
                   33650:            IS_VAR == IS_UNUSED &&
                   33651:            (opline->extended_value & ZEND_QUICK_SET)) {
                   33652:                if (EX_CV(opline->op1.var)) {
                   33653:                        value = EX_CV(opline->op1.var);
                   33654:                } else if (EG(active_symbol_table)) {
                   33655:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   33656: 
                   33657:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   33658:                                isset = 0;
                   33659:                        }
                   33660:                } else {
                   33661:                        isset = 0;
                   33662:                }
                   33663:        } else {
                   33664:                HashTable *target_symbol_table;
                   33665: 
                   33666:                zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   33667: 
                   33668:                if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   33669:                        ZVAL_COPY_VALUE(&tmp, varname);
                   33670:                        zval_copy_ctor(&tmp);
                   33671:                        convert_to_string(&tmp);
                   33672:                        varname = &tmp;
                   33673:                }
                   33674: 
                   33675:                if (IS_VAR != IS_UNUSED) {
                   33676:                        zend_class_entry *ce;
                   33677: 
                   33678:                        if (IS_VAR == IS_CONST) {
                   33679:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   33680:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   33681:                                } else {
                   33682:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   33683:                                        if (UNEXPECTED(ce == NULL)) {
                   33684:                                                CHECK_EXCEPTION();
                   33685:                                                ZEND_VM_NEXT_OPCODE();
                   33686:                                        }
                   33687:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   33688:                                }
                   33689:                        } else {
                   33690:                                ce = EX_T(opline->op2.var).class_entry;
                   33691:                        }
                   33692:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   33693:                        if (!value) {
                   33694:                                isset = 0;
                   33695:                        }
                   33696:                } else {
                   33697:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   33698:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   33699:                                isset = 0;
                   33700:                        }
                   33701:                }
1.1       misho    33702: 
1.1.1.2   misho    33703:                if (IS_CV != IS_CONST && varname == &tmp) {
                   33704:                        zval_dtor(&tmp);
                   33705:                }
1.1       misho    33706: 
1.1.1.2   misho    33707:        }
1.1       misho    33708: 
1.1.1.2   misho    33709:        if (opline->extended_value & ZEND_ISSET) {
                   33710:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   33711:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   33712:                } else {
                   33713:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
1.1       misho    33714:                }
1.1.1.2   misho    33715:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   33716:                if (!isset || !i_zend_is_true(*value)) {
                   33717:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
1.1       misho    33718:                } else {
1.1.1.2   misho    33719:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
1.1       misho    33720:                }
                   33721:        }
                   33722: 
1.1.1.2   misho    33723:        CHECK_EXCEPTION();
1.1       misho    33724:        ZEND_VM_NEXT_OPCODE();
                   33725: }
                   33726: 
                   33727: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   33728: {
1.1.1.2   misho    33729:        USE_OPLINE
                   33730:        zend_free_op free_op2;
                   33731:        zval **container;
1.1       misho    33732:        zval **value = NULL;
                   33733:        int result = 0;
1.1.1.2   misho    33734:        ulong hval;
                   33735:        zval *offset;
1.1       misho    33736: 
1.1.1.2   misho    33737:        SAVE_OPLINE();
                   33738:        container = _get_zval_ptr_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    33739: 
1.1.1.2   misho    33740:        offset = _get_zval_ptr_var(opline->op2.var, EX_Ts(), &free_op2 TSRMLS_CC);
1.1       misho    33741: 
1.1.1.2   misho    33742:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   33743:                HashTable *ht;
                   33744:                int isset = 0;
1.1       misho    33745: 
1.1.1.2   misho    33746:                ht = Z_ARRVAL_PP(container);
                   33747: 
                   33748:                switch (Z_TYPE_P(offset)) {
                   33749:                        case IS_DOUBLE:
                   33750:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   33751:                                goto num_index_prop;
                   33752:                        case IS_RESOURCE:
                   33753:                        case IS_BOOL:
                   33754:                        case IS_LONG:
                   33755:                                hval = Z_LVAL_P(offset);
                   33756: num_index_prop:
                   33757:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   33758:                                        isset = 1;
                   33759:                                }
                   33760:                                break;
                   33761:                        case IS_STRING:
                   33762:                                if (IS_VAR == IS_CONST) {
                   33763:                                        hval = Z_HASH_P(offset);
                   33764:                                } else {
                   33765:                                        if (!prop_dim) {
                   33766:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    33767:                                        }
1.1.1.2   misho    33768:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   33769:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    33770:                                        } else {
1.1.1.2   misho    33771:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    33772:                                        }
1.1.1.2   misho    33773:                                }
                   33774:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   33775:                                        isset = 1;
                   33776:                                }
                   33777:                                break;
                   33778:                        case IS_NULL:
                   33779:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   33780:                                        isset = 1;
                   33781:                                }
                   33782:                                break;
                   33783:                        default:
                   33784:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   33785:                                break;
                   33786:                }
                   33787: 
                   33788:                if (opline->extended_value & ZEND_ISSET) {
                   33789:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   33790:                                result = 0;
                   33791:                        } else {
                   33792:                                result = isset;
1.1       misho    33793:                        }
1.1.1.2   misho    33794:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   33795:                        if (!isset || !i_zend_is_true(*value)) {
                   33796:                                result = 0;
                   33797:                        } else {
                   33798:                                result = 1;
1.1       misho    33799:                        }
1.1.1.2   misho    33800:                }
                   33801:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33802:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   33803:                if (0) {
                   33804:                        MAKE_REAL_ZVAL_PTR(offset);
                   33805:                }
                   33806:                if (prop_dim) {
                   33807:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   33808:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33809:                        } else {
1.1.1.2   misho    33810:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   33811:                                result = 0;
1.1       misho    33812:                        }
1.1.1.2   misho    33813:                } else {
                   33814:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   33815:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
1.1       misho    33816:                        } else {
1.1.1.2   misho    33817:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   33818:                                result = 0;
1.1       misho    33819:                        }
1.1.1.2   misho    33820:                }
                   33821:                if (0) {
                   33822:                        zval_ptr_dtor(&offset);
                   33823:                } else {
                   33824:                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33825:                }
                   33826:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   33827:                zval tmp;
1.1       misho    33828: 
1.1.1.2   misho    33829:                if (Z_TYPE_P(offset) != IS_LONG) {
                   33830:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   33831:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   33832:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   33833:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    33834:                                zval_copy_ctor(&tmp);
                   33835:                                convert_to_long(&tmp);
                   33836:                                offset = &tmp;
1.1.1.2   misho    33837:                        } else {
                   33838:                                /* can not be converted to proper offset, return "not set" */
                   33839:                                result = 0;
1.1       misho    33840:                        }
1.1.1.2   misho    33841:                }
                   33842:                if (Z_TYPE_P(offset) == IS_LONG) {
                   33843:                        if (opline->extended_value & ZEND_ISSET) {
                   33844:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   33845:                                        result = 1;
                   33846:                                }
                   33847:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   33848:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   33849:                                        result = 1;
1.1       misho    33850:                                }
                   33851:                        }
                   33852:                }
1.1.1.2   misho    33853:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                   33854:        } else {
                   33855:                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1.1       misho    33856:        }
                   33857: 
1.1.1.2   misho    33858:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   33859:        if (opline->extended_value & ZEND_ISSET) {
                   33860:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   33861:        } else {
                   33862:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    33863:        }
                   33864: 
1.1.1.2   misho    33865:        CHECK_EXCEPTION();
1.1       misho    33866:        ZEND_VM_NEXT_OPCODE();
                   33867: }
                   33868: 
                   33869: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33870: {
                   33871:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   33872: }
                   33873: 
                   33874: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   33875: {
                   33876:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   33877: }
                   33878: 
                   33879: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   33880: {
1.1.1.2   misho    33881:        USE_OPLINE
1.1       misho    33882:        zend_free_op free_op_data1;
1.1.1.2   misho    33883:        zval **object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    33884:        zval *object;
                   33885:        zval *property = NULL;
1.1.1.2   misho    33886:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    33887:        int have_get_ptr = 0;
                   33888: 
1.1.1.2   misho    33889:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    33890:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   33891:        }
                   33892: 
                   33893:        make_real_object(object_ptr TSRMLS_CC);
                   33894:        object = *object_ptr;
                   33895: 
1.1.1.2   misho    33896:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    33897:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   33898: 
                   33899:                FREE_OP(free_op_data1);
                   33900: 
1.1.1.2   misho    33901:                if (RETURN_VALUE_USED(opline)) {
                   33902:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   33903:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   33904:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    33905:                }
                   33906:        } else {
                   33907:                /* here we are sure we are dealing with an object */
                   33908:                if (0) {
                   33909:                        MAKE_REAL_ZVAL_PTR(property);
                   33910:                }
                   33911: 
                   33912:                /* here property is a string */
                   33913:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   33914:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    33915:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33916:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   33917:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   33918: 
                   33919:                                have_get_ptr = 1;
                   33920:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    33921:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    33922:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    33923:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   33924:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    33925:                                }
                   33926:                        }
                   33927:                }
                   33928: 
                   33929:                if (!have_get_ptr) {
                   33930:                        zval *z = NULL;
                   33931: 
                   33932:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   33933:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    33934:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33935:                                }
                   33936:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   33937:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   33938:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   33939:                                }
                   33940:                        }
                   33941:                        if (z) {
                   33942:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   33943:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   33944: 
                   33945:                                        if (Z_REFCOUNT_P(z) == 0) {
                   33946:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   33947:                                                zval_dtor(z);
                   33948:                                                FREE_ZVAL(z);
                   33949:                                        }
                   33950:                                        z = value;
                   33951:                                }
                   33952:                                Z_ADDREF_P(z);
                   33953:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   33954:                                binary_op(z, z, value TSRMLS_CC);
                   33955:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    33956:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    33957:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   33958:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   33959:                                }
1.1.1.2   misho    33960:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    33961:                                        PZVAL_LOCK(z);
1.1.1.2   misho    33962:                                        EX_T(opline->result.var).var.ptr = z;
                   33963:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    33964:                                }
                   33965:                                zval_ptr_dtor(&z);
                   33966:                        } else {
                   33967:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    33968:                                if (RETURN_VALUE_USED(opline)) {
                   33969:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   33970:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   33971:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    33972:                                }
                   33973:                        }
                   33974:                }
                   33975: 
                   33976:                if (0) {
                   33977:                        zval_ptr_dtor(&property);
                   33978:                } else {
                   33979: 
                   33980:                }
                   33981:                FREE_OP(free_op_data1);
                   33982:        }
                   33983: 
                   33984:        /* assign_obj has two opcodes! */
1.1.1.2   misho    33985:        CHECK_EXCEPTION();
1.1       misho    33986:        ZEND_VM_INC_OPCODE();
                   33987:        ZEND_VM_NEXT_OPCODE();
                   33988: }
                   33989: 
                   33990: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   33991: {
1.1.1.2   misho    33992:        USE_OPLINE
1.1       misho    33993:        zend_free_op free_op_data2, free_op_data1;
                   33994:        zval **var_ptr;
                   33995:        zval *value;
                   33996: 
1.1.1.2   misho    33997:        SAVE_OPLINE();
1.1       misho    33998:        switch (opline->extended_value) {
                   33999:                case ZEND_ASSIGN_OBJ:
                   34000:                        return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34001:                        break;
                   34002:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    34003:                                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    34004: 
1.1.1.2   misho    34005:                                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    34006:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    34007:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    34008:                                        if (IS_CV == IS_VAR && !0) {
                   34009:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   34010:                                        }
                   34011:                                        return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34012:                                } else {
                   34013:                                        zval *dim = NULL;
                   34014: 
1.1.1.2   misho    34015:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
                   34016:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   34017:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    34018:                                }
                   34019:                        }
                   34020:                        break;
                   34021:                default:
                   34022:                        value = NULL;
1.1.1.2   misho    34023:                        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    34024:                        /* do nothing */
                   34025:                        break;
                   34026:        }
                   34027: 
1.1.1.2   misho    34028:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    34029:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   34030:        }
                   34031: 
1.1.1.2   misho    34032:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   34033:                if (RETURN_VALUE_USED(opline)) {
                   34034:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   34035:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    34036:                }
                   34037: 
                   34038: 
1.1.1.2   misho    34039:                CHECK_EXCEPTION();
                   34040:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   34041:                        ZEND_VM_INC_OPCODE();
                   34042:                }
1.1       misho    34043:                ZEND_VM_NEXT_OPCODE();
                   34044:        }
                   34045: 
                   34046:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   34047: 
1.1.1.2   misho    34048:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   34049:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    34050:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   34051:                /* proxy object */
                   34052:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   34053:                Z_ADDREF_P(objval);
                   34054:                binary_op(objval, objval, value TSRMLS_CC);
                   34055:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   34056:                zval_ptr_dtor(&objval);
                   34057:        } else {
                   34058:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   34059:        }
                   34060: 
1.1.1.2   misho    34061:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    34062:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    34063:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    34064:        }
                   34065: 
                   34066:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   34067:                FREE_OP(free_op_data1);
                   34068:                FREE_OP_VAR_PTR(free_op_data2);
                   34069: 
1.1.1.2   misho    34070:                CHECK_EXCEPTION();
                   34071:                ZEND_VM_INC_OPCODE();
                   34072:        } else {
                   34073: 
                   34074:                CHECK_EXCEPTION();
                   34075:        }
1.1       misho    34076:        ZEND_VM_NEXT_OPCODE();
                   34077: }
                   34078: 
                   34079: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34080: {
                   34081:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34082: }
                   34083: 
                   34084: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34085: {
                   34086:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34087: }
                   34088: 
                   34089: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34090: {
                   34091:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34092: }
                   34093: 
                   34094: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34095: {
                   34096:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34097: }
                   34098: 
                   34099: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34100: {
                   34101:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34102: }
                   34103: 
                   34104: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34105: {
                   34106:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34107: }
                   34108: 
                   34109: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34110: {
                   34111:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34112: }
                   34113: 
                   34114: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34115: {
                   34116:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34117: }
                   34118: 
                   34119: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34120: {
                   34121:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34122: }
                   34123: 
                   34124: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34125: {
                   34126:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34127: }
                   34128: 
                   34129: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34130: {
                   34131:        return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34132: }
                   34133: 
1.1.1.2   misho    34134: static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
                   34135: {
                   34136:        USE_OPLINE
                   34137:        zend_free_op free_op1;
                   34138:        zval *varname;
                   34139:        zval **retval;
                   34140:        zval tmp_varname;
                   34141:        HashTable *target_symbol_table;
                   34142:        ulong hash_value;
                   34143: 
                   34144:        SAVE_OPLINE();
                   34145:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34146: 
                   34147:        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
                   34148:                ZVAL_COPY_VALUE(&tmp_varname, varname);
                   34149:                zval_copy_ctor(&tmp_varname);
                   34150:                Z_SET_REFCOUNT(tmp_varname, 1);
                   34151:                Z_UNSET_ISREF(tmp_varname);
                   34152:                convert_to_string(&tmp_varname);
                   34153:                varname = &tmp_varname;
                   34154:        }
                   34155: 
                   34156:        if (IS_UNUSED != IS_UNUSED) {
                   34157:                zend_class_entry *ce;
                   34158: 
                   34159:                if (IS_UNUSED == IS_CONST) {
                   34160:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   34161:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   34162:                        } else {
                   34163:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   34164:                                if (UNEXPECTED(ce == NULL)) {
                   34165:                                        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   34166:                                                zval_dtor(&tmp_varname);
                   34167:                                        }
                   34168: 
                   34169:                                        CHECK_EXCEPTION();
                   34170:                                        ZEND_VM_NEXT_OPCODE();
                   34171:                                }
                   34172:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   34173:                        }
                   34174:                } else {
                   34175:                        ce = EX_T(opline->op2.var).class_entry;
                   34176:                }
                   34177:                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   34178: 
                   34179:        } else {
                   34180:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   34181: /*
                   34182:                if (!target_symbol_table) {
                   34183:                        CHECK_EXCEPTION();
                   34184:                        ZEND_VM_NEXT_OPCODE();
                   34185:                }
                   34186: */
                   34187:                if (IS_CV == IS_CONST) {
                   34188:                        hash_value = Z_HASH_P(varname);
                   34189:                } else if (IS_INTERNED(Z_STRVAL_P(varname))) {
                   34190:                        hash_value = INTERNED_HASH(Z_STRVAL_P(varname));
                   34191:                } else {
                   34192:                        hash_value = zend_hash_func(Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1);
                   34193:                }
                   34194: 
                   34195:                if (zend_hash_quick_find(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, (void **) &retval) == FAILURE) {
                   34196:                        switch (type) {
                   34197:                                case BP_VAR_R:
                   34198:                                case BP_VAR_UNSET:
                   34199:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   34200:                                        /* break missing intentionally */
                   34201:                                case BP_VAR_IS:
                   34202:                                        retval = &EG(uninitialized_zval_ptr);
                   34203:                                        break;
                   34204:                                case BP_VAR_RW:
                   34205:                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                   34206:                                        /* break missing intentionally */
                   34207:                                case BP_VAR_W:
                   34208:                                        Z_ADDREF_P(&EG(uninitialized_zval));
                   34209:                                        zend_hash_quick_update(target_symbol_table, Z_STRVAL_P(varname), Z_STRLEN_P(varname)+1, hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **) &retval);
                   34210:                                        break;
                   34211:                                EMPTY_SWITCH_DEFAULT_CASE()
                   34212:                        }
                   34213:                }
                   34214:                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                   34215:                        case ZEND_FETCH_GLOBAL:
                   34216:                                if (IS_CV != IS_TMP_VAR) {
                   34217: 
                   34218:                                }
                   34219:                                break;
                   34220:                        case ZEND_FETCH_LOCAL:
                   34221: 
                   34222:                                break;
                   34223:                        case ZEND_FETCH_STATIC:
                   34224:                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
                   34225:                                break;
                   34226:                        case ZEND_FETCH_GLOBAL_LOCK:
                   34227:                                if (IS_CV == IS_VAR && !free_op1.var) {
                   34228:                                        PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   34229:                                }
                   34230:                                break;
                   34231:                }
                   34232:        }
                   34233: 
                   34234: 
                   34235:        if (IS_CV != IS_CONST && varname == &tmp_varname) {
                   34236:                zval_dtor(&tmp_varname);
                   34237:        }
                   34238:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                   34239:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
                   34240:        }
                   34241:        PZVAL_LOCK(*retval);
                   34242:        switch (type) {
                   34243:                case BP_VAR_R:
                   34244:                case BP_VAR_IS:
                   34245:                        AI_SET_PTR(&EX_T(opline->result.var), *retval);
                   34246:                        break;
                   34247:                case BP_VAR_UNSET: {
                   34248:                        zend_free_op free_res;
                   34249: 
                   34250:                        PZVAL_UNLOCK(*retval, &free_res);
                   34251:                        if (retval != &EG(uninitialized_zval_ptr)) {
                   34252:                                SEPARATE_ZVAL_IF_NOT_REF(retval);
                   34253:                        }
                   34254:                        PZVAL_LOCK(*retval);
                   34255:                        FREE_OP_VAR_PTR(free_res);
                   34256:                }
                   34257:                /* break missing intentionally */
                   34258:                default:
                   34259:                        EX_T(opline->result.var).var.ptr_ptr = retval;
                   34260:                        break;
                   34261:        }
                   34262:        CHECK_EXCEPTION();
                   34263:        ZEND_VM_NEXT_OPCODE();
                   34264: }
                   34265: 
                   34266: static int ZEND_FASTCALL  ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34267: {
                   34268:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34269: }
                   34270: 
                   34271: static int ZEND_FASTCALL  ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34272: {
                   34273:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34274: }
                   34275: 
                   34276: static int ZEND_FASTCALL  ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34277: {
                   34278:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34279: }
                   34280: 
                   34281: static int ZEND_FASTCALL  ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34282: {
                   34283:        USE_OPLINE
                   34284: 
                   34285:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34286: }
                   34287: 
                   34288: static int ZEND_FASTCALL  ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34289: {
                   34290:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34291: }
                   34292: 
                   34293: static int ZEND_FASTCALL  ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34294: {
                   34295:        return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34296: }
                   34297: 
1.1       misho    34298: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34299: {
1.1.1.2   misho    34300:        USE_OPLINE
1.1       misho    34301:        zend_free_op free_op1;
1.1.1.2   misho    34302:        zval **container;
                   34303: 
                   34304:        SAVE_OPLINE();
                   34305:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    34306: 
1.1.1.2   misho    34307:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    34308:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   34309:        }
1.1.1.2   misho    34310:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
1.1       misho    34311: 
1.1.1.2   misho    34312:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   34313:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    34314:        }
                   34315: 
                   34316:        /* We are going to assign the result by reference */
1.1.1.2   misho    34317:        if (UNEXPECTED(opline->extended_value != 0)) {
                   34318:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   34319: 
                   34320:                if (retval_ptr) {
                   34321:                        Z_DELREF_PP(retval_ptr);
                   34322:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   34323:                        Z_ADDREF_PP(retval_ptr);
                   34324:                }
1.1       misho    34325:        }
                   34326: 
1.1.1.2   misho    34327:        CHECK_EXCEPTION();
1.1       misho    34328:        ZEND_VM_NEXT_OPCODE();
                   34329: }
                   34330: 
                   34331: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34332: {
1.1.1.2   misho    34333:        USE_OPLINE
1.1       misho    34334:        zend_free_op free_op1;
1.1.1.2   misho    34335:        zval **container;
1.1       misho    34336: 
1.1.1.2   misho    34337:        SAVE_OPLINE();
                   34338:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34339: 
                   34340:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    34341:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   34342:        }
1.1.1.2   misho    34343:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
1.1       misho    34344: 
1.1.1.2   misho    34345:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   34346:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    34347:        }
                   34348: 
1.1.1.2   misho    34349:        CHECK_EXCEPTION();
1.1       misho    34350:        ZEND_VM_NEXT_OPCODE();
                   34351: }
                   34352: 
                   34353: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34354: {
1.1.1.2   misho    34355:        USE_OPLINE
1.1       misho    34356:        zend_free_op free_op1;
                   34357: 
1.1.1.2   misho    34358:        SAVE_OPLINE();
                   34359: 
                   34360:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    34361:                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
        !          34362: 
1.1.1.2   misho    34363:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    34364:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   34365:                }
1.1.1.2   misho    34366:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
                   34367:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   34368:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    34369:                }
1.1.1.5 ! misho    34370: 
        !          34371: 
1.1       misho    34372:        } else {
1.1.1.5 ! misho    34373:                zval *container;
        !          34374: 
1.1       misho    34375:                if (IS_UNUSED == IS_UNUSED) {
                   34376:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   34377:                }
1.1.1.5 ! misho    34378:                container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    34379:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_R TSRMLS_CC);
1.1       misho    34380: 
                   34381: 
1.1.1.5 ! misho    34382:        }
1.1.1.2   misho    34383:        CHECK_EXCEPTION();
1.1       misho    34384:        ZEND_VM_NEXT_OPCODE();
                   34385: }
                   34386: 
                   34387: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34388: {
1.1.1.2   misho    34389:        USE_OPLINE
1.1       misho    34390: 
1.1.1.2   misho    34391:        zval **object_ptr;
1.1       misho    34392: 
1.1.1.2   misho    34393:        SAVE_OPLINE();
                   34394:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34395: 
                   34396:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    34397:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   34398:        }
                   34399:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   34400: 
                   34401:                zval *property_name = NULL;
                   34402: 
                   34403:                if (0) {
                   34404:                        MAKE_REAL_ZVAL_PTR(property_name);
                   34405:                }
1.1.1.2   misho    34406:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    34407:                if (0) {
                   34408:                        zval_ptr_dtor(&property_name);
                   34409:                } else {
                   34410: 
                   34411:                }
                   34412:        } else {
                   34413:                zend_free_op free_op_data1, free_op_data2;
                   34414:                zval *value;
                   34415:                zval *dim = NULL;
                   34416:                zval **variable_ptr_ptr;
                   34417: 
1.1.1.2   misho    34418:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_UNUSED, BP_VAR_W TSRMLS_CC);
                   34419: 
                   34420:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   34421:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   34422:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   34423:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   34424:                                if (RETURN_VALUE_USED(opline)) {
                   34425:                                        zval *retval;
1.1       misho    34426: 
1.1.1.2   misho    34427:                                        ALLOC_ZVAL(retval);
                   34428:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   34429:                                        INIT_PZVAL(retval);
                   34430:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   34431:                                }
                   34432:                        } else if (RETURN_VALUE_USED(opline)) {
                   34433:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   34434:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   34435:                        }
                   34436:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   34437:                        if (IS_TMP_FREE(free_op_data1)) {
                   34438:                                zval_dtor(value);
                   34439:                        }
                   34440:                        if (RETURN_VALUE_USED(opline)) {
                   34441:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   34442:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   34443:                        }
                   34444:                } else {
                   34445:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   34446:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   34447:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   34448:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   34449:                        } else {
                   34450:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   34451:                        }
                   34452:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    34453:                                PZVAL_LOCK(value);
1.1.1.2   misho    34454:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    34455:                        }
                   34456:                }
                   34457:                FREE_OP_VAR_PTR(free_op_data2);
                   34458:                FREE_OP_IF_VAR(free_op_data1);
                   34459:        }
                   34460: 
                   34461:        /* assign_dim has two opcodes! */
1.1.1.2   misho    34462:        CHECK_EXCEPTION();
1.1       misho    34463:        ZEND_VM_INC_OPCODE();
                   34464:        ZEND_VM_NEXT_OPCODE();
                   34465: }
                   34466: 
                   34467: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34468: {
1.1.1.2   misho    34469:        USE_OPLINE
1.1       misho    34470: 
                   34471:        zval *expr_ptr;
                   34472: 
1.1.1.2   misho    34473:        SAVE_OPLINE();
                   34474:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   34475:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    34476: 
1.1.1.2   misho    34477:                if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   34478:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   34479:                }
                   34480:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    34481:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    34482:                Z_ADDREF_P(expr_ptr);
1.1       misho    34483:        } else {
1.1.1.2   misho    34484:                expr_ptr=_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34485:                if (0) { /* temporary variable */
                   34486:                        zval *new_expr;
1.1       misho    34487: 
1.1.1.2   misho    34488:                        ALLOC_ZVAL(new_expr);
                   34489:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   34490:                        expr_ptr = new_expr;
                   34491:                } else if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    34492:                        zval *new_expr;
                   34493: 
                   34494:                        ALLOC_ZVAL(new_expr);
                   34495:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   34496:                        expr_ptr = new_expr;
                   34497:                        zendi_zval_copy_ctor(*expr_ptr);
                   34498:                } else {
                   34499:                        Z_ADDREF_P(expr_ptr);
                   34500:                }
                   34501:        }
1.1.1.2   misho    34502: 
                   34503:        if (IS_UNUSED != IS_UNUSED) {
                   34504: 
                   34505:                zval *offset = NULL;
                   34506:                ulong hval;
                   34507: 
1.1       misho    34508:                switch (Z_TYPE_P(offset)) {
                   34509:                        case IS_DOUBLE:
1.1.1.2   misho    34510:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   34511:                                goto num_index;
1.1       misho    34512:                        case IS_LONG:
                   34513:                        case IS_BOOL:
1.1.1.2   misho    34514:                                hval = Z_LVAL_P(offset);
                   34515: num_index:
                   34516:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    34517:                                break;
                   34518:                        case IS_STRING:
1.1.1.2   misho    34519:                                if (IS_UNUSED == IS_CONST) {
                   34520:                                        hval = Z_HASH_P(offset);
                   34521:                                } else {
                   34522:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   34523:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   34524:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   34525:                                        } else {
                   34526:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   34527:                                        }
                   34528:                                }
                   34529:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    34530:                                break;
                   34531:                        case IS_NULL:
1.1.1.2   misho    34532:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    34533:                                break;
                   34534:                        default:
                   34535:                                zend_error(E_WARNING, "Illegal offset type");
                   34536:                                zval_ptr_dtor(&expr_ptr);
                   34537:                                /* do nothing */
                   34538:                                break;
                   34539:                }
                   34540: 
                   34541:        } else {
1.1.1.2   misho    34542:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    34543:        }
1.1.1.2   misho    34544:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
1.1       misho    34545: 
                   34546:        } else {
                   34547: 
                   34548:        }
1.1.1.2   misho    34549:        CHECK_EXCEPTION();
1.1       misho    34550:        ZEND_VM_NEXT_OPCODE();
                   34551: }
                   34552: 
                   34553: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34554: {
1.1.1.2   misho    34555:        USE_OPLINE
1.1       misho    34556: 
1.1.1.2   misho    34557:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    34558:        if (IS_CV == IS_UNUSED) {
                   34559:                ZEND_VM_NEXT_OPCODE();
                   34560: #if 0 || IS_CV != IS_UNUSED
                   34561:        } else {
                   34562:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   34563: #endif
                   34564:        }
                   34565: }
                   34566: 
1.1.1.2   misho    34567: static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34568: {
                   34569:        USE_OPLINE
                   34570:        zval tmp, *varname;
                   34571:        HashTable *target_symbol_table;
                   34572: 
                   34573: 
                   34574:        SAVE_OPLINE();
                   34575:        if (IS_CV == IS_CV &&
                   34576:            IS_UNUSED == IS_UNUSED &&
                   34577:            (opline->extended_value & ZEND_QUICK_SET)) {
                   34578:                if (EG(active_symbol_table)) {
                   34579:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   34580: 
                   34581:                        zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table),  cv->name, cv->name_len+1, cv->hash_value TSRMLS_CC);
                   34582:                        EX_CV(opline->op1.var) = NULL;
                   34583:                } else if (EX_CV(opline->op1.var)) {
                   34584:                        zval_ptr_dtor(EX_CV(opline->op1.var));
                   34585:                        EX_CV(opline->op1.var) = NULL;
                   34586:                }
                   34587:                CHECK_EXCEPTION();
                   34588:                ZEND_VM_NEXT_OPCODE();
                   34589:        }
                   34590: 
                   34591:        varname = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34592: 
                   34593:        if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   34594:                ZVAL_COPY_VALUE(&tmp, varname);
                   34595:                zval_copy_ctor(&tmp);
                   34596:                convert_to_string(&tmp);
                   34597:                varname = &tmp;
                   34598:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   34599:                Z_ADDREF_P(varname);
                   34600:        }
                   34601: 
                   34602:        if (IS_UNUSED != IS_UNUSED) {
                   34603:                zend_class_entry *ce;
                   34604: 
                   34605:                if (IS_UNUSED == IS_CONST) {
                   34606:                        if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   34607:                                ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   34608:                        } else {
                   34609:                                ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
1.1.1.4   misho    34610:                                if (UNEXPECTED(EG(exception) != NULL)) {
1.1.1.2   misho    34611:                                        if (IS_CV != IS_CONST && varname == &tmp) {
                   34612:                                                zval_dtor(&tmp);
                   34613:                                        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   34614:                                                zval_ptr_dtor(&varname);
                   34615:                                        }
                   34616: 
1.1.1.4   misho    34617:                                        HANDLE_EXCEPTION();
                   34618:                                }
                   34619:                                if (UNEXPECTED(ce == NULL)) {
                   34620:                                        zend_error_noreturn(E_ERROR, "Class '%s' not found", Z_STRVAL_P(opline->op2.zv));
1.1.1.2   misho    34621:                                }
                   34622:                                CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   34623:                        }
                   34624:                } else {
                   34625:                        ce = EX_T(opline->op2.var).class_entry;
                   34626:                }
                   34627:                zend_std_unset_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   34628:        } else {
                   34629:                ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
                   34630: 
                   34631:                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   34632:                zend_delete_variable(execute_data, target_symbol_table, varname->value.str.val, varname->value.str.len+1, hash_value TSRMLS_CC);
                   34633:        }
                   34634: 
                   34635:        if (IS_CV != IS_CONST && varname == &tmp) {
                   34636:                zval_dtor(&tmp);
                   34637:        } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
                   34638:                zval_ptr_dtor(&varname);
                   34639:        }
                   34640: 
                   34641:        CHECK_EXCEPTION();
                   34642:        ZEND_VM_NEXT_OPCODE();
                   34643: }
                   34644: 
                   34645: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34646: {
                   34647:        USE_OPLINE
                   34648:        zval **value;
                   34649:        zend_bool isset = 1;
                   34650: 
                   34651:        SAVE_OPLINE();
                   34652:        if (IS_CV == IS_CV &&
                   34653:            IS_UNUSED == IS_UNUSED &&
                   34654:            (opline->extended_value & ZEND_QUICK_SET)) {
                   34655:                if (EX_CV(opline->op1.var)) {
                   34656:                        value = EX_CV(opline->op1.var);
                   34657:                } else if (EG(active_symbol_table)) {
                   34658:                        zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.var);
                   34659: 
                   34660:                        if (zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **) &value) == FAILURE) {
                   34661:                                isset = 0;
                   34662:                        }
                   34663:                } else {
                   34664:                        isset = 0;
                   34665:                }
                   34666:        } else {
                   34667:                HashTable *target_symbol_table;
                   34668: 
                   34669:                zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   34670: 
                   34671:                if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
                   34672:                        ZVAL_COPY_VALUE(&tmp, varname);
                   34673:                        zval_copy_ctor(&tmp);
                   34674:                        convert_to_string(&tmp);
                   34675:                        varname = &tmp;
                   34676:                }
                   34677: 
                   34678:                if (IS_UNUSED != IS_UNUSED) {
                   34679:                        zend_class_entry *ce;
                   34680: 
                   34681:                        if (IS_UNUSED == IS_CONST) {
                   34682:                                if (CACHED_PTR(opline->op2.literal->cache_slot)) {
                   34683:                                        ce = CACHED_PTR(opline->op2.literal->cache_slot);
                   34684:                                } else {
                   34685:                                        ce = zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
                   34686:                                        if (UNEXPECTED(ce == NULL)) {
                   34687:                                                CHECK_EXCEPTION();
                   34688:                                                ZEND_VM_NEXT_OPCODE();
                   34689:                                        }
                   34690:                                        CACHE_PTR(opline->op2.literal->cache_slot, ce);
                   34691:                                }
                   34692:                        } else {
                   34693:                                ce = EX_T(opline->op2.var).class_entry;
                   34694:                        }
                   34695:                        value = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1, ((IS_CV == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
                   34696:                        if (!value) {
                   34697:                                isset = 0;
                   34698:                        }
                   34699:                } else {
                   34700:                        target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                   34701:                        if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
                   34702:                                isset = 0;
                   34703:                        }
                   34704:                }
                   34705: 
                   34706:                if (IS_CV != IS_CONST && varname == &tmp) {
                   34707:                        zval_dtor(&tmp);
                   34708:                }
                   34709: 
                   34710:        }
                   34711: 
                   34712:        if (opline->extended_value & ZEND_ISSET) {
                   34713:                if (isset && Z_TYPE_PP(value) != IS_NULL) {
                   34714:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   34715:                } else {
                   34716:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   34717:                }
                   34718:        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   34719:                if (!isset || !i_zend_is_true(*value)) {
                   34720:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 1);
                   34721:                } else {
                   34722:                        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, 0);
                   34723:                }
                   34724:        }
                   34725: 
                   34726:        CHECK_EXCEPTION();
                   34727:        ZEND_VM_NEXT_OPCODE();
                   34728: }
                   34729: 
1.1       misho    34730: static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34731: {
1.1.1.2   misho    34732:        USE_OPLINE
1.1       misho    34733: 
                   34734: 
1.1.1.2   misho    34735:        SAVE_OPLINE();
                   34736:        fast_add_function(&EX_T(opline->result.var).tmp_var,
                   34737:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34738:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34739: 
                   34740: 
1.1.1.2   misho    34741:        CHECK_EXCEPTION();
1.1       misho    34742:        ZEND_VM_NEXT_OPCODE();
                   34743: }
                   34744: 
                   34745: static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34746: {
1.1.1.2   misho    34747:        USE_OPLINE
1.1       misho    34748: 
                   34749: 
1.1.1.2   misho    34750:        SAVE_OPLINE();
                   34751:        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                   34752:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34753:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34754: 
                   34755: 
1.1.1.2   misho    34756:        CHECK_EXCEPTION();
1.1       misho    34757:        ZEND_VM_NEXT_OPCODE();
                   34758: }
                   34759: 
                   34760: static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34761: {
1.1.1.2   misho    34762:        USE_OPLINE
1.1       misho    34763: 
                   34764: 
1.1.1.2   misho    34765:        SAVE_OPLINE();
                   34766:        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                   34767:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34768:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34769: 
                   34770: 
1.1.1.2   misho    34771:        CHECK_EXCEPTION();
1.1       misho    34772:        ZEND_VM_NEXT_OPCODE();
                   34773: }
                   34774: 
                   34775: static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34776: {
1.1.1.2   misho    34777:        USE_OPLINE
1.1       misho    34778: 
                   34779: 
1.1.1.2   misho    34780:        SAVE_OPLINE();
                   34781:        fast_div_function(&EX_T(opline->result.var).tmp_var,
                   34782:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34783:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34784: 
                   34785: 
1.1.1.2   misho    34786:        CHECK_EXCEPTION();
1.1       misho    34787:        ZEND_VM_NEXT_OPCODE();
                   34788: }
                   34789: 
                   34790: static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34791: {
1.1.1.2   misho    34792:        USE_OPLINE
1.1       misho    34793: 
                   34794: 
1.1.1.2   misho    34795:        SAVE_OPLINE();
                   34796:        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                   34797:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34798:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34799: 
                   34800: 
1.1.1.2   misho    34801:        CHECK_EXCEPTION();
1.1       misho    34802:        ZEND_VM_NEXT_OPCODE();
                   34803: }
                   34804: 
                   34805: static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34806: {
1.1.1.2   misho    34807:        USE_OPLINE
1.1       misho    34808: 
                   34809: 
1.1.1.2   misho    34810:        SAVE_OPLINE();
                   34811:        shift_left_function(&EX_T(opline->result.var).tmp_var,
                   34812:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34813:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34814: 
                   34815: 
1.1.1.2   misho    34816:        CHECK_EXCEPTION();
1.1       misho    34817:        ZEND_VM_NEXT_OPCODE();
                   34818: }
                   34819: 
                   34820: static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34821: {
1.1.1.2   misho    34822:        USE_OPLINE
1.1       misho    34823: 
                   34824: 
1.1.1.2   misho    34825:        SAVE_OPLINE();
                   34826:        shift_right_function(&EX_T(opline->result.var).tmp_var,
                   34827:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34828:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34829: 
                   34830: 
1.1.1.2   misho    34831:        CHECK_EXCEPTION();
1.1       misho    34832:        ZEND_VM_NEXT_OPCODE();
                   34833: }
                   34834: 
                   34835: static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34836: {
1.1.1.2   misho    34837:        USE_OPLINE
1.1       misho    34838: 
                   34839: 
1.1.1.2   misho    34840:        SAVE_OPLINE();
                   34841:        concat_function(&EX_T(opline->result.var).tmp_var,
                   34842:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34843:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34844: 
                   34845: 
1.1.1.2   misho    34846:        CHECK_EXCEPTION();
1.1       misho    34847:        ZEND_VM_NEXT_OPCODE();
                   34848: }
                   34849: 
                   34850: static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34851: {
1.1.1.2   misho    34852:        USE_OPLINE
1.1       misho    34853: 
                   34854: 
1.1.1.2   misho    34855:        SAVE_OPLINE();
                   34856:        is_identical_function(&EX_T(opline->result.var).tmp_var,
                   34857:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34858:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34859: 
                   34860: 
1.1.1.2   misho    34861:        CHECK_EXCEPTION();
1.1       misho    34862:        ZEND_VM_NEXT_OPCODE();
                   34863: }
                   34864: 
                   34865: static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34866: {
1.1.1.2   misho    34867:        USE_OPLINE
1.1       misho    34868: 
1.1.1.2   misho    34869:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    34870: 
1.1.1.2   misho    34871:        SAVE_OPLINE();
1.1       misho    34872:        is_identical_function(result,
1.1.1.2   misho    34873:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34874:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34875:        Z_LVAL_P(result) = !Z_LVAL_P(result);
                   34876: 
                   34877: 
1.1.1.2   misho    34878:        CHECK_EXCEPTION();
1.1       misho    34879:        ZEND_VM_NEXT_OPCODE();
                   34880: }
                   34881: 
                   34882: static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34883: {
1.1.1.2   misho    34884:        USE_OPLINE
1.1       misho    34885: 
1.1.1.2   misho    34886:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    34887: 
1.1.1.2   misho    34888:        SAVE_OPLINE();
                   34889:        ZVAL_BOOL(result, fast_equal_function(result,
                   34890:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34891:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    34892: 
                   34893: 
1.1.1.2   misho    34894:        CHECK_EXCEPTION();
1.1       misho    34895:        ZEND_VM_NEXT_OPCODE();
                   34896: }
                   34897: 
                   34898: static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34899: {
1.1.1.2   misho    34900:        USE_OPLINE
1.1       misho    34901: 
1.1.1.2   misho    34902:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    34903: 
1.1.1.2   misho    34904:        SAVE_OPLINE();
                   34905:        ZVAL_BOOL(result, fast_not_equal_function(result,
                   34906:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34907:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    34908: 
                   34909: 
1.1.1.2   misho    34910:        CHECK_EXCEPTION();
1.1       misho    34911:        ZEND_VM_NEXT_OPCODE();
                   34912: }
                   34913: 
                   34914: static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34915: {
1.1.1.2   misho    34916:        USE_OPLINE
1.1       misho    34917: 
1.1.1.2   misho    34918:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    34919: 
1.1.1.2   misho    34920:        SAVE_OPLINE();
                   34921:        ZVAL_BOOL(result, fast_is_smaller_function(result,
                   34922:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34923:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    34924: 
                   34925: 
1.1.1.2   misho    34926:        CHECK_EXCEPTION();
1.1       misho    34927:        ZEND_VM_NEXT_OPCODE();
                   34928: }
                   34929: 
                   34930: static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34931: {
1.1.1.2   misho    34932:        USE_OPLINE
1.1       misho    34933: 
1.1.1.2   misho    34934:        zval *result = &EX_T(opline->result.var).tmp_var;
1.1       misho    34935: 
1.1.1.2   misho    34936:        SAVE_OPLINE();
                   34937:        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                   34938:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34939:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC));
1.1       misho    34940: 
                   34941: 
1.1.1.2   misho    34942:        CHECK_EXCEPTION();
1.1       misho    34943:        ZEND_VM_NEXT_OPCODE();
                   34944: }
                   34945: 
                   34946: static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34947: {
1.1.1.2   misho    34948:        USE_OPLINE
1.1       misho    34949: 
                   34950: 
1.1.1.2   misho    34951:        SAVE_OPLINE();
                   34952:        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                   34953:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34954:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34955: 
                   34956: 
1.1.1.2   misho    34957:        CHECK_EXCEPTION();
1.1       misho    34958:        ZEND_VM_NEXT_OPCODE();
                   34959: }
                   34960: 
                   34961: static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34962: {
1.1.1.2   misho    34963:        USE_OPLINE
1.1       misho    34964: 
                   34965: 
1.1.1.2   misho    34966:        SAVE_OPLINE();
                   34967:        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                   34968:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34969:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34970: 
                   34971: 
1.1.1.2   misho    34972:        CHECK_EXCEPTION();
1.1       misho    34973:        ZEND_VM_NEXT_OPCODE();
                   34974: }
                   34975: 
                   34976: static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34977: {
1.1.1.2   misho    34978:        USE_OPLINE
1.1       misho    34979: 
                   34980: 
1.1.1.2   misho    34981:        SAVE_OPLINE();
                   34982:        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                   34983:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34984:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    34985: 
                   34986: 
1.1.1.2   misho    34987:        CHECK_EXCEPTION();
1.1       misho    34988:        ZEND_VM_NEXT_OPCODE();
                   34989: }
                   34990: 
                   34991: static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   34992: {
1.1.1.2   misho    34993:        USE_OPLINE
1.1       misho    34994: 
                   34995: 
1.1.1.2   misho    34996:        SAVE_OPLINE();
                   34997:        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                   34998:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   34999:                _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    35000: 
                   35001: 
1.1.1.2   misho    35002:        CHECK_EXCEPTION();
1.1       misho    35003:        ZEND_VM_NEXT_OPCODE();
                   35004: }
                   35005: 
                   35006: static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   35007: {
1.1.1.2   misho    35008:        USE_OPLINE
1.1       misho    35009:        zend_free_op free_op_data1;
1.1.1.2   misho    35010:        zval **object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35011:        zval *object;
1.1.1.2   misho    35012:        zval *property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35013:        zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
1.1       misho    35014:        int have_get_ptr = 0;
                   35015: 
1.1.1.2   misho    35016:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    35017:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   35018:        }
                   35019: 
                   35020:        make_real_object(object_ptr TSRMLS_CC);
                   35021:        object = *object_ptr;
                   35022: 
1.1.1.2   misho    35023:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    35024:                zend_error(E_WARNING, "Attempt to assign property of non-object");
                   35025: 
                   35026:                FREE_OP(free_op_data1);
                   35027: 
1.1.1.2   misho    35028:                if (RETURN_VALUE_USED(opline)) {
                   35029:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   35030:                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   35031:                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    35032:                }
                   35033:        } else {
                   35034:                /* here we are sure we are dealing with an object */
                   35035:                if (0) {
                   35036:                        MAKE_REAL_ZVAL_PTR(property);
                   35037:                }
                   35038: 
                   35039:                /* here property is a string */
                   35040:                if (opline->extended_value == ZEND_ASSIGN_OBJ
                   35041:                        && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    35042:                        zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35043:                        if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   35044:                                SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   35045: 
                   35046:                                have_get_ptr = 1;
                   35047:                                binary_op(*zptr, *zptr, value TSRMLS_CC);
1.1.1.2   misho    35048:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    35049:                                        PZVAL_LOCK(*zptr);
1.1.1.2   misho    35050:                                        EX_T(opline->result.var).var.ptr = *zptr;
                   35051:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    35052:                                }
                   35053:                        }
                   35054:                }
                   35055: 
                   35056:                if (!have_get_ptr) {
                   35057:                        zval *z = NULL;
                   35058: 
                   35059:                        if (opline->extended_value == ZEND_ASSIGN_OBJ) {
                   35060:                                if (Z_OBJ_HT_P(object)->read_property) {
1.1.1.2   misho    35061:                                        z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35062:                                }
                   35063:                        } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   35064:                                if (Z_OBJ_HT_P(object)->read_dimension) {
                   35065:                                        z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
                   35066:                                }
                   35067:                        }
                   35068:                        if (z) {
                   35069:                                if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
                   35070:                                        zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   35071: 
                   35072:                                        if (Z_REFCOUNT_P(z) == 0) {
                   35073:                                                GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   35074:                                                zval_dtor(z);
                   35075:                                                FREE_ZVAL(z);
                   35076:                                        }
                   35077:                                        z = value;
                   35078:                                }
                   35079:                                Z_ADDREF_P(z);
                   35080:                                SEPARATE_ZVAL_IF_NOT_REF(&z);
                   35081:                                binary_op(z, z, value TSRMLS_CC);
                   35082:                                if (opline->extended_value == ZEND_ASSIGN_OBJ) {
1.1.1.2   misho    35083:                                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35084:                                } else /* if (opline->extended_value == ZEND_ASSIGN_DIM) */ {
                   35085:                                        Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
                   35086:                                }
1.1.1.2   misho    35087:                                if (RETURN_VALUE_USED(opline)) {
1.1       misho    35088:                                        PZVAL_LOCK(z);
1.1.1.2   misho    35089:                                        EX_T(opline->result.var).var.ptr = z;
                   35090:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    35091:                                }
                   35092:                                zval_ptr_dtor(&z);
                   35093:                        } else {
                   35094:                                zend_error(E_WARNING, "Attempt to assign property of non-object");
1.1.1.2   misho    35095:                                if (RETURN_VALUE_USED(opline)) {
                   35096:                                        PZVAL_LOCK(&EG(uninitialized_zval));
                   35097:                                        EX_T(opline->result.var).var.ptr = &EG(uninitialized_zval);
                   35098:                                        EX_T(opline->result.var).var.ptr_ptr = NULL;
1.1       misho    35099:                                }
                   35100:                        }
                   35101:                }
                   35102: 
                   35103:                if (0) {
                   35104:                        zval_ptr_dtor(&property);
                   35105:                } else {
                   35106: 
                   35107:                }
                   35108:                FREE_OP(free_op_data1);
                   35109:        }
                   35110: 
                   35111:        /* assign_obj has two opcodes! */
1.1.1.2   misho    35112:        CHECK_EXCEPTION();
1.1       misho    35113:        ZEND_VM_INC_OPCODE();
                   35114:        ZEND_VM_NEXT_OPCODE();
                   35115: }
                   35116: 
                   35117: static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
                   35118: {
1.1.1.2   misho    35119:        USE_OPLINE
1.1       misho    35120:        zend_free_op free_op_data2, free_op_data1;
                   35121:        zval **var_ptr;
                   35122:        zval *value;
                   35123: 
1.1.1.2   misho    35124:        SAVE_OPLINE();
1.1       misho    35125:        switch (opline->extended_value) {
                   35126:                case ZEND_ASSIGN_OBJ:
                   35127:                        return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35128:                        break;
                   35129:                case ZEND_ASSIGN_DIM: {
1.1.1.2   misho    35130:                                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35131: 
1.1.1.2   misho    35132:                                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35133:                                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
1.1.1.2   misho    35134:                                } else if (UNEXPECTED(Z_TYPE_PP(container) == IS_OBJECT)) {
1.1       misho    35135:                                        if (IS_CV == IS_VAR && !0) {
                   35136:                                                Z_ADDREF_PP(container);  /* undo the effect of get_obj_zval_ptr_ptr() */
                   35137:                                        }
                   35138:                                        return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35139:                                } else {
1.1.1.2   misho    35140:                                        zval *dim = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    35141: 
1.1.1.2   misho    35142:                                        zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
                   35143:                                        value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   35144:                                        var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
1.1       misho    35145:                                }
                   35146:                        }
                   35147:                        break;
                   35148:                default:
1.1.1.2   misho    35149:                        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35150:                        var_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35151:                        /* do nothing */
                   35152:                        break;
                   35153:        }
                   35154: 
1.1.1.2   misho    35155:        if (UNEXPECTED(var_ptr == NULL)) {
1.1       misho    35156:                zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
                   35157:        }
                   35158: 
1.1.1.2   misho    35159:        if (UNEXPECTED(*var_ptr == &EG(error_zval))) {
                   35160:                if (RETURN_VALUE_USED(opline)) {
                   35161:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   35162:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    35163:                }
                   35164: 
                   35165: 
1.1.1.2   misho    35166:                CHECK_EXCEPTION();
                   35167:                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   35168:                        ZEND_VM_INC_OPCODE();
                   35169:                }
1.1       misho    35170:                ZEND_VM_NEXT_OPCODE();
                   35171:        }
                   35172: 
                   35173:        SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
                   35174: 
1.1.1.2   misho    35175:        if (UNEXPECTED(Z_TYPE_PP(var_ptr) == IS_OBJECT)
                   35176:           && Z_OBJ_HANDLER_PP(var_ptr, get)
1.1       misho    35177:           && Z_OBJ_HANDLER_PP(var_ptr, set)) {
                   35178:                /* proxy object */
                   35179:                zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
                   35180:                Z_ADDREF_P(objval);
                   35181:                binary_op(objval, objval, value TSRMLS_CC);
                   35182:                Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                   35183:                zval_ptr_dtor(&objval);
                   35184:        } else {
                   35185:                binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
                   35186:        }
                   35187: 
1.1.1.2   misho    35188:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    35189:                PZVAL_LOCK(*var_ptr);
1.1.1.2   misho    35190:                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
1.1       misho    35191:        }
                   35192: 
                   35193:        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                   35194:                FREE_OP(free_op_data1);
                   35195:                FREE_OP_VAR_PTR(free_op_data2);
                   35196: 
1.1.1.2   misho    35197:                CHECK_EXCEPTION();
                   35198:                ZEND_VM_INC_OPCODE();
                   35199:        } else {
                   35200: 
                   35201:                CHECK_EXCEPTION();
                   35202:        }
1.1       misho    35203:        ZEND_VM_NEXT_OPCODE();
                   35204: }
                   35205: 
                   35206: static int ZEND_FASTCALL  ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35207: {
                   35208:        return zend_binary_assign_op_helper_SPEC_CV_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35209: }
                   35210: 
                   35211: static int ZEND_FASTCALL  ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35212: {
                   35213:        return zend_binary_assign_op_helper_SPEC_CV_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35214: }
                   35215: 
                   35216: static int ZEND_FASTCALL  ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35217: {
                   35218:        return zend_binary_assign_op_helper_SPEC_CV_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35219: }
                   35220: 
                   35221: static int ZEND_FASTCALL  ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35222: {
                   35223:        return zend_binary_assign_op_helper_SPEC_CV_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35224: }
                   35225: 
                   35226: static int ZEND_FASTCALL  ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35227: {
                   35228:        return zend_binary_assign_op_helper_SPEC_CV_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35229: }
                   35230: 
                   35231: static int ZEND_FASTCALL  ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35232: {
                   35233:        return zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35234: }
                   35235: 
                   35236: static int ZEND_FASTCALL  ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35237: {
                   35238:        return zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35239: }
                   35240: 
                   35241: static int ZEND_FASTCALL  ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35242: {
                   35243:        return zend_binary_assign_op_helper_SPEC_CV_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35244: }
                   35245: 
                   35246: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35247: {
                   35248:        return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35249: }
                   35250: 
                   35251: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35252: {
                   35253:        return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35254: }
                   35255: 
                   35256: static int ZEND_FASTCALL  ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35257: {
                   35258:        return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35259: }
                   35260: 
                   35261: static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   35262: {
1.1.1.2   misho    35263:        USE_OPLINE
1.1       misho    35264: 
1.1.1.2   misho    35265:        zval **object_ptr;
1.1       misho    35266:        zval *object;
1.1.1.2   misho    35267:        zval *property;
                   35268:        zval **retval;
1.1       misho    35269:        int have_get_ptr = 0;
                   35270: 
1.1.1.2   misho    35271:        SAVE_OPLINE();
                   35272:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35273:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35274:        retval = &EX_T(opline->result.var).var.ptr;
                   35275: 
                   35276:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    35277:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   35278:        }
                   35279: 
                   35280:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   35281:        object = *object_ptr;
                   35282: 
1.1.1.2   misho    35283:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    35284:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   35285: 
1.1.1.2   misho    35286:                if (RETURN_VALUE_USED(opline)) {
                   35287:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   35288:                        *retval = &EG(uninitialized_zval);
1.1       misho    35289:                }
                   35290: 
1.1.1.2   misho    35291:                CHECK_EXCEPTION();
1.1       misho    35292:                ZEND_VM_NEXT_OPCODE();
                   35293:        }
                   35294: 
                   35295:        /* here we are sure we are dealing with an object */
                   35296: 
                   35297:        if (0) {
                   35298:                MAKE_REAL_ZVAL_PTR(property);
                   35299:        }
                   35300: 
                   35301:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    35302:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35303:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   35304:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   35305: 
                   35306:                        have_get_ptr = 1;
                   35307:                        incdec_op(*zptr);
1.1.1.2   misho    35308:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    35309:                                *retval = *zptr;
                   35310:                                PZVAL_LOCK(*retval);
                   35311:                        }
                   35312:                }
                   35313:        }
                   35314: 
                   35315:        if (!have_get_ptr) {
                   35316:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    35317:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35318: 
1.1.1.2   misho    35319:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    35320:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   35321: 
                   35322:                                if (Z_REFCOUNT_P(z) == 0) {
                   35323:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   35324:                                        zval_dtor(z);
                   35325:                                        FREE_ZVAL(z);
                   35326:                                }
                   35327:                                z = value;
                   35328:                        }
                   35329:                        Z_ADDREF_P(z);
                   35330:                        SEPARATE_ZVAL_IF_NOT_REF(&z);
                   35331:                        incdec_op(z);
                   35332:                        *retval = z;
1.1.1.2   misho    35333:                        Z_OBJ_HT_P(object)->write_property(object, property, z, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   35334:                        SELECTIVE_PZVAL_LOCK(*retval, opline);
1.1       misho    35335:                        zval_ptr_dtor(&z);
                   35336:                } else {
                   35337:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    35338:                        if (RETURN_VALUE_USED(opline)) {
                   35339:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   35340:                                *retval = &EG(uninitialized_zval);
1.1       misho    35341:                        }
                   35342:                }
                   35343:        }
                   35344: 
                   35345:        if (0) {
                   35346:                zval_ptr_dtor(&property);
                   35347:        } else {
                   35348: 
                   35349:        }
                   35350: 
1.1.1.2   misho    35351:        CHECK_EXCEPTION();
1.1       misho    35352:        ZEND_VM_NEXT_OPCODE();
                   35353: }
                   35354: 
                   35355: static int ZEND_FASTCALL  ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35356: {
                   35357:        return zend_pre_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35358: }
                   35359: 
                   35360: static int ZEND_FASTCALL  ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35361: {
                   35362:        return zend_pre_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35363: }
                   35364: 
                   35365: static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
                   35366: {
1.1.1.2   misho    35367:        USE_OPLINE
1.1       misho    35368: 
1.1.1.2   misho    35369:        zval **object_ptr;
1.1       misho    35370:        zval *object;
1.1.1.2   misho    35371:        zval *property;
                   35372:        zval *retval;
1.1       misho    35373:        int have_get_ptr = 0;
                   35374: 
1.1.1.2   misho    35375:        SAVE_OPLINE();
                   35376:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35377:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35378:        retval = &EX_T(opline->result.var).tmp_var;
                   35379: 
                   35380:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    35381:                zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                   35382:        }
                   35383: 
                   35384:        make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
                   35385:        object = *object_ptr;
                   35386: 
1.1.1.2   misho    35387:        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
1.1       misho    35388:                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                   35389: 
1.1.1.2   misho    35390:                ZVAL_NULL(retval);
1.1       misho    35391: 
1.1.1.2   misho    35392:                CHECK_EXCEPTION();
1.1       misho    35393:                ZEND_VM_NEXT_OPCODE();
                   35394:        }
                   35395: 
                   35396:        /* here we are sure we are dealing with an object */
                   35397: 
                   35398:        if (0) {
                   35399:                MAKE_REAL_ZVAL_PTR(property);
                   35400:        }
                   35401: 
                   35402:        if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
1.1.1.2   misho    35403:                zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35404:                if (zptr != NULL) {                     /* NULL means no success in getting PTR */
                   35405:                        have_get_ptr = 1;
                   35406:                        SEPARATE_ZVAL_IF_NOT_REF(zptr);
                   35407: 
1.1.1.2   misho    35408:                        ZVAL_COPY_VALUE(retval, *zptr);
1.1       misho    35409:                        zendi_zval_copy_ctor(*retval);
                   35410: 
                   35411:                        incdec_op(*zptr);
                   35412: 
                   35413:                }
                   35414:        }
                   35415: 
                   35416:        if (!have_get_ptr) {
                   35417:                if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1.1.1.2   misho    35418:                        zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35419:                        zval *z_copy;
                   35420: 
1.1.1.2   misho    35421:                        if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) {
1.1       misho    35422:                                zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
                   35423: 
                   35424:                                if (Z_REFCOUNT_P(z) == 0) {
                   35425:                                        GC_REMOVE_ZVAL_FROM_BUFFER(z);
                   35426:                                        zval_dtor(z);
                   35427:                                        FREE_ZVAL(z);
                   35428:                                }
                   35429:                                z = value;
                   35430:                        }
1.1.1.2   misho    35431:                        ZVAL_COPY_VALUE(retval, z);
1.1       misho    35432:                        zendi_zval_copy_ctor(*retval);
                   35433:                        ALLOC_ZVAL(z_copy);
1.1.1.2   misho    35434:                        INIT_PZVAL_COPY(z_copy, z);
1.1       misho    35435:                        zendi_zval_copy_ctor(*z_copy);
                   35436:                        incdec_op(z_copy);
                   35437:                        Z_ADDREF_P(z);
1.1.1.2   misho    35438:                        Z_OBJ_HT_P(object)->write_property(object, property, z_copy, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35439:                        zval_ptr_dtor(&z_copy);
                   35440:                        zval_ptr_dtor(&z);
                   35441:                } else {
                   35442:                        zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
1.1.1.2   misho    35443:                        ZVAL_NULL(retval);
1.1       misho    35444:                }
                   35445:        }
                   35446: 
                   35447:        if (0) {
                   35448:                zval_ptr_dtor(&property);
                   35449:        } else {
                   35450: 
                   35451:        }
                   35452: 
1.1.1.2   misho    35453:        CHECK_EXCEPTION();
1.1       misho    35454:        ZEND_VM_NEXT_OPCODE();
                   35455: }
                   35456: 
                   35457: static int ZEND_FASTCALL  ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35458: {
                   35459:        return zend_post_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35460: }
                   35461: 
                   35462: static int ZEND_FASTCALL  ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35463: {
                   35464:        return zend_post_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   35465: }
                   35466: 
                   35467: static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35468: {
1.1.1.2   misho    35469:        USE_OPLINE
1.1       misho    35470: 
1.1.1.5 ! misho    35471:        zval *container;
1.1       misho    35472: 
1.1.1.2   misho    35473:        SAVE_OPLINE();
                   35474: 
1.1.1.5 ! misho    35475:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
        !          35476:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    35477:        }
1.1.1.5 ! misho    35478:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    35479:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
1.1       misho    35480: 
                   35481: 
1.1.1.2   misho    35482:        CHECK_EXCEPTION();
1.1       misho    35483:        ZEND_VM_NEXT_OPCODE();
                   35484: }
                   35485: 
                   35486: static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35487: {
1.1.1.2   misho    35488:        USE_OPLINE
1.1       misho    35489:        zend_free_op free_op1;
1.1.1.2   misho    35490:        zval **container;
1.1       misho    35491: 
1.1.1.2   misho    35492:        SAVE_OPLINE();
                   35493:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35494: 
                   35495:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35496:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35497:        }
1.1.1.2   misho    35498:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
1.1       misho    35499: 
1.1.1.2   misho    35500:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35501:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35502:        }
                   35503: 
                   35504:        /* We are going to assign the result by reference */
1.1.1.2   misho    35505:        if (UNEXPECTED(opline->extended_value != 0)) {
                   35506:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   35507: 
                   35508:                if (retval_ptr) {
                   35509:                        Z_DELREF_PP(retval_ptr);
                   35510:                        SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   35511:                        Z_ADDREF_PP(retval_ptr);
                   35512:                }
1.1       misho    35513:        }
                   35514: 
1.1.1.2   misho    35515:        CHECK_EXCEPTION();
1.1       misho    35516:        ZEND_VM_NEXT_OPCODE();
                   35517: }
                   35518: 
                   35519: static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35520: {
1.1.1.2   misho    35521:        USE_OPLINE
1.1       misho    35522:        zend_free_op free_op1;
1.1.1.2   misho    35523:        zval **container;
                   35524: 
                   35525:        SAVE_OPLINE();
                   35526:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35527: 
1.1.1.2   misho    35528:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35529:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35530:        }
1.1.1.2   misho    35531:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_RW TSRMLS_CC);
1.1       misho    35532: 
1.1.1.2   misho    35533:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35534:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35535:        }
                   35536: 
1.1.1.2   misho    35537:        CHECK_EXCEPTION();
1.1       misho    35538:        ZEND_VM_NEXT_OPCODE();
                   35539: }
                   35540: 
                   35541: static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35542: {
1.1.1.2   misho    35543:        USE_OPLINE
1.1       misho    35544: 
1.1.1.5 ! misho    35545:        zval *container;
1.1       misho    35546: 
1.1.1.2   misho    35547:        SAVE_OPLINE();
1.1.1.5 ! misho    35548:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    35549:        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
1.1       misho    35550: 
                   35551: 
1.1.1.2   misho    35552:        CHECK_EXCEPTION();
1.1       misho    35553:        ZEND_VM_NEXT_OPCODE();
                   35554: }
                   35555: 
                   35556: static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35557: {
1.1.1.2   misho    35558:        USE_OPLINE
1.1       misho    35559:        zend_free_op free_op1;
                   35560: 
1.1.1.2   misho    35561:        SAVE_OPLINE();
                   35562: 
                   35563:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1.1.5 ! misho    35564:                zval **container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
        !          35565: 
1.1.1.2   misho    35566:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35567:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35568:                }
1.1.1.2   misho    35569:                zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
                   35570:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35571:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35572:                }
1.1.1.5 ! misho    35573: 
        !          35574: 
1.1       misho    35575:        } else {
1.1.1.5 ! misho    35576:                zval *container;
        !          35577: 
1.1       misho    35578:                if (IS_CV == IS_UNUSED) {
                   35579:                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                   35580:                }
1.1.1.5 ! misho    35581:                container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1.1.2   misho    35582:                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
1.1       misho    35583: 
                   35584: 
1.1.1.5 ! misho    35585:        }
1.1.1.2   misho    35586:        CHECK_EXCEPTION();
1.1       misho    35587:        ZEND_VM_NEXT_OPCODE();
                   35588: }
                   35589: 
                   35590: static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35591: {
1.1.1.2   misho    35592:        USE_OPLINE
1.1       misho    35593:        zend_free_op free_op1;
1.1.1.2   misho    35594:        zval **container;
                   35595: 
                   35596:        SAVE_OPLINE();
                   35597:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35598: 
                   35599:        if (IS_CV == IS_CV) {
                   35600:                if (container != &EG(uninitialized_zval_ptr)) {
                   35601:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   35602:                }
                   35603:        }
1.1.1.2   misho    35604:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35605:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35606:        }
1.1.1.2   misho    35607:        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_UNSET TSRMLS_CC);
1.1       misho    35608: 
1.1.1.2   misho    35609:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35610:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35611:        }
                   35612: 
1.1.1.2   misho    35613:        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
1.1       misho    35614:                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   35615:        } else {
                   35616:                zend_free_op free_res;
1.1.1.2   misho    35617:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
1.1       misho    35618: 
1.1.1.2   misho    35619:                PZVAL_UNLOCK(*retval_ptr, &free_res);
                   35620:                if (retval_ptr != &EG(uninitialized_zval_ptr)) {
                   35621:                        SEPARATE_ZVAL_IF_NOT_REF(retval_ptr);
1.1       misho    35622:                }
1.1.1.2   misho    35623:                PZVAL_LOCK(*retval_ptr);
1.1       misho    35624:                FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    35625:                CHECK_EXCEPTION();
                   35626:                ZEND_VM_NEXT_OPCODE();
1.1       misho    35627:        }
                   35628: }
                   35629: 
1.1.1.2   misho    35630: static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_CV(ZEND_OPCODE_HANDLER_ARGS)
1.1       misho    35631: {
1.1.1.2   misho    35632:        USE_OPLINE
1.1       misho    35633: 
1.1.1.2   misho    35634:        zval *container;
1.1       misho    35635: 
1.1.1.2   misho    35636:        zval *offset;
1.1       misho    35637: 
1.1.1.2   misho    35638:        SAVE_OPLINE();
                   35639:        container = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35640:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35641: 
                   35642:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   35643:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   35644:                zend_error(E_NOTICE, "Trying to get property of non-object");
                   35645:                PZVAL_LOCK(&EG(uninitialized_zval));
                   35646:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
1.1       misho    35647: 
                   35648:        } else {
                   35649:                zval *retval;
                   35650: 
                   35651:                if (0) {
                   35652:                        MAKE_REAL_ZVAL_PTR(offset);
                   35653:                }
                   35654: 
                   35655:                /* here we are sure we are dealing with an object */
1.1.1.2   misho    35656:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35657: 
1.1.1.2   misho    35658:                PZVAL_LOCK(retval);
                   35659:                AI_SET_PTR(&EX_T(opline->result.var), retval);
1.1       misho    35660: 
                   35661:                if (0) {
                   35662:                        zval_ptr_dtor(&offset);
                   35663:                } else {
                   35664: 
                   35665:                }
                   35666:        }
                   35667: 
1.1.1.2   misho    35668:        CHECK_EXCEPTION();
1.1       misho    35669:        ZEND_VM_NEXT_OPCODE();
                   35670: }
                   35671: 
                   35672: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35673: {
1.1.1.2   misho    35674:        return zend_fetch_property_address_read_helper_SPEC_CV_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    35675: }
                   35676: 
                   35677: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35678: {
1.1.1.2   misho    35679:        USE_OPLINE
1.1       misho    35680:        zend_free_op free_op1;
1.1.1.2   misho    35681:        zval *property;
1.1       misho    35682:        zval **container;
                   35683: 
1.1.1.2   misho    35684:        SAVE_OPLINE();
                   35685:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35686: 
1.1       misho    35687:        if (IS_CV == IS_VAR && (opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
1.1.1.2   misho    35688:                PZVAL_LOCK(*EX_T(opline->op1.var).var.ptr_ptr);
                   35689:                EX_T(opline->op1.var).var.ptr = *EX_T(opline->op1.var).var.ptr_ptr;
1.1       misho    35690:        }
                   35691: 
                   35692:        if (0) {
                   35693:                MAKE_REAL_ZVAL_PTR(property);
                   35694:        }
1.1.1.2   misho    35695:        container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35696:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35697:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   35698:        }
1.1.1.2   misho    35699: 
                   35700:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    35701:        if (0) {
                   35702:                zval_ptr_dtor(&property);
                   35703:        } else {
                   35704: 
                   35705:        }
1.1.1.2   misho    35706:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35707:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35708:        }
                   35709: 
                   35710:        /* We are going to assign the result by reference */
                   35711:        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
1.1.1.2   misho    35712:                zval **retval_ptr = EX_T(opline->result.var).var.ptr_ptr;
                   35713: 
                   35714:                Z_DELREF_PP(retval_ptr);
                   35715:                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
                   35716:                Z_ADDREF_PP(retval_ptr);
                   35717:                EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
                   35718:                EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
1.1       misho    35719:        }
                   35720: 
1.1.1.2   misho    35721:        CHECK_EXCEPTION();
1.1       misho    35722:        ZEND_VM_NEXT_OPCODE();
                   35723: }
                   35724: 
                   35725: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35726: {
1.1.1.2   misho    35727:        USE_OPLINE
1.1       misho    35728:        zend_free_op free_op1;
1.1.1.2   misho    35729:        zval *property;
                   35730:        zval **container;
                   35731: 
                   35732:        SAVE_OPLINE();
                   35733:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35734:        container = _get_zval_ptr_ptr_cv_BP_VAR_RW(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35735: 
                   35736:        if (0) {
                   35737:                MAKE_REAL_ZVAL_PTR(property);
                   35738:        }
1.1.1.2   misho    35739:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35740:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   35741:        }
1.1.1.2   misho    35742:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
1.1       misho    35743:        if (0) {
                   35744:                zval_ptr_dtor(&property);
                   35745:        } else {
                   35746: 
                   35747:        }
1.1.1.2   misho    35748:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35749:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35750:        }
                   35751: 
1.1.1.2   misho    35752:        CHECK_EXCEPTION();
1.1       misho    35753:        ZEND_VM_NEXT_OPCODE();
                   35754: }
                   35755: 
                   35756: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35757: {
1.1.1.2   misho    35758:        USE_OPLINE
                   35759: 
                   35760:        zval *container;
                   35761: 
                   35762:        zval *offset;
                   35763: 
                   35764:        SAVE_OPLINE();
                   35765:        container = _get_zval_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35766:        offset  = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35767: 
                   35768:        if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT) ||
                   35769:            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                   35770:                PZVAL_LOCK(&EG(uninitialized_zval));
                   35771:                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   35772: 
                   35773:        } else {
                   35774:                zval *retval;
                   35775: 
                   35776:                if (0) {
                   35777:                        MAKE_REAL_ZVAL_PTR(offset);
                   35778:                }
                   35779: 
                   35780:                /* here we are sure we are dealing with an object */
                   35781:                retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   35782: 
                   35783:                PZVAL_LOCK(retval);
                   35784:                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   35785: 
                   35786:                if (0) {
                   35787:                        zval_ptr_dtor(&offset);
                   35788:                } else {
                   35789: 
                   35790:                }
                   35791:        }
                   35792: 
                   35793:        CHECK_EXCEPTION();
                   35794:        ZEND_VM_NEXT_OPCODE();
1.1       misho    35795: }
                   35796: 
                   35797: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35798: {
1.1.1.2   misho    35799:        USE_OPLINE
1.1       misho    35800: 
1.1.1.2   misho    35801:        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
1.1       misho    35802:                /* Behave like FETCH_OBJ_W */
                   35803:                zend_free_op free_op1;
1.1.1.2   misho    35804:                zval *property;
                   35805:                zval **container;
                   35806: 
                   35807:                SAVE_OPLINE();
                   35808:                property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35809:                container = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    35810: 
                   35811:                if (0) {
                   35812:                        MAKE_REAL_ZVAL_PTR(property);
                   35813:                }
1.1.1.2   misho    35814:                if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35815:                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   35816:                }
1.1.1.2   misho    35817:                zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
1.1       misho    35818:                if (0) {
                   35819:                        zval_ptr_dtor(&property);
                   35820:                } else {
                   35821: 
                   35822:                }
1.1.1.2   misho    35823:                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35824:                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35825:                }
                   35826: 
1.1.1.2   misho    35827:                CHECK_EXCEPTION();
1.1       misho    35828:                ZEND_VM_NEXT_OPCODE();
                   35829:        } else {
1.1.1.2   misho    35830:                return zend_fetch_property_address_read_helper_SPEC_CV_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1.1       misho    35831:        }
                   35832: }
                   35833: 
                   35834: static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35835: {
1.1.1.2   misho    35836:        USE_OPLINE
1.1       misho    35837:        zend_free_op free_op1, free_res;
1.1.1.2   misho    35838:        zval **container;
                   35839:        zval *property;
                   35840: 
                   35841:        SAVE_OPLINE();
                   35842:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35843:        property = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    35844: 
                   35845:        if (IS_CV == IS_CV) {
                   35846:                if (container != &EG(uninitialized_zval_ptr)) {
                   35847:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   35848:                }
                   35849:        }
                   35850:        if (0) {
                   35851:                MAKE_REAL_ZVAL_PTR(property);
                   35852:        }
1.1.1.2   misho    35853:        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
1.1       misho    35854:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                   35855:        }
1.1.1.2   misho    35856:        zend_fetch_property_address(&EX_T(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
1.1       misho    35857:        if (0) {
                   35858:                zval_ptr_dtor(&property);
                   35859:        } else {
                   35860: 
                   35861:        }
1.1.1.2   misho    35862:        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                   35863:                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
1.1       misho    35864:        }
                   35865: 
1.1.1.2   misho    35866:        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
                   35867:        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
                   35868:                SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    35869:        }
1.1.1.2   misho    35870:        PZVAL_LOCK(*EX_T(opline->result.var).var.ptr_ptr);
1.1       misho    35871:        FREE_OP_VAR_PTR(free_res);
1.1.1.2   misho    35872:        CHECK_EXCEPTION();
1.1       misho    35873:        ZEND_VM_NEXT_OPCODE();
                   35874: }
                   35875: 
                   35876: static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35877: {
1.1.1.2   misho    35878:        USE_OPLINE
                   35879: 
                   35880:        zval **object_ptr;
                   35881:        zval *property_name;
1.1       misho    35882: 
1.1.1.2   misho    35883:        SAVE_OPLINE();
                   35884:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35885:        property_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    35886: 
                   35887:        if (0) {
                   35888:                MAKE_REAL_ZVAL_PTR(property_name);
                   35889:        }
1.1.1.2   misho    35890:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    35891:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35892:        }
1.1.1.2   misho    35893:        zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35894:        if (0) {
                   35895:                zval_ptr_dtor(&property_name);
                   35896:        } else {
                   35897: 
                   35898:        }
                   35899: 
                   35900:        /* assign_obj has two opcodes! */
1.1.1.2   misho    35901:        CHECK_EXCEPTION();
1.1       misho    35902:        ZEND_VM_INC_OPCODE();
                   35903:        ZEND_VM_NEXT_OPCODE();
                   35904: }
                   35905: 
                   35906: static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35907: {
1.1.1.2   misho    35908:        USE_OPLINE
1.1       misho    35909: 
1.1.1.2   misho    35910:        zval **object_ptr;
1.1       misho    35911: 
1.1.1.2   misho    35912:        SAVE_OPLINE();
                   35913:        object_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35914: 
                   35915:        if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
1.1       misho    35916:                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
                   35917:        }
                   35918:        if (Z_TYPE_PP(object_ptr) == IS_OBJECT) {
                   35919: 
1.1.1.2   misho    35920:                zval *property_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    35921: 
                   35922:                if (0) {
                   35923:                        MAKE_REAL_ZVAL_PTR(property_name);
                   35924:                }
1.1.1.2   misho    35925:                zend_assign_to_object(RETURN_VALUE_USED(opline)?&EX_T(opline->result.var).var.ptr:NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), ZEND_ASSIGN_DIM, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    35926:                if (0) {
                   35927:                        zval_ptr_dtor(&property_name);
                   35928:                } else {
                   35929: 
                   35930:                }
                   35931:        } else {
                   35932:                zend_free_op free_op_data1, free_op_data2;
                   35933:                zval *value;
1.1.1.2   misho    35934:                zval *dim = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    35935:                zval **variable_ptr_ptr;
                   35936: 
1.1.1.2   misho    35937:                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_CV, BP_VAR_W TSRMLS_CC);
                   35938: 
                   35939:                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, EX_Ts(), &free_op_data1, BP_VAR_R);
                   35940:                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, EX_Ts(), &free_op_data2 TSRMLS_CC);
                   35941:                if (UNEXPECTED(variable_ptr_ptr == NULL)) {
                   35942:                        if (zend_assign_to_string_offset(&EX_T((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                   35943:                                if (RETURN_VALUE_USED(opline)) {
                   35944:                                        zval *retval;
1.1       misho    35945: 
1.1.1.2   misho    35946:                                        ALLOC_ZVAL(retval);
                   35947:                                        ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T((opline+1)->op2.var).str_offset.str)+EX_T((opline+1)->op2.var).str_offset.offset, 1, 1);
                   35948:                                        INIT_PZVAL(retval);
                   35949:                                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                   35950:                                }
                   35951:                        } else if (RETURN_VALUE_USED(opline)) {
                   35952:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   35953:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   35954:                        }
                   35955:                } else if (UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   35956:                        if (IS_TMP_FREE(free_op_data1)) {
                   35957:                                zval_dtor(value);
                   35958:                        }
                   35959:                        if (RETURN_VALUE_USED(opline)) {
                   35960:                                PZVAL_LOCK(&EG(uninitialized_zval));
                   35961:                                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   35962:                        }
                   35963:                } else {
                   35964:                        if ((opline+1)->op1_type == IS_TMP_VAR) {
                   35965:                                value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   35966:                        } else if ((opline+1)->op1_type == IS_CONST) {
                   35967:                                value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   35968:                        } else {
                   35969:                                value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   35970:                        }
                   35971:                        if (RETURN_VALUE_USED(opline)) {
1.1       misho    35972:                                PZVAL_LOCK(value);
1.1.1.2   misho    35973:                                AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    35974:                        }
                   35975:                }
                   35976:                FREE_OP_VAR_PTR(free_op_data2);
                   35977:                FREE_OP_IF_VAR(free_op_data1);
                   35978:        }
                   35979: 
                   35980:        /* assign_dim has two opcodes! */
1.1.1.2   misho    35981:        CHECK_EXCEPTION();
1.1       misho    35982:        ZEND_VM_INC_OPCODE();
                   35983:        ZEND_VM_NEXT_OPCODE();
                   35984: }
                   35985: 
                   35986: static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   35987: {
1.1.1.2   misho    35988:        USE_OPLINE
1.1       misho    35989: 
1.1.1.2   misho    35990:        zval *value;
                   35991:        zval **variable_ptr_ptr;
1.1       misho    35992: 
1.1.1.2   misho    35993:        SAVE_OPLINE();
                   35994:        value = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   35995:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   35996: 
                   35997:        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL)) {
                   35998:                if (zend_assign_to_string_offset(&EX_T(opline->op1.var), value, IS_CV TSRMLS_CC)) {
                   35999:                        if (RETURN_VALUE_USED(opline)) {
                   36000:                                zval *retval;
                   36001: 
                   36002:                                ALLOC_ZVAL(retval);
                   36003:                                ZVAL_STRINGL(retval, Z_STRVAL_P(EX_T(opline->op1.var).str_offset.str)+EX_T(opline->op1.var).str_offset.offset, 1, 1);
                   36004:                                INIT_PZVAL(retval);
                   36005:                                AI_SET_PTR(&EX_T(opline->result.var), retval);
                   36006:                        }
                   36007:                } else if (RETURN_VALUE_USED(opline)) {
                   36008:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   36009:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   36010:                }
                   36011:        } else if (IS_CV == IS_VAR && UNEXPECTED(*variable_ptr_ptr == &EG(error_zval))) {
                   36012:                if (0) {
                   36013:                        zval_dtor(value);
                   36014:                }
                   36015:                if (RETURN_VALUE_USED(opline)) {
                   36016:                        PZVAL_LOCK(&EG(uninitialized_zval));
                   36017:                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                   36018:                }
                   36019:        } else {
                   36020:                if (IS_CV == IS_TMP_VAR) {
                   36021:                        value = zend_assign_tmp_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   36022:                } else if (IS_CV == IS_CONST) {
                   36023:                        value = zend_assign_const_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   36024:                } else {
                   36025:                        value = zend_assign_to_variable(variable_ptr_ptr, value TSRMLS_CC);
                   36026:                }
                   36027:                if (RETURN_VALUE_USED(opline)) {
1.1       misho    36028:                        PZVAL_LOCK(value);
1.1.1.2   misho    36029:                        AI_SET_PTR(&EX_T(opline->result.var), value);
1.1       misho    36030:                }
                   36031:        }
                   36032: 
                   36033:        /* zend_assign_to_variable() always takes care of op2, never free it! */
                   36034: 
1.1.1.2   misho    36035:        CHECK_EXCEPTION();
1.1       misho    36036:        ZEND_VM_NEXT_OPCODE();
                   36037: }
                   36038: 
                   36039: static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36040: {
1.1.1.2   misho    36041:        USE_OPLINE
1.1       misho    36042:        zend_free_op free_op2;
                   36043:        zval **variable_ptr_ptr;
1.1.1.2   misho    36044:        zval **value_ptr_ptr;
                   36045: 
                   36046:        SAVE_OPLINE();
                   36047:        value_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    36048: 
                   36049:        if (IS_CV == IS_VAR &&
                   36050:            value_ptr_ptr &&
                   36051:            !Z_ISREF_PP(value_ptr_ptr) &&
                   36052:            opline->extended_value == ZEND_RETURNS_FUNCTION &&
1.1.1.2   misho    36053:            !EX_T(opline->op2.var).var.fcall_returned_reference) {
1.1       misho    36054:                if (free_op2.var == NULL) {
                   36055:                        PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
                   36056:                }
                   36057:                zend_error(E_STRICT, "Only variables should be assigned by reference");
                   36058:                if (UNEXPECTED(EG(exception) != NULL)) {
                   36059: 
1.1.1.2   misho    36060:                        HANDLE_EXCEPTION();
1.1       misho    36061:                }
                   36062:                return ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   36063:        } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   36064:                PZVAL_LOCK(*value_ptr_ptr);
                   36065:        }
1.1.1.2   misho    36066:        if (IS_CV == IS_VAR && UNEXPECTED(EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr)) {
1.1       misho    36067:                zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
                   36068:        }
                   36069: 
1.1.1.2   misho    36070:        variable_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
                   36071:        if ((IS_CV == IS_VAR && UNEXPECTED(value_ptr_ptr == NULL)) ||
                   36072:            (IS_CV == IS_VAR && UNEXPECTED(variable_ptr_ptr == NULL))) {
1.1       misho    36073:                zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
                   36074:        }
                   36075:        zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
                   36076: 
                   36077:        if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
                   36078:                Z_DELREF_PP(variable_ptr_ptr);
                   36079:        }
                   36080: 
1.1.1.2   misho    36081:        if (RETURN_VALUE_USED(opline)) {
1.1       misho    36082:                PZVAL_LOCK(*variable_ptr_ptr);
1.1.1.2   misho    36083:                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
1.1       misho    36084:        }
                   36085: 
                   36086: 
1.1.1.2   misho    36087:        CHECK_EXCEPTION();
1.1       misho    36088:        ZEND_VM_NEXT_OPCODE();
                   36089: }
                   36090: 
                   36091: static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36092: {
1.1.1.2   misho    36093:        USE_OPLINE
1.1       misho    36094:        zval *function_name;
                   36095:        char *function_name_strval;
                   36096:        int function_name_strlen;
                   36097: 
                   36098: 
1.1.1.2   misho    36099:        SAVE_OPLINE();
1.1       misho    36100:        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), EX(called_scope));
                   36101: 
1.1.1.2   misho    36102:        function_name = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    36103: 
1.1.1.2   misho    36104:        if (IS_CV != IS_CONST &&
                   36105:            UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
1.1       misho    36106:                zend_error_noreturn(E_ERROR, "Method name must be a string");
                   36107:        }
                   36108: 
                   36109:        function_name_strval = Z_STRVAL_P(function_name);
                   36110:        function_name_strlen = Z_STRLEN_P(function_name);
                   36111: 
1.1.1.2   misho    36112:        EX(object) = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    36113: 
1.1.1.2   misho    36114:        if (EXPECTED(EX(object) != NULL) &&
                   36115:            EXPECTED(Z_TYPE_P(EX(object)) == IS_OBJECT)) {
                   36116:                EX(called_scope) = Z_OBJCE_P(EX(object));
1.1       misho    36117: 
1.1.1.2   misho    36118:                if (IS_CV != IS_CONST ||
                   36119:                    (EX(fbc) = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope))) == NULL) {
                   36120:                    zval *object = EX(object);
                   36121: 
                   36122:                        if (UNEXPECTED(Z_OBJ_HT_P(EX(object))->get_method == NULL)) {
                   36123:                                zend_error_noreturn(E_ERROR, "Object does not support method calls");
                   36124:                        }
                   36125: 
                   36126:                        /* First, locate the function. */
                   36127:                        EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen, ((IS_CV == IS_CONST) ? (opline->op2.literal + 1) : NULL) TSRMLS_CC);
                   36128:                        if (UNEXPECTED(EX(fbc) == NULL)) {
                   36129:                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                   36130:                        }
                   36131:                        if (IS_CV == IS_CONST &&
                   36132:                            EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                   36133:                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                   36134:                            EXPECTED(EX(object) == object)) {
                   36135:                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
                   36136:                        }
1.1       misho    36137:                }
                   36138:        } else {
                   36139:                zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
                   36140:        }
                   36141: 
                   36142:        if ((EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) != 0) {
                   36143:                EX(object) = NULL;
                   36144:        } else {
                   36145:                if (!PZVAL_IS_REF(EX(object))) {
                   36146:                        Z_ADDREF_P(EX(object)); /* For $this pointer */
                   36147:                } else {
                   36148:                        zval *this_ptr;
                   36149:                        ALLOC_ZVAL(this_ptr);
                   36150:                        INIT_PZVAL_COPY(this_ptr, EX(object));
                   36151:                        zval_copy_ctor(this_ptr);
                   36152:                        EX(object) = this_ptr;
                   36153:                }
                   36154:        }
                   36155: 
                   36156: 
1.1.1.2   misho    36157:        CHECK_EXCEPTION();
1.1       misho    36158:        ZEND_VM_NEXT_OPCODE();
                   36159: }
                   36160: 
                   36161: static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36162: {
1.1.1.2   misho    36163:        USE_OPLINE
1.1       misho    36164: 
                   36165: 
1.1.1.2   misho    36166:        SAVE_OPLINE();
1.1       misho    36167:        if (IS_CV==IS_VAR) {
1.1.1.2   misho    36168:                PZVAL_LOCK(EX_T(opline->op1.var).var.ptr);
1.1       misho    36169:        }
1.1.1.2   misho    36170:        is_equal_function(&EX_T(opline->result.var).tmp_var,
                   36171:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC),
                   36172:                                 _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC) TSRMLS_CC);
1.1       misho    36173: 
1.1.1.2   misho    36174:        CHECK_EXCEPTION();
1.1       misho    36175:        ZEND_VM_NEXT_OPCODE();
                   36176: }
                   36177: 
                   36178: static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36179: {
1.1.1.2   misho    36180:        USE_OPLINE
1.1       misho    36181: 
                   36182:        zval *expr_ptr;
                   36183: 
1.1.1.2   misho    36184:        SAVE_OPLINE();
                   36185:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
                   36186:                zval **expr_ptr_ptr = _get_zval_ptr_ptr_cv_BP_VAR_W(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    36187: 
1.1.1.2   misho    36188:                if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr_ptr == NULL)) {
                   36189:                        zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
                   36190:                }
                   36191:                SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
1.1       misho    36192:                expr_ptr = *expr_ptr_ptr;
1.1.1.2   misho    36193:                Z_ADDREF_P(expr_ptr);
1.1       misho    36194:        } else {
1.1.1.2   misho    36195:                expr_ptr=_get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op1.var TSRMLS_CC);
                   36196:                if (0) { /* temporary variable */
                   36197:                        zval *new_expr;
1.1       misho    36198: 
1.1.1.2   misho    36199:                        ALLOC_ZVAL(new_expr);
                   36200:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   36201:                        expr_ptr = new_expr;
                   36202:                } else if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) {
1.1       misho    36203:                        zval *new_expr;
                   36204: 
                   36205:                        ALLOC_ZVAL(new_expr);
                   36206:                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                   36207:                        expr_ptr = new_expr;
                   36208:                        zendi_zval_copy_ctor(*expr_ptr);
                   36209:                } else {
                   36210:                        Z_ADDREF_P(expr_ptr);
                   36211:                }
                   36212:        }
1.1.1.2   misho    36213: 
                   36214:        if (IS_CV != IS_UNUSED) {
                   36215: 
                   36216:                zval *offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   36217:                ulong hval;
                   36218: 
1.1       misho    36219:                switch (Z_TYPE_P(offset)) {
                   36220:                        case IS_DOUBLE:
1.1.1.2   misho    36221:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   36222:                                goto num_index;
1.1       misho    36223:                        case IS_LONG:
                   36224:                        case IS_BOOL:
1.1.1.2   misho    36225:                                hval = Z_LVAL_P(offset);
                   36226: num_index:
                   36227:                                zend_hash_index_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    36228:                                break;
                   36229:                        case IS_STRING:
1.1.1.2   misho    36230:                                if (IS_CV == IS_CONST) {
                   36231:                                        hval = Z_HASH_P(offset);
                   36232:                                } else {
                   36233:                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index);
                   36234:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   36235:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   36236:                                        } else {
                   36237:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
                   36238:                                        }
                   36239:                                }
                   36240:                                zend_hash_quick_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, &expr_ptr, sizeof(zval *), NULL);
1.1       misho    36241:                                break;
                   36242:                        case IS_NULL:
1.1.1.2   misho    36243:                                zend_hash_update(Z_ARRVAL(EX_T(opline->result.var).tmp_var), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    36244:                                break;
                   36245:                        default:
                   36246:                                zend_error(E_WARNING, "Illegal offset type");
                   36247:                                zval_ptr_dtor(&expr_ptr);
                   36248:                                /* do nothing */
                   36249:                                break;
                   36250:                }
                   36251: 
                   36252:        } else {
1.1.1.2   misho    36253:                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
1.1       misho    36254:        }
1.1.1.2   misho    36255:        if ((IS_CV == IS_VAR || IS_CV == IS_CV) && opline->extended_value) {
1.1       misho    36256: 
                   36257:        } else {
                   36258: 
                   36259:        }
1.1.1.2   misho    36260:        CHECK_EXCEPTION();
1.1       misho    36261:        ZEND_VM_NEXT_OPCODE();
                   36262: }
                   36263: 
                   36264: static int ZEND_FASTCALL  ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36265: {
1.1.1.2   misho    36266:        USE_OPLINE
1.1       misho    36267: 
1.1.1.2   misho    36268:        array_init(&EX_T(opline->result.var).tmp_var);
1.1       misho    36269:        if (IS_CV == IS_UNUSED) {
                   36270:                ZEND_VM_NEXT_OPCODE();
                   36271: #if 0 || IS_CV != IS_UNUSED
                   36272:        } else {
                   36273:                return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   36274: #endif
                   36275:        }
                   36276: }
                   36277: 
                   36278: static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36279: {
1.1.1.2   misho    36280:        USE_OPLINE
1.1       misho    36281: 
1.1.1.2   misho    36282:        zval **container;
1.1       misho    36283:        zval *offset;
1.1.1.2   misho    36284:        ulong hval;
1.1       misho    36285: 
1.1.1.2   misho    36286:        SAVE_OPLINE();
                   36287:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    36288:        if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   36289:                SEPARATE_ZVAL_IF_NOT_REF(container);
                   36290:        }
1.1.1.2   misho    36291:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    36292: 
                   36293:        if (IS_CV != IS_VAR || container) {
                   36294:                switch (Z_TYPE_PP(container)) {
                   36295:                        case IS_ARRAY: {
                   36296:                                HashTable *ht = Z_ARRVAL_PP(container);
                   36297: 
                   36298:                                switch (Z_TYPE_P(offset)) {
                   36299:                                        case IS_DOUBLE:
1.1.1.2   misho    36300:                                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
1.1.1.3   misho    36301:                                                zend_hash_index_del(ht, hval);
                   36302:                                                break;
1.1       misho    36303:                                        case IS_RESOURCE:
                   36304:                                        case IS_BOOL:
                   36305:                                        case IS_LONG:
1.1.1.2   misho    36306:                                                hval = Z_LVAL_P(offset);
                   36307:                                                zend_hash_index_del(ht, hval);
1.1       misho    36308:                                                break;
                   36309:                                        case IS_STRING:
                   36310:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   36311:                                                        Z_ADDREF_P(offset);
                   36312:                                                }
1.1.1.2   misho    36313:                                                if (IS_CV == IS_CONST) {
                   36314:                                                        hval = Z_HASH_P(offset);
                   36315:                                                } else {
                   36316:                                                        ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_dim);
                   36317:                                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   36318:                                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
                   36319:                                                        } else {
                   36320:                                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    36321:                                                        }
                   36322:                                                }
1.1.1.2   misho    36323:                                                if (ht == &EG(symbol_table)) {
                   36324:                                                        zend_delete_global_variable_ex(offset->value.str.val, offset->value.str.len, hval TSRMLS_CC);
                   36325:                                                } else {
                   36326:                                                        zend_hash_quick_del(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval);
                   36327:                                                }
                   36328:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   36329:                                                        zval_ptr_dtor(&offset);
                   36330:                                                }
                   36331:                                                break;
                   36332: num_index_dim:
                   36333:                                                zend_hash_index_del(ht, hval);
1.1       misho    36334:                                                if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                   36335:                                                        zval_ptr_dtor(&offset);
                   36336:                                                }
                   36337:                                                break;
                   36338:                                        case IS_NULL:
                   36339:                                                zend_hash_del(ht, "", sizeof(""));
                   36340:                                                break;
                   36341:                                        default:
                   36342:                                                zend_error(E_WARNING, "Illegal offset type in unset");
                   36343:                                                break;
                   36344:                                }
                   36345: 
                   36346:                                break;
                   36347:                        }
                   36348:                        case IS_OBJECT:
1.1.1.2   misho    36349:                                if (UNEXPECTED(Z_OBJ_HT_P(*container)->unset_dimension == NULL)) {
1.1       misho    36350:                                        zend_error_noreturn(E_ERROR, "Cannot use object as array");
                   36351:                                }
                   36352:                                if (0) {
                   36353:                                        MAKE_REAL_ZVAL_PTR(offset);
                   36354:                                }
                   36355:                                Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
                   36356:                                if (0) {
                   36357:                                        zval_ptr_dtor(&offset);
                   36358:                                } else {
                   36359: 
                   36360:                                }
                   36361:                                break;
                   36362:                        case IS_STRING:
                   36363:                                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                   36364:                                ZEND_VM_CONTINUE(); /* bailed out before */
                   36365:                        default:
                   36366: 
                   36367:                                break;
                   36368:                }
                   36369:        } else {
                   36370: 
                   36371:        }
                   36372: 
1.1.1.2   misho    36373:        CHECK_EXCEPTION();
1.1       misho    36374:        ZEND_VM_NEXT_OPCODE();
                   36375: }
                   36376: 
                   36377: static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36378: {
1.1.1.2   misho    36379:        USE_OPLINE
                   36380: 
                   36381:        zval **container;
                   36382:        zval *offset;
1.1       misho    36383: 
1.1.1.2   misho    36384:        SAVE_OPLINE();
                   36385:        container = _get_zval_ptr_ptr_cv_BP_VAR_UNSET(EX_CVs(), opline->op1.var TSRMLS_CC);
                   36386:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
1.1       misho    36387: 
                   36388:        if (IS_CV != IS_VAR || container) {
                   36389:                if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
                   36390:                        SEPARATE_ZVAL_IF_NOT_REF(container);
                   36391:                }
                   36392:                if (Z_TYPE_PP(container) == IS_OBJECT) {
                   36393:                        if (0) {
                   36394:                                MAKE_REAL_ZVAL_PTR(offset);
                   36395:                        }
                   36396:                        if (Z_OBJ_HT_P(*container)->unset_property) {
1.1.1.2   misho    36397:                                Z_OBJ_HT_P(*container)->unset_property(*container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
1.1       misho    36398:                        } else {
                   36399:                                zend_error(E_NOTICE, "Trying to unset property of non-object");
                   36400:                        }
                   36401:                        if (0) {
                   36402:                                zval_ptr_dtor(&offset);
                   36403:                        } else {
                   36404: 
                   36405:                        }
                   36406:                } else {
                   36407: 
                   36408:                }
                   36409:        } else {
                   36410: 
                   36411:        }
                   36412: 
1.1.1.2   misho    36413:        CHECK_EXCEPTION();
1.1       misho    36414:        ZEND_VM_NEXT_OPCODE();
                   36415: }
                   36416: 
                   36417: static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
                   36418: {
1.1.1.2   misho    36419:        USE_OPLINE
1.1       misho    36420: 
1.1.1.2   misho    36421:        zval **container;
1.1       misho    36422:        zval **value = NULL;
                   36423:        int result = 0;
1.1.1.2   misho    36424:        ulong hval;
                   36425:        zval *offset;
1.1       misho    36426: 
1.1.1.2   misho    36427:        SAVE_OPLINE();
                   36428:        container = _get_zval_ptr_ptr_cv_BP_VAR_IS(EX_CVs(), opline->op1.var TSRMLS_CC);
1.1       misho    36429: 
1.1.1.2   misho    36430:        offset = _get_zval_ptr_cv_BP_VAR_R(EX_CVs(), opline->op2.var TSRMLS_CC);
                   36431: 
                   36432:        if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                   36433:                HashTable *ht;
                   36434:                int isset = 0;
                   36435: 
                   36436:                ht = Z_ARRVAL_PP(container);
                   36437: 
                   36438:                switch (Z_TYPE_P(offset)) {
                   36439:                        case IS_DOUBLE:
                   36440:                                hval = zend_dval_to_lval(Z_DVAL_P(offset));
                   36441:                                goto num_index_prop;
                   36442:                        case IS_RESOURCE:
                   36443:                        case IS_BOOL:
                   36444:                        case IS_LONG:
                   36445:                                hval = Z_LVAL_P(offset);
                   36446: num_index_prop:
                   36447:                                if (zend_hash_index_find(ht, hval, (void **) &value) == SUCCESS) {
                   36448:                                        isset = 1;
                   36449:                                }
                   36450:                                break;
                   36451:                        case IS_STRING:
                   36452:                                if (IS_CV == IS_CONST) {
                   36453:                                        hval = Z_HASH_P(offset);
                   36454:                                } else {
                   36455:                                        if (!prop_dim) {
                   36456:                                                ZEND_HANDLE_NUMERIC_EX(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, goto num_index_prop);
1.1       misho    36457:                                        }
1.1.1.2   misho    36458:                                        if (IS_INTERNED(Z_STRVAL_P(offset))) {
                   36459:                                                hval = INTERNED_HASH(Z_STRVAL_P(offset));
1.1       misho    36460:                                        } else {
1.1.1.2   misho    36461:                                                hval = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
1.1       misho    36462:                                        }
                   36463:                                }
1.1.1.2   misho    36464:                                if (zend_hash_quick_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hval, (void **) &value) == SUCCESS) {
                   36465:                                        isset = 1;
                   36466:                                }
                   36467:                                break;
                   36468:                        case IS_NULL:
                   36469:                                if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
                   36470:                                        isset = 1;
1.1       misho    36471:                                }
1.1.1.2   misho    36472:                                break;
                   36473:                        default:
                   36474:                                zend_error(E_WARNING, "Illegal offset type in isset or empty");
                   36475:                                break;
                   36476:                }
                   36477: 
                   36478:                if (opline->extended_value & ZEND_ISSET) {
                   36479:                        if (isset && Z_TYPE_PP(value) == IS_NULL) {
                   36480:                                result = 0;
                   36481:                        } else {
                   36482:                                result = isset;
1.1       misho    36483:                        }
1.1.1.2   misho    36484:                } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   36485:                        if (!isset || !i_zend_is_true(*value)) {
                   36486:                                result = 0;
1.1       misho    36487:                        } else {
1.1.1.2   misho    36488:                                result = 1;
                   36489:                        }
                   36490:                }
1.1       misho    36491: 
1.1.1.2   misho    36492:        } else if (Z_TYPE_PP(container) == IS_OBJECT) {
                   36493:                if (0) {
                   36494:                        MAKE_REAL_ZVAL_PTR(offset);
                   36495:                }
                   36496:                if (prop_dim) {
                   36497:                        if (Z_OBJ_HT_P(*container)->has_property) {
                   36498:                                result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
                   36499:                        } else {
                   36500:                                zend_error(E_NOTICE, "Trying to check property of non-object");
                   36501:                                result = 0;
1.1       misho    36502:                        }
1.1.1.2   misho    36503:                } else {
                   36504:                        if (Z_OBJ_HT_P(*container)->has_dimension) {
                   36505:                                result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0 TSRMLS_CC);
                   36506:                        } else {
                   36507:                                zend_error(E_NOTICE, "Trying to check element of non-array");
                   36508:                                result = 0;
                   36509:                        }
                   36510:                }
                   36511:                if (0) {
                   36512:                        zval_ptr_dtor(&offset);
                   36513:                } else {
                   36514: 
                   36515:                }
                   36516:        } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
                   36517:                zval tmp;
1.1       misho    36518: 
1.1.1.2   misho    36519:                if (Z_TYPE_P(offset) != IS_LONG) {
                   36520:                        if (Z_TYPE_P(offset) <= IS_BOOL /* simple scalar types */
                   36521:                                        || (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
                   36522:                                                && IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
                   36523:                                ZVAL_COPY_VALUE(&tmp, offset);
1.1       misho    36524:                                zval_copy_ctor(&tmp);
                   36525:                                convert_to_long(&tmp);
                   36526:                                offset = &tmp;
1.1.1.2   misho    36527:                        } else {
                   36528:                                /* can not be converted to proper offset, return "not set" */
                   36529:                                result = 0;
1.1       misho    36530:                        }
1.1.1.2   misho    36531:                }
                   36532:                if (Z_TYPE_P(offset) == IS_LONG) {
                   36533:                        if (opline->extended_value & ZEND_ISSET) {
                   36534:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
                   36535:                                        result = 1;
                   36536:                                }
                   36537:                        } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
                   36538:                                if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
                   36539:                                        result = 1;
1.1       misho    36540:                                }
                   36541:                        }
1.1.1.2   misho    36542:                }
1.1       misho    36543: 
1.1.1.2   misho    36544:        } else {
1.1       misho    36545: 
                   36546:        }
                   36547: 
1.1.1.2   misho    36548:        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
                   36549:        if (opline->extended_value & ZEND_ISSET) {
                   36550:                Z_LVAL(EX_T(opline->result.var).tmp_var) = result;
                   36551:        } else {
                   36552:                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
1.1       misho    36553:        }
                   36554: 
1.1.1.2   misho    36555:        CHECK_EXCEPTION();
1.1       misho    36556:        ZEND_VM_NEXT_OPCODE();
                   36557: }
                   36558: 
                   36559: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36560: {
                   36561:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   36562: }
                   36563: 
                   36564: static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36565: {
                   36566:        return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   36567: }
                   36568: 
                   36569: static int ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                   36570: {
1.1.1.2   misho    36571:        zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
1.1       misho    36572: }
                   36573: 
                   36574: 
                   36575: void zend_init_opcodes_handlers(void)
                   36576: {
                   36577:   static const opcode_handler_t labels[] = {
                   36578:        ZEND_NOP_SPEC_HANDLER,
                   36579:        ZEND_NOP_SPEC_HANDLER,
                   36580:        ZEND_NOP_SPEC_HANDLER,
                   36581:        ZEND_NOP_SPEC_HANDLER,
                   36582:        ZEND_NOP_SPEC_HANDLER,
                   36583:        ZEND_NOP_SPEC_HANDLER,
                   36584:        ZEND_NOP_SPEC_HANDLER,
                   36585:        ZEND_NOP_SPEC_HANDLER,
                   36586:        ZEND_NOP_SPEC_HANDLER,
                   36587:        ZEND_NOP_SPEC_HANDLER,
                   36588:        ZEND_NOP_SPEC_HANDLER,
                   36589:        ZEND_NOP_SPEC_HANDLER,
                   36590:        ZEND_NOP_SPEC_HANDLER,
                   36591:        ZEND_NOP_SPEC_HANDLER,
                   36592:        ZEND_NOP_SPEC_HANDLER,
                   36593:        ZEND_NOP_SPEC_HANDLER,
                   36594:        ZEND_NOP_SPEC_HANDLER,
                   36595:        ZEND_NOP_SPEC_HANDLER,
                   36596:        ZEND_NOP_SPEC_HANDLER,
                   36597:        ZEND_NOP_SPEC_HANDLER,
                   36598:        ZEND_NOP_SPEC_HANDLER,
                   36599:        ZEND_NOP_SPEC_HANDLER,
                   36600:        ZEND_NOP_SPEC_HANDLER,
                   36601:        ZEND_NOP_SPEC_HANDLER,
                   36602:        ZEND_NOP_SPEC_HANDLER,
                   36603:        ZEND_ADD_SPEC_CONST_CONST_HANDLER,
                   36604:        ZEND_ADD_SPEC_CONST_TMP_HANDLER,
                   36605:        ZEND_ADD_SPEC_CONST_VAR_HANDLER,
                   36606:        ZEND_NULL_HANDLER,
                   36607:        ZEND_ADD_SPEC_CONST_CV_HANDLER,
                   36608:        ZEND_ADD_SPEC_TMP_CONST_HANDLER,
                   36609:        ZEND_ADD_SPEC_TMP_TMP_HANDLER,
                   36610:        ZEND_ADD_SPEC_TMP_VAR_HANDLER,
                   36611:        ZEND_NULL_HANDLER,
                   36612:        ZEND_ADD_SPEC_TMP_CV_HANDLER,
                   36613:        ZEND_ADD_SPEC_VAR_CONST_HANDLER,
                   36614:        ZEND_ADD_SPEC_VAR_TMP_HANDLER,
                   36615:        ZEND_ADD_SPEC_VAR_VAR_HANDLER,
                   36616:        ZEND_NULL_HANDLER,
                   36617:        ZEND_ADD_SPEC_VAR_CV_HANDLER,
                   36618:        ZEND_NULL_HANDLER,
                   36619:        ZEND_NULL_HANDLER,
                   36620:        ZEND_NULL_HANDLER,
                   36621:        ZEND_NULL_HANDLER,
                   36622:        ZEND_NULL_HANDLER,
                   36623:        ZEND_ADD_SPEC_CV_CONST_HANDLER,
                   36624:        ZEND_ADD_SPEC_CV_TMP_HANDLER,
                   36625:        ZEND_ADD_SPEC_CV_VAR_HANDLER,
                   36626:        ZEND_NULL_HANDLER,
                   36627:        ZEND_ADD_SPEC_CV_CV_HANDLER,
                   36628:        ZEND_SUB_SPEC_CONST_CONST_HANDLER,
                   36629:        ZEND_SUB_SPEC_CONST_TMP_HANDLER,
                   36630:        ZEND_SUB_SPEC_CONST_VAR_HANDLER,
                   36631:        ZEND_NULL_HANDLER,
                   36632:        ZEND_SUB_SPEC_CONST_CV_HANDLER,
                   36633:        ZEND_SUB_SPEC_TMP_CONST_HANDLER,
                   36634:        ZEND_SUB_SPEC_TMP_TMP_HANDLER,
                   36635:        ZEND_SUB_SPEC_TMP_VAR_HANDLER,
                   36636:        ZEND_NULL_HANDLER,
                   36637:        ZEND_SUB_SPEC_TMP_CV_HANDLER,
                   36638:        ZEND_SUB_SPEC_VAR_CONST_HANDLER,
                   36639:        ZEND_SUB_SPEC_VAR_TMP_HANDLER,
                   36640:        ZEND_SUB_SPEC_VAR_VAR_HANDLER,
                   36641:        ZEND_NULL_HANDLER,
                   36642:        ZEND_SUB_SPEC_VAR_CV_HANDLER,
                   36643:        ZEND_NULL_HANDLER,
                   36644:        ZEND_NULL_HANDLER,
                   36645:        ZEND_NULL_HANDLER,
                   36646:        ZEND_NULL_HANDLER,
                   36647:        ZEND_NULL_HANDLER,
                   36648:        ZEND_SUB_SPEC_CV_CONST_HANDLER,
                   36649:        ZEND_SUB_SPEC_CV_TMP_HANDLER,
                   36650:        ZEND_SUB_SPEC_CV_VAR_HANDLER,
                   36651:        ZEND_NULL_HANDLER,
                   36652:        ZEND_SUB_SPEC_CV_CV_HANDLER,
                   36653:        ZEND_MUL_SPEC_CONST_CONST_HANDLER,
                   36654:        ZEND_MUL_SPEC_CONST_TMP_HANDLER,
                   36655:        ZEND_MUL_SPEC_CONST_VAR_HANDLER,
                   36656:        ZEND_NULL_HANDLER,
                   36657:        ZEND_MUL_SPEC_CONST_CV_HANDLER,
                   36658:        ZEND_MUL_SPEC_TMP_CONST_HANDLER,
                   36659:        ZEND_MUL_SPEC_TMP_TMP_HANDLER,
                   36660:        ZEND_MUL_SPEC_TMP_VAR_HANDLER,
                   36661:        ZEND_NULL_HANDLER,
                   36662:        ZEND_MUL_SPEC_TMP_CV_HANDLER,
                   36663:        ZEND_MUL_SPEC_VAR_CONST_HANDLER,
                   36664:        ZEND_MUL_SPEC_VAR_TMP_HANDLER,
                   36665:        ZEND_MUL_SPEC_VAR_VAR_HANDLER,
                   36666:        ZEND_NULL_HANDLER,
                   36667:        ZEND_MUL_SPEC_VAR_CV_HANDLER,
                   36668:        ZEND_NULL_HANDLER,
                   36669:        ZEND_NULL_HANDLER,
                   36670:        ZEND_NULL_HANDLER,
                   36671:        ZEND_NULL_HANDLER,
                   36672:        ZEND_NULL_HANDLER,
                   36673:        ZEND_MUL_SPEC_CV_CONST_HANDLER,
                   36674:        ZEND_MUL_SPEC_CV_TMP_HANDLER,
                   36675:        ZEND_MUL_SPEC_CV_VAR_HANDLER,
                   36676:        ZEND_NULL_HANDLER,
                   36677:        ZEND_MUL_SPEC_CV_CV_HANDLER,
                   36678:        ZEND_DIV_SPEC_CONST_CONST_HANDLER,
                   36679:        ZEND_DIV_SPEC_CONST_TMP_HANDLER,
                   36680:        ZEND_DIV_SPEC_CONST_VAR_HANDLER,
                   36681:        ZEND_NULL_HANDLER,
                   36682:        ZEND_DIV_SPEC_CONST_CV_HANDLER,
                   36683:        ZEND_DIV_SPEC_TMP_CONST_HANDLER,
                   36684:        ZEND_DIV_SPEC_TMP_TMP_HANDLER,
                   36685:        ZEND_DIV_SPEC_TMP_VAR_HANDLER,
                   36686:        ZEND_NULL_HANDLER,
                   36687:        ZEND_DIV_SPEC_TMP_CV_HANDLER,
                   36688:        ZEND_DIV_SPEC_VAR_CONST_HANDLER,
                   36689:        ZEND_DIV_SPEC_VAR_TMP_HANDLER,
                   36690:        ZEND_DIV_SPEC_VAR_VAR_HANDLER,
                   36691:        ZEND_NULL_HANDLER,
                   36692:        ZEND_DIV_SPEC_VAR_CV_HANDLER,
                   36693:        ZEND_NULL_HANDLER,
                   36694:        ZEND_NULL_HANDLER,
                   36695:        ZEND_NULL_HANDLER,
                   36696:        ZEND_NULL_HANDLER,
                   36697:        ZEND_NULL_HANDLER,
                   36698:        ZEND_DIV_SPEC_CV_CONST_HANDLER,
                   36699:        ZEND_DIV_SPEC_CV_TMP_HANDLER,
                   36700:        ZEND_DIV_SPEC_CV_VAR_HANDLER,
                   36701:        ZEND_NULL_HANDLER,
                   36702:        ZEND_DIV_SPEC_CV_CV_HANDLER,
                   36703:        ZEND_MOD_SPEC_CONST_CONST_HANDLER,
                   36704:        ZEND_MOD_SPEC_CONST_TMP_HANDLER,
                   36705:        ZEND_MOD_SPEC_CONST_VAR_HANDLER,
                   36706:        ZEND_NULL_HANDLER,
                   36707:        ZEND_MOD_SPEC_CONST_CV_HANDLER,
                   36708:        ZEND_MOD_SPEC_TMP_CONST_HANDLER,
                   36709:        ZEND_MOD_SPEC_TMP_TMP_HANDLER,
                   36710:        ZEND_MOD_SPEC_TMP_VAR_HANDLER,
                   36711:        ZEND_NULL_HANDLER,
                   36712:        ZEND_MOD_SPEC_TMP_CV_HANDLER,
                   36713:        ZEND_MOD_SPEC_VAR_CONST_HANDLER,
                   36714:        ZEND_MOD_SPEC_VAR_TMP_HANDLER,
                   36715:        ZEND_MOD_SPEC_VAR_VAR_HANDLER,
                   36716:        ZEND_NULL_HANDLER,
                   36717:        ZEND_MOD_SPEC_VAR_CV_HANDLER,
                   36718:        ZEND_NULL_HANDLER,
                   36719:        ZEND_NULL_HANDLER,
                   36720:        ZEND_NULL_HANDLER,
                   36721:        ZEND_NULL_HANDLER,
                   36722:        ZEND_NULL_HANDLER,
                   36723:        ZEND_MOD_SPEC_CV_CONST_HANDLER,
                   36724:        ZEND_MOD_SPEC_CV_TMP_HANDLER,
                   36725:        ZEND_MOD_SPEC_CV_VAR_HANDLER,
                   36726:        ZEND_NULL_HANDLER,
                   36727:        ZEND_MOD_SPEC_CV_CV_HANDLER,
                   36728:        ZEND_SL_SPEC_CONST_CONST_HANDLER,
                   36729:        ZEND_SL_SPEC_CONST_TMP_HANDLER,
                   36730:        ZEND_SL_SPEC_CONST_VAR_HANDLER,
                   36731:        ZEND_NULL_HANDLER,
                   36732:        ZEND_SL_SPEC_CONST_CV_HANDLER,
                   36733:        ZEND_SL_SPEC_TMP_CONST_HANDLER,
                   36734:        ZEND_SL_SPEC_TMP_TMP_HANDLER,
                   36735:        ZEND_SL_SPEC_TMP_VAR_HANDLER,
                   36736:        ZEND_NULL_HANDLER,
                   36737:        ZEND_SL_SPEC_TMP_CV_HANDLER,
                   36738:        ZEND_SL_SPEC_VAR_CONST_HANDLER,
                   36739:        ZEND_SL_SPEC_VAR_TMP_HANDLER,
                   36740:        ZEND_SL_SPEC_VAR_VAR_HANDLER,
                   36741:        ZEND_NULL_HANDLER,
                   36742:        ZEND_SL_SPEC_VAR_CV_HANDLER,
                   36743:        ZEND_NULL_HANDLER,
                   36744:        ZEND_NULL_HANDLER,
                   36745:        ZEND_NULL_HANDLER,
                   36746:        ZEND_NULL_HANDLER,
                   36747:        ZEND_NULL_HANDLER,
                   36748:        ZEND_SL_SPEC_CV_CONST_HANDLER,
                   36749:        ZEND_SL_SPEC_CV_TMP_HANDLER,
                   36750:        ZEND_SL_SPEC_CV_VAR_HANDLER,
                   36751:        ZEND_NULL_HANDLER,
                   36752:        ZEND_SL_SPEC_CV_CV_HANDLER,
                   36753:        ZEND_SR_SPEC_CONST_CONST_HANDLER,
                   36754:        ZEND_SR_SPEC_CONST_TMP_HANDLER,
                   36755:        ZEND_SR_SPEC_CONST_VAR_HANDLER,
                   36756:        ZEND_NULL_HANDLER,
                   36757:        ZEND_SR_SPEC_CONST_CV_HANDLER,
                   36758:        ZEND_SR_SPEC_TMP_CONST_HANDLER,
                   36759:        ZEND_SR_SPEC_TMP_TMP_HANDLER,
                   36760:        ZEND_SR_SPEC_TMP_VAR_HANDLER,
                   36761:        ZEND_NULL_HANDLER,
                   36762:        ZEND_SR_SPEC_TMP_CV_HANDLER,
                   36763:        ZEND_SR_SPEC_VAR_CONST_HANDLER,
                   36764:        ZEND_SR_SPEC_VAR_TMP_HANDLER,
                   36765:        ZEND_SR_SPEC_VAR_VAR_HANDLER,
                   36766:        ZEND_NULL_HANDLER,
                   36767:        ZEND_SR_SPEC_VAR_CV_HANDLER,
                   36768:        ZEND_NULL_HANDLER,
                   36769:        ZEND_NULL_HANDLER,
                   36770:        ZEND_NULL_HANDLER,
                   36771:        ZEND_NULL_HANDLER,
                   36772:        ZEND_NULL_HANDLER,
                   36773:        ZEND_SR_SPEC_CV_CONST_HANDLER,
                   36774:        ZEND_SR_SPEC_CV_TMP_HANDLER,
                   36775:        ZEND_SR_SPEC_CV_VAR_HANDLER,
                   36776:        ZEND_NULL_HANDLER,
                   36777:        ZEND_SR_SPEC_CV_CV_HANDLER,
                   36778:        ZEND_CONCAT_SPEC_CONST_CONST_HANDLER,
                   36779:        ZEND_CONCAT_SPEC_CONST_TMP_HANDLER,
                   36780:        ZEND_CONCAT_SPEC_CONST_VAR_HANDLER,
                   36781:        ZEND_NULL_HANDLER,
                   36782:        ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
                   36783:        ZEND_CONCAT_SPEC_TMP_CONST_HANDLER,
                   36784:        ZEND_CONCAT_SPEC_TMP_TMP_HANDLER,
                   36785:        ZEND_CONCAT_SPEC_TMP_VAR_HANDLER,
                   36786:        ZEND_NULL_HANDLER,
                   36787:        ZEND_CONCAT_SPEC_TMP_CV_HANDLER,
                   36788:        ZEND_CONCAT_SPEC_VAR_CONST_HANDLER,
                   36789:        ZEND_CONCAT_SPEC_VAR_TMP_HANDLER,
                   36790:        ZEND_CONCAT_SPEC_VAR_VAR_HANDLER,
                   36791:        ZEND_NULL_HANDLER,
                   36792:        ZEND_CONCAT_SPEC_VAR_CV_HANDLER,
                   36793:        ZEND_NULL_HANDLER,
                   36794:        ZEND_NULL_HANDLER,
                   36795:        ZEND_NULL_HANDLER,
                   36796:        ZEND_NULL_HANDLER,
                   36797:        ZEND_NULL_HANDLER,
                   36798:        ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
                   36799:        ZEND_CONCAT_SPEC_CV_TMP_HANDLER,
                   36800:        ZEND_CONCAT_SPEC_CV_VAR_HANDLER,
                   36801:        ZEND_NULL_HANDLER,
                   36802:        ZEND_CONCAT_SPEC_CV_CV_HANDLER,
                   36803:        ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
                   36804:        ZEND_BW_OR_SPEC_CONST_TMP_HANDLER,
                   36805:        ZEND_BW_OR_SPEC_CONST_VAR_HANDLER,
                   36806:        ZEND_NULL_HANDLER,
                   36807:        ZEND_BW_OR_SPEC_CONST_CV_HANDLER,
                   36808:        ZEND_BW_OR_SPEC_TMP_CONST_HANDLER,
                   36809:        ZEND_BW_OR_SPEC_TMP_TMP_HANDLER,
                   36810:        ZEND_BW_OR_SPEC_TMP_VAR_HANDLER,
                   36811:        ZEND_NULL_HANDLER,
                   36812:        ZEND_BW_OR_SPEC_TMP_CV_HANDLER,
                   36813:        ZEND_BW_OR_SPEC_VAR_CONST_HANDLER,
                   36814:        ZEND_BW_OR_SPEC_VAR_TMP_HANDLER,
                   36815:        ZEND_BW_OR_SPEC_VAR_VAR_HANDLER,
                   36816:        ZEND_NULL_HANDLER,
                   36817:        ZEND_BW_OR_SPEC_VAR_CV_HANDLER,
                   36818:        ZEND_NULL_HANDLER,
                   36819:        ZEND_NULL_HANDLER,
                   36820:        ZEND_NULL_HANDLER,
                   36821:        ZEND_NULL_HANDLER,
                   36822:        ZEND_NULL_HANDLER,
                   36823:        ZEND_BW_OR_SPEC_CV_CONST_HANDLER,
                   36824:        ZEND_BW_OR_SPEC_CV_TMP_HANDLER,
                   36825:        ZEND_BW_OR_SPEC_CV_VAR_HANDLER,
                   36826:        ZEND_NULL_HANDLER,
                   36827:        ZEND_BW_OR_SPEC_CV_CV_HANDLER,
                   36828:        ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
                   36829:        ZEND_BW_AND_SPEC_CONST_TMP_HANDLER,
                   36830:        ZEND_BW_AND_SPEC_CONST_VAR_HANDLER,
                   36831:        ZEND_NULL_HANDLER,
                   36832:        ZEND_BW_AND_SPEC_CONST_CV_HANDLER,
                   36833:        ZEND_BW_AND_SPEC_TMP_CONST_HANDLER,
                   36834:        ZEND_BW_AND_SPEC_TMP_TMP_HANDLER,
                   36835:        ZEND_BW_AND_SPEC_TMP_VAR_HANDLER,
                   36836:        ZEND_NULL_HANDLER,
                   36837:        ZEND_BW_AND_SPEC_TMP_CV_HANDLER,
                   36838:        ZEND_BW_AND_SPEC_VAR_CONST_HANDLER,
                   36839:        ZEND_BW_AND_SPEC_VAR_TMP_HANDLER,
                   36840:        ZEND_BW_AND_SPEC_VAR_VAR_HANDLER,
                   36841:        ZEND_NULL_HANDLER,
                   36842:        ZEND_BW_AND_SPEC_VAR_CV_HANDLER,
                   36843:        ZEND_NULL_HANDLER,
                   36844:        ZEND_NULL_HANDLER,
                   36845:        ZEND_NULL_HANDLER,
                   36846:        ZEND_NULL_HANDLER,
                   36847:        ZEND_NULL_HANDLER,
                   36848:        ZEND_BW_AND_SPEC_CV_CONST_HANDLER,
                   36849:        ZEND_BW_AND_SPEC_CV_TMP_HANDLER,
                   36850:        ZEND_BW_AND_SPEC_CV_VAR_HANDLER,
                   36851:        ZEND_NULL_HANDLER,
                   36852:        ZEND_BW_AND_SPEC_CV_CV_HANDLER,
                   36853:        ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
                   36854:        ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER,
                   36855:        ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER,
                   36856:        ZEND_NULL_HANDLER,
                   36857:        ZEND_BW_XOR_SPEC_CONST_CV_HANDLER,
                   36858:        ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER,
                   36859:        ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER,
                   36860:        ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER,
                   36861:        ZEND_NULL_HANDLER,
                   36862:        ZEND_BW_XOR_SPEC_TMP_CV_HANDLER,
                   36863:        ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER,
                   36864:        ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER,
                   36865:        ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER,
                   36866:        ZEND_NULL_HANDLER,
                   36867:        ZEND_BW_XOR_SPEC_VAR_CV_HANDLER,
                   36868:        ZEND_NULL_HANDLER,
                   36869:        ZEND_NULL_HANDLER,
                   36870:        ZEND_NULL_HANDLER,
                   36871:        ZEND_NULL_HANDLER,
                   36872:        ZEND_NULL_HANDLER,
                   36873:        ZEND_BW_XOR_SPEC_CV_CONST_HANDLER,
                   36874:        ZEND_BW_XOR_SPEC_CV_TMP_HANDLER,
                   36875:        ZEND_BW_XOR_SPEC_CV_VAR_HANDLER,
                   36876:        ZEND_NULL_HANDLER,
                   36877:        ZEND_BW_XOR_SPEC_CV_CV_HANDLER,
                   36878:        ZEND_BW_NOT_SPEC_CONST_HANDLER,
                   36879:        ZEND_BW_NOT_SPEC_CONST_HANDLER,
                   36880:        ZEND_BW_NOT_SPEC_CONST_HANDLER,
                   36881:        ZEND_BW_NOT_SPEC_CONST_HANDLER,
                   36882:        ZEND_BW_NOT_SPEC_CONST_HANDLER,
                   36883:        ZEND_BW_NOT_SPEC_TMP_HANDLER,
                   36884:        ZEND_BW_NOT_SPEC_TMP_HANDLER,
                   36885:        ZEND_BW_NOT_SPEC_TMP_HANDLER,
                   36886:        ZEND_BW_NOT_SPEC_TMP_HANDLER,
                   36887:        ZEND_BW_NOT_SPEC_TMP_HANDLER,
                   36888:        ZEND_BW_NOT_SPEC_VAR_HANDLER,
                   36889:        ZEND_BW_NOT_SPEC_VAR_HANDLER,
                   36890:        ZEND_BW_NOT_SPEC_VAR_HANDLER,
                   36891:        ZEND_BW_NOT_SPEC_VAR_HANDLER,
                   36892:        ZEND_BW_NOT_SPEC_VAR_HANDLER,
                   36893:        ZEND_NULL_HANDLER,
                   36894:        ZEND_NULL_HANDLER,
                   36895:        ZEND_NULL_HANDLER,
                   36896:        ZEND_NULL_HANDLER,
                   36897:        ZEND_NULL_HANDLER,
                   36898:        ZEND_BW_NOT_SPEC_CV_HANDLER,
                   36899:        ZEND_BW_NOT_SPEC_CV_HANDLER,
                   36900:        ZEND_BW_NOT_SPEC_CV_HANDLER,
                   36901:        ZEND_BW_NOT_SPEC_CV_HANDLER,
                   36902:        ZEND_BW_NOT_SPEC_CV_HANDLER,
                   36903:        ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
                   36904:        ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
                   36905:        ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
                   36906:        ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
                   36907:        ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
                   36908:        ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
                   36909:        ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
                   36910:        ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
                   36911:        ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
                   36912:        ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
                   36913:        ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
                   36914:        ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
                   36915:        ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
                   36916:        ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
                   36917:        ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
                   36918:        ZEND_NULL_HANDLER,
                   36919:        ZEND_NULL_HANDLER,
                   36920:        ZEND_NULL_HANDLER,
                   36921:        ZEND_NULL_HANDLER,
                   36922:        ZEND_NULL_HANDLER,
                   36923:        ZEND_BOOL_NOT_SPEC_CV_HANDLER,
                   36924:        ZEND_BOOL_NOT_SPEC_CV_HANDLER,
                   36925:        ZEND_BOOL_NOT_SPEC_CV_HANDLER,
                   36926:        ZEND_BOOL_NOT_SPEC_CV_HANDLER,
                   36927:        ZEND_BOOL_NOT_SPEC_CV_HANDLER,
                   36928:        ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
                   36929:        ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER,
                   36930:        ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER,
                   36931:        ZEND_NULL_HANDLER,
                   36932:        ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER,
                   36933:        ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER,
                   36934:        ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER,
                   36935:        ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER,
                   36936:        ZEND_NULL_HANDLER,
                   36937:        ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER,
                   36938:        ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER,
                   36939:        ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER,
                   36940:        ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER,
                   36941:        ZEND_NULL_HANDLER,
                   36942:        ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER,
                   36943:        ZEND_NULL_HANDLER,
                   36944:        ZEND_NULL_HANDLER,
                   36945:        ZEND_NULL_HANDLER,
                   36946:        ZEND_NULL_HANDLER,
                   36947:        ZEND_NULL_HANDLER,
                   36948:        ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
                   36949:        ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER,
                   36950:        ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER,
                   36951:        ZEND_NULL_HANDLER,
                   36952:        ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
                   36953:        ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
                   36954:        ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER,
                   36955:        ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER,
                   36956:        ZEND_NULL_HANDLER,
                   36957:        ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER,
                   36958:        ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
                   36959:        ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
                   36960:        ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER,
                   36961:        ZEND_NULL_HANDLER,
                   36962:        ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER,
                   36963:        ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
                   36964:        ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
                   36965:        ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
                   36966:        ZEND_NULL_HANDLER,
                   36967:        ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER,
                   36968:        ZEND_NULL_HANDLER,
                   36969:        ZEND_NULL_HANDLER,
                   36970:        ZEND_NULL_HANDLER,
                   36971:        ZEND_NULL_HANDLER,
                   36972:        ZEND_NULL_HANDLER,
                   36973:        ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
                   36974:        ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
                   36975:        ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
                   36976:        ZEND_NULL_HANDLER,
                   36977:        ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
                   36978:        ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
                   36979:        ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER,
                   36980:        ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER,
                   36981:        ZEND_NULL_HANDLER,
                   36982:        ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER,
                   36983:        ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
                   36984:        ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
                   36985:        ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER,
                   36986:        ZEND_NULL_HANDLER,
                   36987:        ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER,
                   36988:        ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
                   36989:        ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
                   36990:        ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
                   36991:        ZEND_NULL_HANDLER,
                   36992:        ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER,
                   36993:        ZEND_NULL_HANDLER,
                   36994:        ZEND_NULL_HANDLER,
                   36995:        ZEND_NULL_HANDLER,
                   36996:        ZEND_NULL_HANDLER,
                   36997:        ZEND_NULL_HANDLER,
                   36998:        ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
                   36999:        ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
                   37000:        ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
                   37001:        ZEND_NULL_HANDLER,
                   37002:        ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
                   37003:        ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
                   37004:        ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER,
                   37005:        ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER,
                   37006:        ZEND_NULL_HANDLER,
                   37007:        ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER,
                   37008:        ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER,
                   37009:        ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER,
                   37010:        ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER,
                   37011:        ZEND_NULL_HANDLER,
                   37012:        ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER,
                   37013:        ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER,
                   37014:        ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER,
                   37015:        ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER,
                   37016:        ZEND_NULL_HANDLER,
                   37017:        ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER,
                   37018:        ZEND_NULL_HANDLER,
                   37019:        ZEND_NULL_HANDLER,
                   37020:        ZEND_NULL_HANDLER,
                   37021:        ZEND_NULL_HANDLER,
                   37022:        ZEND_NULL_HANDLER,
                   37023:        ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
                   37024:        ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER,
                   37025:        ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER,
                   37026:        ZEND_NULL_HANDLER,
                   37027:        ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
                   37028:        ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
                   37029:        ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER,
                   37030:        ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER,
                   37031:        ZEND_NULL_HANDLER,
                   37032:        ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER,
                   37033:        ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER,
                   37034:        ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER,
                   37035:        ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER,
                   37036:        ZEND_NULL_HANDLER,
                   37037:        ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER,
                   37038:        ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER,
                   37039:        ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER,
                   37040:        ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER,
                   37041:        ZEND_NULL_HANDLER,
                   37042:        ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER,
                   37043:        ZEND_NULL_HANDLER,
                   37044:        ZEND_NULL_HANDLER,
                   37045:        ZEND_NULL_HANDLER,
                   37046:        ZEND_NULL_HANDLER,
                   37047:        ZEND_NULL_HANDLER,
                   37048:        ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
                   37049:        ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER,
                   37050:        ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER,
                   37051:        ZEND_NULL_HANDLER,
                   37052:        ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
                   37053:        ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
                   37054:        ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER,
                   37055:        ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER,
                   37056:        ZEND_NULL_HANDLER,
                   37057:        ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER,
                   37058:        ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER,
                   37059:        ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER,
                   37060:        ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER,
                   37061:        ZEND_NULL_HANDLER,
                   37062:        ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER,
                   37063:        ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER,
                   37064:        ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER,
                   37065:        ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER,
                   37066:        ZEND_NULL_HANDLER,
                   37067:        ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER,
                   37068:        ZEND_NULL_HANDLER,
                   37069:        ZEND_NULL_HANDLER,
                   37070:        ZEND_NULL_HANDLER,
                   37071:        ZEND_NULL_HANDLER,
                   37072:        ZEND_NULL_HANDLER,
                   37073:        ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER,
                   37074:        ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER,
                   37075:        ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER,
                   37076:        ZEND_NULL_HANDLER,
                   37077:        ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER,
                   37078:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
                   37079:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER,
                   37080:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER,
                   37081:        ZEND_NULL_HANDLER,
                   37082:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER,
                   37083:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER,
                   37084:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER,
                   37085:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER,
                   37086:        ZEND_NULL_HANDLER,
                   37087:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER,
                   37088:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER,
                   37089:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER,
                   37090:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER,
                   37091:        ZEND_NULL_HANDLER,
                   37092:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER,
                   37093:        ZEND_NULL_HANDLER,
                   37094:        ZEND_NULL_HANDLER,
                   37095:        ZEND_NULL_HANDLER,
                   37096:        ZEND_NULL_HANDLER,
                   37097:        ZEND_NULL_HANDLER,
                   37098:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER,
                   37099:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER,
                   37100:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER,
                   37101:        ZEND_NULL_HANDLER,
                   37102:        ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER,
                   37103:        ZEND_CAST_SPEC_CONST_HANDLER,
                   37104:        ZEND_CAST_SPEC_CONST_HANDLER,
                   37105:        ZEND_CAST_SPEC_CONST_HANDLER,
                   37106:        ZEND_CAST_SPEC_CONST_HANDLER,
                   37107:        ZEND_CAST_SPEC_CONST_HANDLER,
                   37108:        ZEND_CAST_SPEC_TMP_HANDLER,
                   37109:        ZEND_CAST_SPEC_TMP_HANDLER,
                   37110:        ZEND_CAST_SPEC_TMP_HANDLER,
                   37111:        ZEND_CAST_SPEC_TMP_HANDLER,
                   37112:        ZEND_CAST_SPEC_TMP_HANDLER,
                   37113:        ZEND_CAST_SPEC_VAR_HANDLER,
                   37114:        ZEND_CAST_SPEC_VAR_HANDLER,
                   37115:        ZEND_CAST_SPEC_VAR_HANDLER,
                   37116:        ZEND_CAST_SPEC_VAR_HANDLER,
                   37117:        ZEND_CAST_SPEC_VAR_HANDLER,
                   37118:        ZEND_NULL_HANDLER,
                   37119:        ZEND_NULL_HANDLER,
                   37120:        ZEND_NULL_HANDLER,
                   37121:        ZEND_NULL_HANDLER,
                   37122:        ZEND_NULL_HANDLER,
                   37123:        ZEND_CAST_SPEC_CV_HANDLER,
                   37124:        ZEND_CAST_SPEC_CV_HANDLER,
                   37125:        ZEND_CAST_SPEC_CV_HANDLER,
                   37126:        ZEND_CAST_SPEC_CV_HANDLER,
                   37127:        ZEND_CAST_SPEC_CV_HANDLER,
                   37128:        ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
                   37129:        ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
                   37130:        ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
                   37131:        ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
                   37132:        ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
                   37133:        ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
                   37134:        ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
                   37135:        ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
                   37136:        ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
                   37137:        ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
                   37138:        ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
                   37139:        ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
                   37140:        ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
                   37141:        ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
                   37142:        ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
                   37143:        ZEND_NULL_HANDLER,
                   37144:        ZEND_NULL_HANDLER,
                   37145:        ZEND_NULL_HANDLER,
                   37146:        ZEND_NULL_HANDLER,
                   37147:        ZEND_NULL_HANDLER,
                   37148:        ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
                   37149:        ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
                   37150:        ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
                   37151:        ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
                   37152:        ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
                   37153:        ZEND_NULL_HANDLER,
                   37154:        ZEND_NULL_HANDLER,
                   37155:        ZEND_NULL_HANDLER,
                   37156:        ZEND_NULL_HANDLER,
                   37157:        ZEND_NULL_HANDLER,
                   37158:        ZEND_NULL_HANDLER,
                   37159:        ZEND_NULL_HANDLER,
                   37160:        ZEND_NULL_HANDLER,
                   37161:        ZEND_NULL_HANDLER,
                   37162:        ZEND_NULL_HANDLER,
                   37163:        ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER,
                   37164:        ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER,
                   37165:        ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER,
                   37166:        ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER,
                   37167:        ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER,
                   37168:        ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER,
                   37169:        ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER,
                   37170:        ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER,
                   37171:        ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER,
                   37172:        ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER,
                   37173:        ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER,
                   37174:        ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER,
                   37175:        ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER,
                   37176:        ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER,
                   37177:        ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER,
                   37178:        ZEND_NULL_HANDLER,
                   37179:        ZEND_NULL_HANDLER,
                   37180:        ZEND_NULL_HANDLER,
                   37181:        ZEND_NULL_HANDLER,
                   37182:        ZEND_NULL_HANDLER,
                   37183:        ZEND_NULL_HANDLER,
                   37184:        ZEND_NULL_HANDLER,
                   37185:        ZEND_NULL_HANDLER,
                   37186:        ZEND_NULL_HANDLER,
                   37187:        ZEND_NULL_HANDLER,
                   37188:        ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER,
                   37189:        ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER,
                   37190:        ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER,
                   37191:        ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER,
                   37192:        ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER,
                   37193:        ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER,
                   37194:        ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER,
                   37195:        ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER,
                   37196:        ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER,
                   37197:        ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER,
                   37198:        ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER,
                   37199:        ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER,
                   37200:        ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER,
                   37201:        ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER,
                   37202:        ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER,
                   37203:        ZEND_NULL_HANDLER,
                   37204:        ZEND_NULL_HANDLER,
                   37205:        ZEND_NULL_HANDLER,
                   37206:        ZEND_NULL_HANDLER,
                   37207:        ZEND_NULL_HANDLER,
                   37208:        ZEND_NULL_HANDLER,
                   37209:        ZEND_NULL_HANDLER,
                   37210:        ZEND_NULL_HANDLER,
                   37211:        ZEND_NULL_HANDLER,
                   37212:        ZEND_NULL_HANDLER,
                   37213:        ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER,
                   37214:        ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER,
                   37215:        ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER,
                   37216:        ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER,
                   37217:        ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER,
                   37218:        ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER,
                   37219:        ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER,
                   37220:        ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER,
                   37221:        ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER,
                   37222:        ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER,
                   37223:        ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER,
                   37224:        ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER,
                   37225:        ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER,
                   37226:        ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER,
                   37227:        ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER,
                   37228:        ZEND_NULL_HANDLER,
                   37229:        ZEND_NULL_HANDLER,
                   37230:        ZEND_NULL_HANDLER,
                   37231:        ZEND_NULL_HANDLER,
                   37232:        ZEND_NULL_HANDLER,
                   37233:        ZEND_NULL_HANDLER,
                   37234:        ZEND_NULL_HANDLER,
                   37235:        ZEND_NULL_HANDLER,
                   37236:        ZEND_NULL_HANDLER,
                   37237:        ZEND_NULL_HANDLER,
                   37238:        ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER,
                   37239:        ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER,
                   37240:        ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER,
                   37241:        ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER,
                   37242:        ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER,
                   37243:        ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER,
                   37244:        ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER,
                   37245:        ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER,
                   37246:        ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER,
                   37247:        ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER,
                   37248:        ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER,
                   37249:        ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER,
                   37250:        ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER,
                   37251:        ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER,
                   37252:        ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER,
                   37253:        ZEND_NULL_HANDLER,
                   37254:        ZEND_NULL_HANDLER,
                   37255:        ZEND_NULL_HANDLER,
                   37256:        ZEND_NULL_HANDLER,
                   37257:        ZEND_NULL_HANDLER,
                   37258:        ZEND_NULL_HANDLER,
                   37259:        ZEND_NULL_HANDLER,
                   37260:        ZEND_NULL_HANDLER,
                   37261:        ZEND_NULL_HANDLER,
                   37262:        ZEND_NULL_HANDLER,
                   37263:        ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER,
                   37264:        ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER,
                   37265:        ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER,
                   37266:        ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER,
                   37267:        ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER,
                   37268:        ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER,
                   37269:        ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER,
                   37270:        ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER,
                   37271:        ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER,
                   37272:        ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER,
                   37273:        ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER,
                   37274:        ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER,
                   37275:        ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER,
                   37276:        ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER,
                   37277:        ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER,
                   37278:        ZEND_NULL_HANDLER,
                   37279:        ZEND_NULL_HANDLER,
                   37280:        ZEND_NULL_HANDLER,
                   37281:        ZEND_NULL_HANDLER,
                   37282:        ZEND_NULL_HANDLER,
                   37283:        ZEND_NULL_HANDLER,
                   37284:        ZEND_NULL_HANDLER,
                   37285:        ZEND_NULL_HANDLER,
                   37286:        ZEND_NULL_HANDLER,
                   37287:        ZEND_NULL_HANDLER,
                   37288:        ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER,
                   37289:        ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER,
                   37290:        ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER,
                   37291:        ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER,
                   37292:        ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER,
                   37293:        ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER,
                   37294:        ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER,
                   37295:        ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER,
                   37296:        ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER,
                   37297:        ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER,
                   37298:        ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER,
                   37299:        ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER,
                   37300:        ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER,
                   37301:        ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER,
                   37302:        ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER,
                   37303:        ZEND_NULL_HANDLER,
                   37304:        ZEND_NULL_HANDLER,
                   37305:        ZEND_NULL_HANDLER,
                   37306:        ZEND_NULL_HANDLER,
                   37307:        ZEND_NULL_HANDLER,
                   37308:        ZEND_NULL_HANDLER,
                   37309:        ZEND_NULL_HANDLER,
                   37310:        ZEND_NULL_HANDLER,
                   37311:        ZEND_NULL_HANDLER,
                   37312:        ZEND_NULL_HANDLER,
                   37313:        ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER,
                   37314:        ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER,
                   37315:        ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER,
                   37316:        ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER,
                   37317:        ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER,
                   37318:        ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER,
                   37319:        ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER,
                   37320:        ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER,
                   37321:        ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER,
                   37322:        ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER,
                   37323:        ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER,
                   37324:        ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER,
                   37325:        ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER,
                   37326:        ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER,
                   37327:        ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER,
                   37328:        ZEND_NULL_HANDLER,
                   37329:        ZEND_NULL_HANDLER,
                   37330:        ZEND_NULL_HANDLER,
                   37331:        ZEND_NULL_HANDLER,
                   37332:        ZEND_NULL_HANDLER,
                   37333:        ZEND_NULL_HANDLER,
                   37334:        ZEND_NULL_HANDLER,
                   37335:        ZEND_NULL_HANDLER,
                   37336:        ZEND_NULL_HANDLER,
                   37337:        ZEND_NULL_HANDLER,
                   37338:        ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER,
                   37339:        ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER,
                   37340:        ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER,
                   37341:        ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER,
                   37342:        ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER,
                   37343:        ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER,
                   37344:        ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER,
                   37345:        ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER,
                   37346:        ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER,
                   37347:        ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER,
                   37348:        ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER,
                   37349:        ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER,
                   37350:        ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER,
                   37351:        ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER,
                   37352:        ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER,
                   37353:        ZEND_NULL_HANDLER,
                   37354:        ZEND_NULL_HANDLER,
                   37355:        ZEND_NULL_HANDLER,
                   37356:        ZEND_NULL_HANDLER,
                   37357:        ZEND_NULL_HANDLER,
                   37358:        ZEND_NULL_HANDLER,
                   37359:        ZEND_NULL_HANDLER,
                   37360:        ZEND_NULL_HANDLER,
                   37361:        ZEND_NULL_HANDLER,
                   37362:        ZEND_NULL_HANDLER,
                   37363:        ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER,
                   37364:        ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER,
                   37365:        ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER,
                   37366:        ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER,
                   37367:        ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER,
                   37368:        ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER,
                   37369:        ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER,
                   37370:        ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER,
                   37371:        ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER,
                   37372:        ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER,
                   37373:        ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER,
                   37374:        ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER,
                   37375:        ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER,
                   37376:        ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER,
                   37377:        ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER,
                   37378:        ZEND_NULL_HANDLER,
                   37379:        ZEND_NULL_HANDLER,
                   37380:        ZEND_NULL_HANDLER,
                   37381:        ZEND_NULL_HANDLER,
                   37382:        ZEND_NULL_HANDLER,
                   37383:        ZEND_NULL_HANDLER,
                   37384:        ZEND_NULL_HANDLER,
                   37385:        ZEND_NULL_HANDLER,
                   37386:        ZEND_NULL_HANDLER,
                   37387:        ZEND_NULL_HANDLER,
                   37388:        ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER,
                   37389:        ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER,
                   37390:        ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER,
                   37391:        ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER,
                   37392:        ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER,
                   37393:        ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER,
                   37394:        ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER,
                   37395:        ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER,
                   37396:        ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER,
                   37397:        ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER,
                   37398:        ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER,
                   37399:        ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER,
                   37400:        ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER,
                   37401:        ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER,
                   37402:        ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER,
                   37403:        ZEND_NULL_HANDLER,
                   37404:        ZEND_NULL_HANDLER,
                   37405:        ZEND_NULL_HANDLER,
                   37406:        ZEND_NULL_HANDLER,
                   37407:        ZEND_NULL_HANDLER,
                   37408:        ZEND_NULL_HANDLER,
                   37409:        ZEND_NULL_HANDLER,
                   37410:        ZEND_NULL_HANDLER,
                   37411:        ZEND_NULL_HANDLER,
                   37412:        ZEND_NULL_HANDLER,
                   37413:        ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER,
                   37414:        ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER,
                   37415:        ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER,
                   37416:        ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER,
                   37417:        ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER,
                   37418:        ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER,
                   37419:        ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER,
                   37420:        ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER,
                   37421:        ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER,
                   37422:        ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER,
                   37423:        ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER,
                   37424:        ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER,
                   37425:        ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER,
                   37426:        ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER,
                   37427:        ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER,
                   37428:        ZEND_NULL_HANDLER,
                   37429:        ZEND_NULL_HANDLER,
                   37430:        ZEND_NULL_HANDLER,
                   37431:        ZEND_NULL_HANDLER,
                   37432:        ZEND_NULL_HANDLER,
                   37433:        ZEND_NULL_HANDLER,
                   37434:        ZEND_NULL_HANDLER,
                   37435:        ZEND_NULL_HANDLER,
                   37436:        ZEND_NULL_HANDLER,
                   37437:        ZEND_NULL_HANDLER,
                   37438:        ZEND_PRE_INC_SPEC_VAR_HANDLER,
                   37439:        ZEND_PRE_INC_SPEC_VAR_HANDLER,
                   37440:        ZEND_PRE_INC_SPEC_VAR_HANDLER,
                   37441:        ZEND_PRE_INC_SPEC_VAR_HANDLER,
                   37442:        ZEND_PRE_INC_SPEC_VAR_HANDLER,
                   37443:        ZEND_NULL_HANDLER,
                   37444:        ZEND_NULL_HANDLER,
                   37445:        ZEND_NULL_HANDLER,
                   37446:        ZEND_NULL_HANDLER,
                   37447:        ZEND_NULL_HANDLER,
                   37448:        ZEND_PRE_INC_SPEC_CV_HANDLER,
                   37449:        ZEND_PRE_INC_SPEC_CV_HANDLER,
                   37450:        ZEND_PRE_INC_SPEC_CV_HANDLER,
                   37451:        ZEND_PRE_INC_SPEC_CV_HANDLER,
                   37452:        ZEND_PRE_INC_SPEC_CV_HANDLER,
                   37453:        ZEND_NULL_HANDLER,
                   37454:        ZEND_NULL_HANDLER,
                   37455:        ZEND_NULL_HANDLER,
                   37456:        ZEND_NULL_HANDLER,
                   37457:        ZEND_NULL_HANDLER,
                   37458:        ZEND_NULL_HANDLER,
                   37459:        ZEND_NULL_HANDLER,
                   37460:        ZEND_NULL_HANDLER,
                   37461:        ZEND_NULL_HANDLER,
                   37462:        ZEND_NULL_HANDLER,
                   37463:        ZEND_PRE_DEC_SPEC_VAR_HANDLER,
                   37464:        ZEND_PRE_DEC_SPEC_VAR_HANDLER,
                   37465:        ZEND_PRE_DEC_SPEC_VAR_HANDLER,
                   37466:        ZEND_PRE_DEC_SPEC_VAR_HANDLER,
                   37467:        ZEND_PRE_DEC_SPEC_VAR_HANDLER,
                   37468:        ZEND_NULL_HANDLER,
                   37469:        ZEND_NULL_HANDLER,
                   37470:        ZEND_NULL_HANDLER,
                   37471:        ZEND_NULL_HANDLER,
                   37472:        ZEND_NULL_HANDLER,
                   37473:        ZEND_PRE_DEC_SPEC_CV_HANDLER,
                   37474:        ZEND_PRE_DEC_SPEC_CV_HANDLER,
                   37475:        ZEND_PRE_DEC_SPEC_CV_HANDLER,
                   37476:        ZEND_PRE_DEC_SPEC_CV_HANDLER,
                   37477:        ZEND_PRE_DEC_SPEC_CV_HANDLER,
                   37478:        ZEND_NULL_HANDLER,
                   37479:        ZEND_NULL_HANDLER,
                   37480:        ZEND_NULL_HANDLER,
                   37481:        ZEND_NULL_HANDLER,
                   37482:        ZEND_NULL_HANDLER,
                   37483:        ZEND_NULL_HANDLER,
                   37484:        ZEND_NULL_HANDLER,
                   37485:        ZEND_NULL_HANDLER,
                   37486:        ZEND_NULL_HANDLER,
                   37487:        ZEND_NULL_HANDLER,
                   37488:        ZEND_POST_INC_SPEC_VAR_HANDLER,
                   37489:        ZEND_POST_INC_SPEC_VAR_HANDLER,
                   37490:        ZEND_POST_INC_SPEC_VAR_HANDLER,
                   37491:        ZEND_POST_INC_SPEC_VAR_HANDLER,
                   37492:        ZEND_POST_INC_SPEC_VAR_HANDLER,
                   37493:        ZEND_NULL_HANDLER,
                   37494:        ZEND_NULL_HANDLER,
                   37495:        ZEND_NULL_HANDLER,
                   37496:        ZEND_NULL_HANDLER,
                   37497:        ZEND_NULL_HANDLER,
                   37498:        ZEND_POST_INC_SPEC_CV_HANDLER,
                   37499:        ZEND_POST_INC_SPEC_CV_HANDLER,
                   37500:        ZEND_POST_INC_SPEC_CV_HANDLER,
                   37501:        ZEND_POST_INC_SPEC_CV_HANDLER,
                   37502:        ZEND_POST_INC_SPEC_CV_HANDLER,
                   37503:        ZEND_NULL_HANDLER,
                   37504:        ZEND_NULL_HANDLER,
                   37505:        ZEND_NULL_HANDLER,
                   37506:        ZEND_NULL_HANDLER,
                   37507:        ZEND_NULL_HANDLER,
                   37508:        ZEND_NULL_HANDLER,
                   37509:        ZEND_NULL_HANDLER,
                   37510:        ZEND_NULL_HANDLER,
                   37511:        ZEND_NULL_HANDLER,
                   37512:        ZEND_NULL_HANDLER,
                   37513:        ZEND_POST_DEC_SPEC_VAR_HANDLER,
                   37514:        ZEND_POST_DEC_SPEC_VAR_HANDLER,
                   37515:        ZEND_POST_DEC_SPEC_VAR_HANDLER,
                   37516:        ZEND_POST_DEC_SPEC_VAR_HANDLER,
                   37517:        ZEND_POST_DEC_SPEC_VAR_HANDLER,
                   37518:        ZEND_NULL_HANDLER,
                   37519:        ZEND_NULL_HANDLER,
                   37520:        ZEND_NULL_HANDLER,
                   37521:        ZEND_NULL_HANDLER,
                   37522:        ZEND_NULL_HANDLER,
                   37523:        ZEND_POST_DEC_SPEC_CV_HANDLER,
                   37524:        ZEND_POST_DEC_SPEC_CV_HANDLER,
                   37525:        ZEND_POST_DEC_SPEC_CV_HANDLER,
                   37526:        ZEND_POST_DEC_SPEC_CV_HANDLER,
                   37527:        ZEND_POST_DEC_SPEC_CV_HANDLER,
                   37528:        ZEND_NULL_HANDLER,
                   37529:        ZEND_NULL_HANDLER,
                   37530:        ZEND_NULL_HANDLER,
                   37531:        ZEND_NULL_HANDLER,
                   37532:        ZEND_NULL_HANDLER,
                   37533:        ZEND_NULL_HANDLER,
                   37534:        ZEND_NULL_HANDLER,
                   37535:        ZEND_NULL_HANDLER,
                   37536:        ZEND_NULL_HANDLER,
                   37537:        ZEND_NULL_HANDLER,
                   37538:        ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER,
                   37539:        ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER,
                   37540:        ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER,
                   37541:        ZEND_NULL_HANDLER,
                   37542:        ZEND_ASSIGN_SPEC_VAR_CV_HANDLER,
                   37543:        ZEND_NULL_HANDLER,
                   37544:        ZEND_NULL_HANDLER,
                   37545:        ZEND_NULL_HANDLER,
                   37546:        ZEND_NULL_HANDLER,
                   37547:        ZEND_NULL_HANDLER,
                   37548:        ZEND_ASSIGN_SPEC_CV_CONST_HANDLER,
                   37549:        ZEND_ASSIGN_SPEC_CV_TMP_HANDLER,
                   37550:        ZEND_ASSIGN_SPEC_CV_VAR_HANDLER,
                   37551:        ZEND_NULL_HANDLER,
                   37552:        ZEND_ASSIGN_SPEC_CV_CV_HANDLER,
                   37553:        ZEND_NULL_HANDLER,
                   37554:        ZEND_NULL_HANDLER,
                   37555:        ZEND_NULL_HANDLER,
                   37556:        ZEND_NULL_HANDLER,
                   37557:        ZEND_NULL_HANDLER,
                   37558:        ZEND_NULL_HANDLER,
                   37559:        ZEND_NULL_HANDLER,
                   37560:        ZEND_NULL_HANDLER,
                   37561:        ZEND_NULL_HANDLER,
                   37562:        ZEND_NULL_HANDLER,
                   37563:        ZEND_NULL_HANDLER,
                   37564:        ZEND_NULL_HANDLER,
                   37565:        ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
                   37566:        ZEND_NULL_HANDLER,
                   37567:        ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
                   37568:        ZEND_NULL_HANDLER,
                   37569:        ZEND_NULL_HANDLER,
                   37570:        ZEND_NULL_HANDLER,
                   37571:        ZEND_NULL_HANDLER,
                   37572:        ZEND_NULL_HANDLER,
                   37573:        ZEND_NULL_HANDLER,
                   37574:        ZEND_NULL_HANDLER,
                   37575:        ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
                   37576:        ZEND_NULL_HANDLER,
                   37577:        ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
                   37578:        ZEND_ECHO_SPEC_CONST_HANDLER,
                   37579:        ZEND_ECHO_SPEC_CONST_HANDLER,
                   37580:        ZEND_ECHO_SPEC_CONST_HANDLER,
                   37581:        ZEND_ECHO_SPEC_CONST_HANDLER,
                   37582:        ZEND_ECHO_SPEC_CONST_HANDLER,
                   37583:        ZEND_ECHO_SPEC_TMP_HANDLER,
                   37584:        ZEND_ECHO_SPEC_TMP_HANDLER,
                   37585:        ZEND_ECHO_SPEC_TMP_HANDLER,
                   37586:        ZEND_ECHO_SPEC_TMP_HANDLER,
                   37587:        ZEND_ECHO_SPEC_TMP_HANDLER,
                   37588:        ZEND_ECHO_SPEC_VAR_HANDLER,
                   37589:        ZEND_ECHO_SPEC_VAR_HANDLER,
                   37590:        ZEND_ECHO_SPEC_VAR_HANDLER,
                   37591:        ZEND_ECHO_SPEC_VAR_HANDLER,
                   37592:        ZEND_ECHO_SPEC_VAR_HANDLER,
                   37593:        ZEND_NULL_HANDLER,
                   37594:        ZEND_NULL_HANDLER,
                   37595:        ZEND_NULL_HANDLER,
                   37596:        ZEND_NULL_HANDLER,
                   37597:        ZEND_NULL_HANDLER,
                   37598:        ZEND_ECHO_SPEC_CV_HANDLER,
                   37599:        ZEND_ECHO_SPEC_CV_HANDLER,
                   37600:        ZEND_ECHO_SPEC_CV_HANDLER,
                   37601:        ZEND_ECHO_SPEC_CV_HANDLER,
                   37602:        ZEND_ECHO_SPEC_CV_HANDLER,
                   37603:        ZEND_PRINT_SPEC_CONST_HANDLER,
                   37604:        ZEND_PRINT_SPEC_CONST_HANDLER,
                   37605:        ZEND_PRINT_SPEC_CONST_HANDLER,
                   37606:        ZEND_PRINT_SPEC_CONST_HANDLER,
                   37607:        ZEND_PRINT_SPEC_CONST_HANDLER,
                   37608:        ZEND_PRINT_SPEC_TMP_HANDLER,
                   37609:        ZEND_PRINT_SPEC_TMP_HANDLER,
                   37610:        ZEND_PRINT_SPEC_TMP_HANDLER,
                   37611:        ZEND_PRINT_SPEC_TMP_HANDLER,
                   37612:        ZEND_PRINT_SPEC_TMP_HANDLER,
                   37613:        ZEND_PRINT_SPEC_VAR_HANDLER,
                   37614:        ZEND_PRINT_SPEC_VAR_HANDLER,
                   37615:        ZEND_PRINT_SPEC_VAR_HANDLER,
                   37616:        ZEND_PRINT_SPEC_VAR_HANDLER,
                   37617:        ZEND_PRINT_SPEC_VAR_HANDLER,
                   37618:        ZEND_NULL_HANDLER,
                   37619:        ZEND_NULL_HANDLER,
                   37620:        ZEND_NULL_HANDLER,
                   37621:        ZEND_NULL_HANDLER,
                   37622:        ZEND_NULL_HANDLER,
                   37623:        ZEND_PRINT_SPEC_CV_HANDLER,
                   37624:        ZEND_PRINT_SPEC_CV_HANDLER,
                   37625:        ZEND_PRINT_SPEC_CV_HANDLER,
                   37626:        ZEND_PRINT_SPEC_CV_HANDLER,
                   37627:        ZEND_PRINT_SPEC_CV_HANDLER,
                   37628:        ZEND_JMP_SPEC_HANDLER,
                   37629:        ZEND_JMP_SPEC_HANDLER,
                   37630:        ZEND_JMP_SPEC_HANDLER,
                   37631:        ZEND_JMP_SPEC_HANDLER,
                   37632:        ZEND_JMP_SPEC_HANDLER,
                   37633:        ZEND_JMP_SPEC_HANDLER,
                   37634:        ZEND_JMP_SPEC_HANDLER,
                   37635:        ZEND_JMP_SPEC_HANDLER,
                   37636:        ZEND_JMP_SPEC_HANDLER,
                   37637:        ZEND_JMP_SPEC_HANDLER,
                   37638:        ZEND_JMP_SPEC_HANDLER,
                   37639:        ZEND_JMP_SPEC_HANDLER,
                   37640:        ZEND_JMP_SPEC_HANDLER,
                   37641:        ZEND_JMP_SPEC_HANDLER,
                   37642:        ZEND_JMP_SPEC_HANDLER,
                   37643:        ZEND_JMP_SPEC_HANDLER,
                   37644:        ZEND_JMP_SPEC_HANDLER,
                   37645:        ZEND_JMP_SPEC_HANDLER,
                   37646:        ZEND_JMP_SPEC_HANDLER,
                   37647:        ZEND_JMP_SPEC_HANDLER,
                   37648:        ZEND_JMP_SPEC_HANDLER,
                   37649:        ZEND_JMP_SPEC_HANDLER,
                   37650:        ZEND_JMP_SPEC_HANDLER,
                   37651:        ZEND_JMP_SPEC_HANDLER,
                   37652:        ZEND_JMP_SPEC_HANDLER,
                   37653:        ZEND_JMPZ_SPEC_CONST_HANDLER,
                   37654:        ZEND_JMPZ_SPEC_CONST_HANDLER,
                   37655:        ZEND_JMPZ_SPEC_CONST_HANDLER,
                   37656:        ZEND_JMPZ_SPEC_CONST_HANDLER,
                   37657:        ZEND_JMPZ_SPEC_CONST_HANDLER,
                   37658:        ZEND_JMPZ_SPEC_TMP_HANDLER,
                   37659:        ZEND_JMPZ_SPEC_TMP_HANDLER,
                   37660:        ZEND_JMPZ_SPEC_TMP_HANDLER,
                   37661:        ZEND_JMPZ_SPEC_TMP_HANDLER,
                   37662:        ZEND_JMPZ_SPEC_TMP_HANDLER,
                   37663:        ZEND_JMPZ_SPEC_VAR_HANDLER,
                   37664:        ZEND_JMPZ_SPEC_VAR_HANDLER,
                   37665:        ZEND_JMPZ_SPEC_VAR_HANDLER,
                   37666:        ZEND_JMPZ_SPEC_VAR_HANDLER,
                   37667:        ZEND_JMPZ_SPEC_VAR_HANDLER,
                   37668:        ZEND_NULL_HANDLER,
                   37669:        ZEND_NULL_HANDLER,
                   37670:        ZEND_NULL_HANDLER,
                   37671:        ZEND_NULL_HANDLER,
                   37672:        ZEND_NULL_HANDLER,
                   37673:        ZEND_JMPZ_SPEC_CV_HANDLER,
                   37674:        ZEND_JMPZ_SPEC_CV_HANDLER,
                   37675:        ZEND_JMPZ_SPEC_CV_HANDLER,
                   37676:        ZEND_JMPZ_SPEC_CV_HANDLER,
                   37677:        ZEND_JMPZ_SPEC_CV_HANDLER,
                   37678:        ZEND_JMPNZ_SPEC_CONST_HANDLER,
                   37679:        ZEND_JMPNZ_SPEC_CONST_HANDLER,
                   37680:        ZEND_JMPNZ_SPEC_CONST_HANDLER,
                   37681:        ZEND_JMPNZ_SPEC_CONST_HANDLER,
                   37682:        ZEND_JMPNZ_SPEC_CONST_HANDLER,
                   37683:        ZEND_JMPNZ_SPEC_TMP_HANDLER,
                   37684:        ZEND_JMPNZ_SPEC_TMP_HANDLER,
                   37685:        ZEND_JMPNZ_SPEC_TMP_HANDLER,
                   37686:        ZEND_JMPNZ_SPEC_TMP_HANDLER,
                   37687:        ZEND_JMPNZ_SPEC_TMP_HANDLER,
                   37688:        ZEND_JMPNZ_SPEC_VAR_HANDLER,
                   37689:        ZEND_JMPNZ_SPEC_VAR_HANDLER,
                   37690:        ZEND_JMPNZ_SPEC_VAR_HANDLER,
                   37691:        ZEND_JMPNZ_SPEC_VAR_HANDLER,
                   37692:        ZEND_JMPNZ_SPEC_VAR_HANDLER,
                   37693:        ZEND_NULL_HANDLER,
                   37694:        ZEND_NULL_HANDLER,
                   37695:        ZEND_NULL_HANDLER,
                   37696:        ZEND_NULL_HANDLER,
                   37697:        ZEND_NULL_HANDLER,
                   37698:        ZEND_JMPNZ_SPEC_CV_HANDLER,
                   37699:        ZEND_JMPNZ_SPEC_CV_HANDLER,
                   37700:        ZEND_JMPNZ_SPEC_CV_HANDLER,
                   37701:        ZEND_JMPNZ_SPEC_CV_HANDLER,
                   37702:        ZEND_JMPNZ_SPEC_CV_HANDLER,
                   37703:        ZEND_JMPZNZ_SPEC_CONST_HANDLER,
                   37704:        ZEND_JMPZNZ_SPEC_CONST_HANDLER,
                   37705:        ZEND_JMPZNZ_SPEC_CONST_HANDLER,
                   37706:        ZEND_JMPZNZ_SPEC_CONST_HANDLER,
                   37707:        ZEND_JMPZNZ_SPEC_CONST_HANDLER,
                   37708:        ZEND_JMPZNZ_SPEC_TMP_HANDLER,
                   37709:        ZEND_JMPZNZ_SPEC_TMP_HANDLER,
                   37710:        ZEND_JMPZNZ_SPEC_TMP_HANDLER,
                   37711:        ZEND_JMPZNZ_SPEC_TMP_HANDLER,
                   37712:        ZEND_JMPZNZ_SPEC_TMP_HANDLER,
                   37713:        ZEND_JMPZNZ_SPEC_VAR_HANDLER,
                   37714:        ZEND_JMPZNZ_SPEC_VAR_HANDLER,
                   37715:        ZEND_JMPZNZ_SPEC_VAR_HANDLER,
                   37716:        ZEND_JMPZNZ_SPEC_VAR_HANDLER,
                   37717:        ZEND_JMPZNZ_SPEC_VAR_HANDLER,
                   37718:        ZEND_NULL_HANDLER,
                   37719:        ZEND_NULL_HANDLER,
                   37720:        ZEND_NULL_HANDLER,
                   37721:        ZEND_NULL_HANDLER,
                   37722:        ZEND_NULL_HANDLER,
                   37723:        ZEND_JMPZNZ_SPEC_CV_HANDLER,
                   37724:        ZEND_JMPZNZ_SPEC_CV_HANDLER,
                   37725:        ZEND_JMPZNZ_SPEC_CV_HANDLER,
                   37726:        ZEND_JMPZNZ_SPEC_CV_HANDLER,
                   37727:        ZEND_JMPZNZ_SPEC_CV_HANDLER,
                   37728:        ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
                   37729:        ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
                   37730:        ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
                   37731:        ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
                   37732:        ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
                   37733:        ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
                   37734:        ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
                   37735:        ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
                   37736:        ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
                   37737:        ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
                   37738:        ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
                   37739:        ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
                   37740:        ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
                   37741:        ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
                   37742:        ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
                   37743:        ZEND_NULL_HANDLER,
                   37744:        ZEND_NULL_HANDLER,
                   37745:        ZEND_NULL_HANDLER,
                   37746:        ZEND_NULL_HANDLER,
                   37747:        ZEND_NULL_HANDLER,
                   37748:        ZEND_JMPZ_EX_SPEC_CV_HANDLER,
                   37749:        ZEND_JMPZ_EX_SPEC_CV_HANDLER,
                   37750:        ZEND_JMPZ_EX_SPEC_CV_HANDLER,
                   37751:        ZEND_JMPZ_EX_SPEC_CV_HANDLER,
                   37752:        ZEND_JMPZ_EX_SPEC_CV_HANDLER,
                   37753:        ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
                   37754:        ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
                   37755:        ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
                   37756:        ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
                   37757:        ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
                   37758:        ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
                   37759:        ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
                   37760:        ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
                   37761:        ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
                   37762:        ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
                   37763:        ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
                   37764:        ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
                   37765:        ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
                   37766:        ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
                   37767:        ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
                   37768:        ZEND_NULL_HANDLER,
                   37769:        ZEND_NULL_HANDLER,
                   37770:        ZEND_NULL_HANDLER,
                   37771:        ZEND_NULL_HANDLER,
                   37772:        ZEND_NULL_HANDLER,
                   37773:        ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
                   37774:        ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
                   37775:        ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
                   37776:        ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
                   37777:        ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
                   37778:        ZEND_CASE_SPEC_CONST_CONST_HANDLER,
                   37779:        ZEND_CASE_SPEC_CONST_TMP_HANDLER,
                   37780:        ZEND_CASE_SPEC_CONST_VAR_HANDLER,
                   37781:        ZEND_NULL_HANDLER,
                   37782:        ZEND_CASE_SPEC_CONST_CV_HANDLER,
                   37783:        ZEND_CASE_SPEC_TMP_CONST_HANDLER,
                   37784:        ZEND_CASE_SPEC_TMP_TMP_HANDLER,
                   37785:        ZEND_CASE_SPEC_TMP_VAR_HANDLER,
                   37786:        ZEND_NULL_HANDLER,
                   37787:        ZEND_CASE_SPEC_TMP_CV_HANDLER,
                   37788:        ZEND_CASE_SPEC_VAR_CONST_HANDLER,
                   37789:        ZEND_CASE_SPEC_VAR_TMP_HANDLER,
                   37790:        ZEND_CASE_SPEC_VAR_VAR_HANDLER,
                   37791:        ZEND_NULL_HANDLER,
                   37792:        ZEND_CASE_SPEC_VAR_CV_HANDLER,
                   37793:        ZEND_NULL_HANDLER,
                   37794:        ZEND_NULL_HANDLER,
                   37795:        ZEND_NULL_HANDLER,
                   37796:        ZEND_NULL_HANDLER,
                   37797:        ZEND_NULL_HANDLER,
                   37798:        ZEND_CASE_SPEC_CV_CONST_HANDLER,
                   37799:        ZEND_CASE_SPEC_CV_TMP_HANDLER,
                   37800:        ZEND_CASE_SPEC_CV_VAR_HANDLER,
                   37801:        ZEND_NULL_HANDLER,
                   37802:        ZEND_CASE_SPEC_CV_CV_HANDLER,
                   37803:        ZEND_NULL_HANDLER,
                   37804:        ZEND_NULL_HANDLER,
                   37805:        ZEND_NULL_HANDLER,
                   37806:        ZEND_NULL_HANDLER,
                   37807:        ZEND_NULL_HANDLER,
                   37808:        ZEND_NULL_HANDLER,
                   37809:        ZEND_NULL_HANDLER,
                   37810:        ZEND_NULL_HANDLER,
                   37811:        ZEND_NULL_HANDLER,
                   37812:        ZEND_NULL_HANDLER,
                   37813:        ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
                   37814:        ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
                   37815:        ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
                   37816:        ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
                   37817:        ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
                   37818:        ZEND_NULL_HANDLER,
                   37819:        ZEND_NULL_HANDLER,
                   37820:        ZEND_NULL_HANDLER,
                   37821:        ZEND_NULL_HANDLER,
                   37822:        ZEND_NULL_HANDLER,
                   37823:        ZEND_NULL_HANDLER,
                   37824:        ZEND_NULL_HANDLER,
                   37825:        ZEND_NULL_HANDLER,
                   37826:        ZEND_NULL_HANDLER,
                   37827:        ZEND_NULL_HANDLER,
                   37828:        ZEND_BRK_SPEC_CONST_HANDLER,
                   37829:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37830:        ZEND_NULL_HANDLER,
                   37831:        ZEND_NULL_HANDLER,
                   37832:        ZEND_NULL_HANDLER,
1.1       misho    37833:        ZEND_BRK_SPEC_CONST_HANDLER,
                   37834:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37835:        ZEND_NULL_HANDLER,
                   37836:        ZEND_NULL_HANDLER,
                   37837:        ZEND_NULL_HANDLER,
1.1       misho    37838:        ZEND_BRK_SPEC_CONST_HANDLER,
                   37839:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37840:        ZEND_NULL_HANDLER,
                   37841:        ZEND_NULL_HANDLER,
                   37842:        ZEND_NULL_HANDLER,
1.1       misho    37843:        ZEND_BRK_SPEC_CONST_HANDLER,
                   37844:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37845:        ZEND_NULL_HANDLER,
                   37846:        ZEND_NULL_HANDLER,
                   37847:        ZEND_NULL_HANDLER,
1.1       misho    37848:        ZEND_BRK_SPEC_CONST_HANDLER,
                   37849:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37850:        ZEND_NULL_HANDLER,
                   37851:        ZEND_NULL_HANDLER,
                   37852:        ZEND_NULL_HANDLER,
1.1       misho    37853:        ZEND_CONT_SPEC_CONST_HANDLER,
                   37854:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37855:        ZEND_NULL_HANDLER,
                   37856:        ZEND_NULL_HANDLER,
                   37857:        ZEND_NULL_HANDLER,
1.1       misho    37858:        ZEND_CONT_SPEC_CONST_HANDLER,
                   37859:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37860:        ZEND_NULL_HANDLER,
                   37861:        ZEND_NULL_HANDLER,
                   37862:        ZEND_NULL_HANDLER,
1.1       misho    37863:        ZEND_CONT_SPEC_CONST_HANDLER,
                   37864:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37865:        ZEND_NULL_HANDLER,
                   37866:        ZEND_NULL_HANDLER,
                   37867:        ZEND_NULL_HANDLER,
1.1       misho    37868:        ZEND_CONT_SPEC_CONST_HANDLER,
                   37869:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37870:        ZEND_NULL_HANDLER,
                   37871:        ZEND_NULL_HANDLER,
                   37872:        ZEND_NULL_HANDLER,
1.1       misho    37873:        ZEND_CONT_SPEC_CONST_HANDLER,
                   37874:        ZEND_NULL_HANDLER,
1.1.1.2   misho    37875:        ZEND_NULL_HANDLER,
                   37876:        ZEND_NULL_HANDLER,
                   37877:        ZEND_NULL_HANDLER,
1.1       misho    37878:        ZEND_BOOL_SPEC_CONST_HANDLER,
                   37879:        ZEND_BOOL_SPEC_CONST_HANDLER,
                   37880:        ZEND_BOOL_SPEC_CONST_HANDLER,
                   37881:        ZEND_BOOL_SPEC_CONST_HANDLER,
                   37882:        ZEND_BOOL_SPEC_CONST_HANDLER,
                   37883:        ZEND_BOOL_SPEC_TMP_HANDLER,
                   37884:        ZEND_BOOL_SPEC_TMP_HANDLER,
                   37885:        ZEND_BOOL_SPEC_TMP_HANDLER,
                   37886:        ZEND_BOOL_SPEC_TMP_HANDLER,
                   37887:        ZEND_BOOL_SPEC_TMP_HANDLER,
                   37888:        ZEND_BOOL_SPEC_VAR_HANDLER,
                   37889:        ZEND_BOOL_SPEC_VAR_HANDLER,
                   37890:        ZEND_BOOL_SPEC_VAR_HANDLER,
                   37891:        ZEND_BOOL_SPEC_VAR_HANDLER,
                   37892:        ZEND_BOOL_SPEC_VAR_HANDLER,
                   37893:        ZEND_NULL_HANDLER,
                   37894:        ZEND_NULL_HANDLER,
                   37895:        ZEND_NULL_HANDLER,
                   37896:        ZEND_NULL_HANDLER,
                   37897:        ZEND_NULL_HANDLER,
                   37898:        ZEND_BOOL_SPEC_CV_HANDLER,
                   37899:        ZEND_BOOL_SPEC_CV_HANDLER,
                   37900:        ZEND_BOOL_SPEC_CV_HANDLER,
                   37901:        ZEND_BOOL_SPEC_CV_HANDLER,
                   37902:        ZEND_BOOL_SPEC_CV_HANDLER,
                   37903:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37904:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37905:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37906:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37907:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37908:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37909:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37910:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37911:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37912:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37913:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37914:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37915:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37916:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37917:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37918:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37919:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37920:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37921:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37922:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37923:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37924:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37925:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37926:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37927:        ZEND_INIT_STRING_SPEC_HANDLER,
                   37928:        ZEND_NULL_HANDLER,
                   37929:        ZEND_NULL_HANDLER,
                   37930:        ZEND_NULL_HANDLER,
                   37931:        ZEND_NULL_HANDLER,
                   37932:        ZEND_NULL_HANDLER,
                   37933:        ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER,
                   37934:        ZEND_NULL_HANDLER,
                   37935:        ZEND_NULL_HANDLER,
                   37936:        ZEND_NULL_HANDLER,
                   37937:        ZEND_NULL_HANDLER,
                   37938:        ZEND_NULL_HANDLER,
                   37939:        ZEND_NULL_HANDLER,
                   37940:        ZEND_NULL_HANDLER,
                   37941:        ZEND_NULL_HANDLER,
                   37942:        ZEND_NULL_HANDLER,
                   37943:        ZEND_ADD_CHAR_SPEC_UNUSED_CONST_HANDLER,
                   37944:        ZEND_NULL_HANDLER,
                   37945:        ZEND_NULL_HANDLER,
                   37946:        ZEND_NULL_HANDLER,
                   37947:        ZEND_NULL_HANDLER,
                   37948:        ZEND_NULL_HANDLER,
                   37949:        ZEND_NULL_HANDLER,
                   37950:        ZEND_NULL_HANDLER,
                   37951:        ZEND_NULL_HANDLER,
                   37952:        ZEND_NULL_HANDLER,
                   37953:        ZEND_NULL_HANDLER,
                   37954:        ZEND_NULL_HANDLER,
                   37955:        ZEND_NULL_HANDLER,
                   37956:        ZEND_NULL_HANDLER,
                   37957:        ZEND_NULL_HANDLER,
                   37958:        ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER,
                   37959:        ZEND_NULL_HANDLER,
                   37960:        ZEND_NULL_HANDLER,
                   37961:        ZEND_NULL_HANDLER,
                   37962:        ZEND_NULL_HANDLER,
                   37963:        ZEND_NULL_HANDLER,
                   37964:        ZEND_NULL_HANDLER,
                   37965:        ZEND_NULL_HANDLER,
                   37966:        ZEND_NULL_HANDLER,
                   37967:        ZEND_NULL_HANDLER,
                   37968:        ZEND_ADD_STRING_SPEC_UNUSED_CONST_HANDLER,
                   37969:        ZEND_NULL_HANDLER,
                   37970:        ZEND_NULL_HANDLER,
                   37971:        ZEND_NULL_HANDLER,
                   37972:        ZEND_NULL_HANDLER,
                   37973:        ZEND_NULL_HANDLER,
                   37974:        ZEND_NULL_HANDLER,
                   37975:        ZEND_NULL_HANDLER,
                   37976:        ZEND_NULL_HANDLER,
                   37977:        ZEND_NULL_HANDLER,
                   37978:        ZEND_NULL_HANDLER,
                   37979:        ZEND_NULL_HANDLER,
                   37980:        ZEND_NULL_HANDLER,
                   37981:        ZEND_NULL_HANDLER,
                   37982:        ZEND_NULL_HANDLER,
                   37983:        ZEND_NULL_HANDLER,
                   37984:        ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER,
                   37985:        ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER,
                   37986:        ZEND_NULL_HANDLER,
                   37987:        ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER,
                   37988:        ZEND_NULL_HANDLER,
                   37989:        ZEND_NULL_HANDLER,
                   37990:        ZEND_NULL_HANDLER,
                   37991:        ZEND_NULL_HANDLER,
                   37992:        ZEND_NULL_HANDLER,
                   37993:        ZEND_NULL_HANDLER,
                   37994:        ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER,
                   37995:        ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER,
                   37996:        ZEND_NULL_HANDLER,
                   37997:        ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER,
                   37998:        ZEND_NULL_HANDLER,
                   37999:        ZEND_NULL_HANDLER,
                   38000:        ZEND_NULL_HANDLER,
                   38001:        ZEND_NULL_HANDLER,
                   38002:        ZEND_NULL_HANDLER,
                   38003:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38004:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38005:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38006:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38007:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38008:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38009:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38010:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38011:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38012:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38013:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38014:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38015:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38016:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38017:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38018:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38019:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38020:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38021:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38022:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38023:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38024:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38025:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38026:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38027:        ZEND_BEGIN_SILENCE_SPEC_HANDLER,
                   38028:        ZEND_NULL_HANDLER,
                   38029:        ZEND_NULL_HANDLER,
                   38030:        ZEND_NULL_HANDLER,
                   38031:        ZEND_NULL_HANDLER,
                   38032:        ZEND_NULL_HANDLER,
                   38033:        ZEND_END_SILENCE_SPEC_TMP_HANDLER,
                   38034:        ZEND_END_SILENCE_SPEC_TMP_HANDLER,
                   38035:        ZEND_END_SILENCE_SPEC_TMP_HANDLER,
                   38036:        ZEND_END_SILENCE_SPEC_TMP_HANDLER,
                   38037:        ZEND_END_SILENCE_SPEC_TMP_HANDLER,
                   38038:        ZEND_NULL_HANDLER,
                   38039:        ZEND_NULL_HANDLER,
                   38040:        ZEND_NULL_HANDLER,
                   38041:        ZEND_NULL_HANDLER,
                   38042:        ZEND_NULL_HANDLER,
                   38043:        ZEND_NULL_HANDLER,
                   38044:        ZEND_NULL_HANDLER,
                   38045:        ZEND_NULL_HANDLER,
                   38046:        ZEND_NULL_HANDLER,
                   38047:        ZEND_NULL_HANDLER,
                   38048:        ZEND_NULL_HANDLER,
                   38049:        ZEND_NULL_HANDLER,
                   38050:        ZEND_NULL_HANDLER,
                   38051:        ZEND_NULL_HANDLER,
                   38052:        ZEND_NULL_HANDLER,
                   38053:        ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38054:        ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
                   38055:        ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
                   38056:        ZEND_NULL_HANDLER,
                   38057:        ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
                   38058:        ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38059:        ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
                   38060:        ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
                   38061:        ZEND_NULL_HANDLER,
                   38062:        ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
                   38063:        ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38064:        ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
                   38065:        ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
                   38066:        ZEND_NULL_HANDLER,
                   38067:        ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
                   38068:        ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38069:        ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
                   38070:        ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
                   38071:        ZEND_NULL_HANDLER,
                   38072:        ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
                   38073:        ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38074:        ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
                   38075:        ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
                   38076:        ZEND_NULL_HANDLER,
                   38077:        ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
                   38078:        ZEND_DO_FCALL_SPEC_CONST_HANDLER,
                   38079:        ZEND_DO_FCALL_SPEC_CONST_HANDLER,
                   38080:        ZEND_DO_FCALL_SPEC_CONST_HANDLER,
                   38081:        ZEND_DO_FCALL_SPEC_CONST_HANDLER,
                   38082:        ZEND_DO_FCALL_SPEC_CONST_HANDLER,
                   38083:        ZEND_NULL_HANDLER,
                   38084:        ZEND_NULL_HANDLER,
                   38085:        ZEND_NULL_HANDLER,
                   38086:        ZEND_NULL_HANDLER,
                   38087:        ZEND_NULL_HANDLER,
                   38088:        ZEND_NULL_HANDLER,
                   38089:        ZEND_NULL_HANDLER,
                   38090:        ZEND_NULL_HANDLER,
                   38091:        ZEND_NULL_HANDLER,
                   38092:        ZEND_NULL_HANDLER,
                   38093:        ZEND_NULL_HANDLER,
                   38094:        ZEND_NULL_HANDLER,
                   38095:        ZEND_NULL_HANDLER,
                   38096:        ZEND_NULL_HANDLER,
                   38097:        ZEND_NULL_HANDLER,
                   38098:        ZEND_NULL_HANDLER,
                   38099:        ZEND_NULL_HANDLER,
                   38100:        ZEND_NULL_HANDLER,
                   38101:        ZEND_NULL_HANDLER,
                   38102:        ZEND_NULL_HANDLER,
                   38103:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38104:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38105:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38106:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38107:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38108:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38109:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38110:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38111:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38112:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38113:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38114:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38115:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38116:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38117:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38118:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38119:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38120:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38121:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38122:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38123:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38124:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38125:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38126:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38127:        ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
                   38128:        ZEND_RETURN_SPEC_CONST_HANDLER,
                   38129:        ZEND_RETURN_SPEC_CONST_HANDLER,
                   38130:        ZEND_RETURN_SPEC_CONST_HANDLER,
                   38131:        ZEND_RETURN_SPEC_CONST_HANDLER,
                   38132:        ZEND_RETURN_SPEC_CONST_HANDLER,
                   38133:        ZEND_RETURN_SPEC_TMP_HANDLER,
                   38134:        ZEND_RETURN_SPEC_TMP_HANDLER,
                   38135:        ZEND_RETURN_SPEC_TMP_HANDLER,
                   38136:        ZEND_RETURN_SPEC_TMP_HANDLER,
                   38137:        ZEND_RETURN_SPEC_TMP_HANDLER,
                   38138:        ZEND_RETURN_SPEC_VAR_HANDLER,
                   38139:        ZEND_RETURN_SPEC_VAR_HANDLER,
                   38140:        ZEND_RETURN_SPEC_VAR_HANDLER,
                   38141:        ZEND_RETURN_SPEC_VAR_HANDLER,
                   38142:        ZEND_RETURN_SPEC_VAR_HANDLER,
                   38143:        ZEND_NULL_HANDLER,
                   38144:        ZEND_NULL_HANDLER,
                   38145:        ZEND_NULL_HANDLER,
                   38146:        ZEND_NULL_HANDLER,
                   38147:        ZEND_NULL_HANDLER,
                   38148:        ZEND_RETURN_SPEC_CV_HANDLER,
                   38149:        ZEND_RETURN_SPEC_CV_HANDLER,
                   38150:        ZEND_RETURN_SPEC_CV_HANDLER,
                   38151:        ZEND_RETURN_SPEC_CV_HANDLER,
                   38152:        ZEND_RETURN_SPEC_CV_HANDLER,
                   38153:        ZEND_RECV_SPEC_HANDLER,
                   38154:        ZEND_RECV_SPEC_HANDLER,
                   38155:        ZEND_RECV_SPEC_HANDLER,
                   38156:        ZEND_RECV_SPEC_HANDLER,
                   38157:        ZEND_RECV_SPEC_HANDLER,
                   38158:        ZEND_RECV_SPEC_HANDLER,
                   38159:        ZEND_RECV_SPEC_HANDLER,
                   38160:        ZEND_RECV_SPEC_HANDLER,
                   38161:        ZEND_RECV_SPEC_HANDLER,
                   38162:        ZEND_RECV_SPEC_HANDLER,
                   38163:        ZEND_RECV_SPEC_HANDLER,
                   38164:        ZEND_RECV_SPEC_HANDLER,
                   38165:        ZEND_RECV_SPEC_HANDLER,
                   38166:        ZEND_RECV_SPEC_HANDLER,
                   38167:        ZEND_RECV_SPEC_HANDLER,
                   38168:        ZEND_RECV_SPEC_HANDLER,
                   38169:        ZEND_RECV_SPEC_HANDLER,
                   38170:        ZEND_RECV_SPEC_HANDLER,
                   38171:        ZEND_RECV_SPEC_HANDLER,
                   38172:        ZEND_RECV_SPEC_HANDLER,
                   38173:        ZEND_RECV_SPEC_HANDLER,
                   38174:        ZEND_RECV_SPEC_HANDLER,
                   38175:        ZEND_RECV_SPEC_HANDLER,
                   38176:        ZEND_RECV_SPEC_HANDLER,
                   38177:        ZEND_RECV_SPEC_HANDLER,
                   38178:        ZEND_RECV_INIT_SPEC_CONST_HANDLER,
                   38179:        ZEND_NULL_HANDLER,
                   38180:        ZEND_NULL_HANDLER,
                   38181:        ZEND_NULL_HANDLER,
                   38182:        ZEND_NULL_HANDLER,
                   38183:        ZEND_RECV_INIT_SPEC_CONST_HANDLER,
                   38184:        ZEND_NULL_HANDLER,
                   38185:        ZEND_NULL_HANDLER,
                   38186:        ZEND_NULL_HANDLER,
                   38187:        ZEND_NULL_HANDLER,
                   38188:        ZEND_RECV_INIT_SPEC_CONST_HANDLER,
                   38189:        ZEND_NULL_HANDLER,
                   38190:        ZEND_NULL_HANDLER,
                   38191:        ZEND_NULL_HANDLER,
                   38192:        ZEND_NULL_HANDLER,
                   38193:        ZEND_RECV_INIT_SPEC_CONST_HANDLER,
                   38194:        ZEND_NULL_HANDLER,
                   38195:        ZEND_NULL_HANDLER,
                   38196:        ZEND_NULL_HANDLER,
                   38197:        ZEND_NULL_HANDLER,
                   38198:        ZEND_RECV_INIT_SPEC_CONST_HANDLER,
                   38199:        ZEND_NULL_HANDLER,
                   38200:        ZEND_NULL_HANDLER,
                   38201:        ZEND_NULL_HANDLER,
                   38202:        ZEND_NULL_HANDLER,
                   38203:        ZEND_SEND_VAL_SPEC_CONST_HANDLER,
                   38204:        ZEND_SEND_VAL_SPEC_CONST_HANDLER,
                   38205:        ZEND_SEND_VAL_SPEC_CONST_HANDLER,
                   38206:        ZEND_SEND_VAL_SPEC_CONST_HANDLER,
                   38207:        ZEND_SEND_VAL_SPEC_CONST_HANDLER,
                   38208:        ZEND_SEND_VAL_SPEC_TMP_HANDLER,
                   38209:        ZEND_SEND_VAL_SPEC_TMP_HANDLER,
                   38210:        ZEND_SEND_VAL_SPEC_TMP_HANDLER,
                   38211:        ZEND_SEND_VAL_SPEC_TMP_HANDLER,
                   38212:        ZEND_SEND_VAL_SPEC_TMP_HANDLER,
                   38213:        ZEND_NULL_HANDLER,
                   38214:        ZEND_NULL_HANDLER,
                   38215:        ZEND_NULL_HANDLER,
                   38216:        ZEND_NULL_HANDLER,
                   38217:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38218:        ZEND_NULL_HANDLER,
                   38219:        ZEND_NULL_HANDLER,
                   38220:        ZEND_NULL_HANDLER,
                   38221:        ZEND_NULL_HANDLER,
                   38222:        ZEND_NULL_HANDLER,
                   38223:        ZEND_NULL_HANDLER,
                   38224:        ZEND_NULL_HANDLER,
                   38225:        ZEND_NULL_HANDLER,
                   38226:        ZEND_NULL_HANDLER,
                   38227:        ZEND_NULL_HANDLER,
1.1       misho    38228:        ZEND_NULL_HANDLER,
                   38229:        ZEND_NULL_HANDLER,
                   38230:        ZEND_NULL_HANDLER,
                   38231:        ZEND_NULL_HANDLER,
                   38232:        ZEND_NULL_HANDLER,
                   38233:        ZEND_NULL_HANDLER,
                   38234:        ZEND_NULL_HANDLER,
                   38235:        ZEND_NULL_HANDLER,
                   38236:        ZEND_NULL_HANDLER,
                   38237:        ZEND_NULL_HANDLER,
                   38238:        ZEND_SEND_VAR_SPEC_VAR_HANDLER,
                   38239:        ZEND_SEND_VAR_SPEC_VAR_HANDLER,
                   38240:        ZEND_SEND_VAR_SPEC_VAR_HANDLER,
                   38241:        ZEND_SEND_VAR_SPEC_VAR_HANDLER,
                   38242:        ZEND_SEND_VAR_SPEC_VAR_HANDLER,
                   38243:        ZEND_NULL_HANDLER,
                   38244:        ZEND_NULL_HANDLER,
                   38245:        ZEND_NULL_HANDLER,
                   38246:        ZEND_NULL_HANDLER,
                   38247:        ZEND_NULL_HANDLER,
                   38248:        ZEND_SEND_VAR_SPEC_CV_HANDLER,
                   38249:        ZEND_SEND_VAR_SPEC_CV_HANDLER,
                   38250:        ZEND_SEND_VAR_SPEC_CV_HANDLER,
                   38251:        ZEND_SEND_VAR_SPEC_CV_HANDLER,
                   38252:        ZEND_SEND_VAR_SPEC_CV_HANDLER,
                   38253:        ZEND_NULL_HANDLER,
                   38254:        ZEND_NULL_HANDLER,
                   38255:        ZEND_NULL_HANDLER,
                   38256:        ZEND_NULL_HANDLER,
                   38257:        ZEND_NULL_HANDLER,
                   38258:        ZEND_NULL_HANDLER,
                   38259:        ZEND_NULL_HANDLER,
                   38260:        ZEND_NULL_HANDLER,
                   38261:        ZEND_NULL_HANDLER,
                   38262:        ZEND_NULL_HANDLER,
                   38263:        ZEND_SEND_REF_SPEC_VAR_HANDLER,
                   38264:        ZEND_SEND_REF_SPEC_VAR_HANDLER,
                   38265:        ZEND_SEND_REF_SPEC_VAR_HANDLER,
                   38266:        ZEND_SEND_REF_SPEC_VAR_HANDLER,
                   38267:        ZEND_SEND_REF_SPEC_VAR_HANDLER,
                   38268:        ZEND_NULL_HANDLER,
                   38269:        ZEND_NULL_HANDLER,
                   38270:        ZEND_NULL_HANDLER,
                   38271:        ZEND_NULL_HANDLER,
                   38272:        ZEND_NULL_HANDLER,
                   38273:        ZEND_SEND_REF_SPEC_CV_HANDLER,
                   38274:        ZEND_SEND_REF_SPEC_CV_HANDLER,
                   38275:        ZEND_SEND_REF_SPEC_CV_HANDLER,
                   38276:        ZEND_SEND_REF_SPEC_CV_HANDLER,
                   38277:        ZEND_SEND_REF_SPEC_CV_HANDLER,
                   38278:        ZEND_NEW_SPEC_HANDLER,
                   38279:        ZEND_NEW_SPEC_HANDLER,
                   38280:        ZEND_NEW_SPEC_HANDLER,
                   38281:        ZEND_NEW_SPEC_HANDLER,
                   38282:        ZEND_NEW_SPEC_HANDLER,
                   38283:        ZEND_NEW_SPEC_HANDLER,
                   38284:        ZEND_NEW_SPEC_HANDLER,
                   38285:        ZEND_NEW_SPEC_HANDLER,
                   38286:        ZEND_NEW_SPEC_HANDLER,
                   38287:        ZEND_NEW_SPEC_HANDLER,
                   38288:        ZEND_NEW_SPEC_HANDLER,
                   38289:        ZEND_NEW_SPEC_HANDLER,
                   38290:        ZEND_NEW_SPEC_HANDLER,
                   38291:        ZEND_NEW_SPEC_HANDLER,
                   38292:        ZEND_NEW_SPEC_HANDLER,
                   38293:        ZEND_NEW_SPEC_HANDLER,
                   38294:        ZEND_NEW_SPEC_HANDLER,
                   38295:        ZEND_NEW_SPEC_HANDLER,
                   38296:        ZEND_NEW_SPEC_HANDLER,
                   38297:        ZEND_NEW_SPEC_HANDLER,
                   38298:        ZEND_NEW_SPEC_HANDLER,
                   38299:        ZEND_NEW_SPEC_HANDLER,
                   38300:        ZEND_NEW_SPEC_HANDLER,
                   38301:        ZEND_NEW_SPEC_HANDLER,
                   38302:        ZEND_NEW_SPEC_HANDLER,
                   38303:        ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38304:        ZEND_NULL_HANDLER,
                   38305:        ZEND_NULL_HANDLER,
                   38306:        ZEND_NULL_HANDLER,
                   38307:        ZEND_NULL_HANDLER,
                   38308:        ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38309:        ZEND_NULL_HANDLER,
                   38310:        ZEND_NULL_HANDLER,
                   38311:        ZEND_NULL_HANDLER,
                   38312:        ZEND_NULL_HANDLER,
                   38313:        ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38314:        ZEND_NULL_HANDLER,
                   38315:        ZEND_NULL_HANDLER,
                   38316:        ZEND_NULL_HANDLER,
                   38317:        ZEND_NULL_HANDLER,
                   38318:        ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38319:        ZEND_NULL_HANDLER,
                   38320:        ZEND_NULL_HANDLER,
                   38321:        ZEND_NULL_HANDLER,
                   38322:        ZEND_NULL_HANDLER,
                   38323:        ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
                   38324:        ZEND_NULL_HANDLER,
                   38325:        ZEND_NULL_HANDLER,
                   38326:        ZEND_NULL_HANDLER,
                   38327:        ZEND_NULL_HANDLER,
                   38328:        ZEND_NULL_HANDLER,
                   38329:        ZEND_NULL_HANDLER,
                   38330:        ZEND_NULL_HANDLER,
                   38331:        ZEND_NULL_HANDLER,
                   38332:        ZEND_NULL_HANDLER,
                   38333:        ZEND_FREE_SPEC_TMP_HANDLER,
                   38334:        ZEND_FREE_SPEC_TMP_HANDLER,
                   38335:        ZEND_FREE_SPEC_TMP_HANDLER,
                   38336:        ZEND_FREE_SPEC_TMP_HANDLER,
                   38337:        ZEND_FREE_SPEC_TMP_HANDLER,
1.1.1.2   misho    38338:        ZEND_FREE_SPEC_VAR_HANDLER,
                   38339:        ZEND_FREE_SPEC_VAR_HANDLER,
                   38340:        ZEND_FREE_SPEC_VAR_HANDLER,
                   38341:        ZEND_FREE_SPEC_VAR_HANDLER,
                   38342:        ZEND_FREE_SPEC_VAR_HANDLER,
1.1       misho    38343:        ZEND_NULL_HANDLER,
                   38344:        ZEND_NULL_HANDLER,
                   38345:        ZEND_NULL_HANDLER,
                   38346:        ZEND_NULL_HANDLER,
                   38347:        ZEND_NULL_HANDLER,
                   38348:        ZEND_NULL_HANDLER,
                   38349:        ZEND_NULL_HANDLER,
                   38350:        ZEND_NULL_HANDLER,
                   38351:        ZEND_NULL_HANDLER,
                   38352:        ZEND_NULL_HANDLER,
                   38353:        ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
                   38354:        ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER,
                   38355:        ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER,
                   38356:        ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
                   38357:        ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
                   38358:        ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
                   38359:        ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER,
                   38360:        ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER,
                   38361:        ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
                   38362:        ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
                   38363:        ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
                   38364:        ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER,
                   38365:        ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER,
                   38366:        ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
                   38367:        ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
                   38368:        ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
                   38369:        ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER,
                   38370:        ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER,
                   38371:        ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
                   38372:        ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
                   38373:        ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
                   38374:        ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER,
                   38375:        ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER,
                   38376:        ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
                   38377:        ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
                   38378:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
                   38379:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER,
                   38380:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER,
                   38381:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
                   38382:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
                   38383:        ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
                   38384:        ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER,
                   38385:        ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER,
                   38386:        ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
                   38387:        ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
                   38388:        ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
                   38389:        ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER,
                   38390:        ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER,
                   38391:        ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
                   38392:        ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
                   38393:        ZEND_NULL_HANDLER,
                   38394:        ZEND_NULL_HANDLER,
                   38395:        ZEND_NULL_HANDLER,
                   38396:        ZEND_NULL_HANDLER,
                   38397:        ZEND_NULL_HANDLER,
                   38398:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
                   38399:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER,
                   38400:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER,
                   38401:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
                   38402:        ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
                   38403:        ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
                   38404:        ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
                   38405:        ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
                   38406:        ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
                   38407:        ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
                   38408:        ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
                   38409:        ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
                   38410:        ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
                   38411:        ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
                   38412:        ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
                   38413:        ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
                   38414:        ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
                   38415:        ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
                   38416:        ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
                   38417:        ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
                   38418:        ZEND_NULL_HANDLER,
                   38419:        ZEND_NULL_HANDLER,
                   38420:        ZEND_NULL_HANDLER,
                   38421:        ZEND_NULL_HANDLER,
                   38422:        ZEND_NULL_HANDLER,
                   38423:        ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
                   38424:        ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
                   38425:        ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
                   38426:        ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
                   38427:        ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
1.1.1.2   misho    38428:        ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER,
                   38429:        ZEND_NULL_HANDLER,
                   38430:        ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER,
                   38431:        ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
                   38432:        ZEND_NULL_HANDLER,
                   38433:        ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER,
                   38434:        ZEND_NULL_HANDLER,
                   38435:        ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER,
                   38436:        ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER,
                   38437:        ZEND_NULL_HANDLER,
                   38438:        ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER,
                   38439:        ZEND_NULL_HANDLER,
                   38440:        ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER,
                   38441:        ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER,
                   38442:        ZEND_NULL_HANDLER,
1.1       misho    38443:        ZEND_NULL_HANDLER,
                   38444:        ZEND_NULL_HANDLER,
                   38445:        ZEND_NULL_HANDLER,
                   38446:        ZEND_NULL_HANDLER,
                   38447:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38448:        ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER,
                   38449:        ZEND_NULL_HANDLER,
                   38450:        ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER,
                   38451:        ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
                   38452:        ZEND_NULL_HANDLER,
1.1       misho    38453:        ZEND_NULL_HANDLER,
                   38454:        ZEND_NULL_HANDLER,
                   38455:        ZEND_NULL_HANDLER,
                   38456:        ZEND_NULL_HANDLER,
                   38457:        ZEND_NULL_HANDLER,
                   38458:        ZEND_NULL_HANDLER,
                   38459:        ZEND_NULL_HANDLER,
                   38460:        ZEND_NULL_HANDLER,
                   38461:        ZEND_NULL_HANDLER,
                   38462:        ZEND_NULL_HANDLER,
                   38463:        ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
                   38464:        ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER,
                   38465:        ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER,
                   38466:        ZEND_NULL_HANDLER,
                   38467:        ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
                   38468:        ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER,
                   38469:        ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER,
                   38470:        ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER,
                   38471:        ZEND_NULL_HANDLER,
                   38472:        ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER,
                   38473:        ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
                   38474:        ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER,
                   38475:        ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER,
                   38476:        ZEND_NULL_HANDLER,
                   38477:        ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
                   38478:        ZEND_NULL_HANDLER,
                   38479:        ZEND_NULL_HANDLER,
                   38480:        ZEND_NULL_HANDLER,
                   38481:        ZEND_NULL_HANDLER,
                   38482:        ZEND_NULL_HANDLER,
                   38483:        ZEND_NULL_HANDLER,
                   38484:        ZEND_NULL_HANDLER,
                   38485:        ZEND_NULL_HANDLER,
                   38486:        ZEND_NULL_HANDLER,
                   38487:        ZEND_NULL_HANDLER,
                   38488:        ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
                   38489:        ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER,
                   38490:        ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER,
                   38491:        ZEND_NULL_HANDLER,
                   38492:        ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
                   38493:        ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   38494:        ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   38495:        ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   38496:        ZEND_NULL_HANDLER,
                   38497:        ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
                   38498:        ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
                   38499:        ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER,
                   38500:        ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER,
                   38501:        ZEND_NULL_HANDLER,
                   38502:        ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
                   38503:        ZEND_FE_RESET_SPEC_CONST_HANDLER,
                   38504:        ZEND_FE_RESET_SPEC_CONST_HANDLER,
                   38505:        ZEND_FE_RESET_SPEC_CONST_HANDLER,
                   38506:        ZEND_FE_RESET_SPEC_CONST_HANDLER,
                   38507:        ZEND_FE_RESET_SPEC_CONST_HANDLER,
                   38508:        ZEND_FE_RESET_SPEC_TMP_HANDLER,
                   38509:        ZEND_FE_RESET_SPEC_TMP_HANDLER,
                   38510:        ZEND_FE_RESET_SPEC_TMP_HANDLER,
                   38511:        ZEND_FE_RESET_SPEC_TMP_HANDLER,
                   38512:        ZEND_FE_RESET_SPEC_TMP_HANDLER,
                   38513:        ZEND_FE_RESET_SPEC_VAR_HANDLER,
                   38514:        ZEND_FE_RESET_SPEC_VAR_HANDLER,
                   38515:        ZEND_FE_RESET_SPEC_VAR_HANDLER,
                   38516:        ZEND_FE_RESET_SPEC_VAR_HANDLER,
                   38517:        ZEND_FE_RESET_SPEC_VAR_HANDLER,
                   38518:        ZEND_NULL_HANDLER,
                   38519:        ZEND_NULL_HANDLER,
                   38520:        ZEND_NULL_HANDLER,
                   38521:        ZEND_NULL_HANDLER,
                   38522:        ZEND_NULL_HANDLER,
                   38523:        ZEND_FE_RESET_SPEC_CV_HANDLER,
                   38524:        ZEND_FE_RESET_SPEC_CV_HANDLER,
                   38525:        ZEND_FE_RESET_SPEC_CV_HANDLER,
                   38526:        ZEND_FE_RESET_SPEC_CV_HANDLER,
                   38527:        ZEND_FE_RESET_SPEC_CV_HANDLER,
                   38528:        ZEND_NULL_HANDLER,
                   38529:        ZEND_NULL_HANDLER,
                   38530:        ZEND_NULL_HANDLER,
                   38531:        ZEND_NULL_HANDLER,
                   38532:        ZEND_NULL_HANDLER,
                   38533:        ZEND_NULL_HANDLER,
                   38534:        ZEND_NULL_HANDLER,
                   38535:        ZEND_NULL_HANDLER,
                   38536:        ZEND_NULL_HANDLER,
                   38537:        ZEND_NULL_HANDLER,
                   38538:        ZEND_FE_FETCH_SPEC_VAR_HANDLER,
                   38539:        ZEND_FE_FETCH_SPEC_VAR_HANDLER,
                   38540:        ZEND_FE_FETCH_SPEC_VAR_HANDLER,
                   38541:        ZEND_FE_FETCH_SPEC_VAR_HANDLER,
                   38542:        ZEND_FE_FETCH_SPEC_VAR_HANDLER,
                   38543:        ZEND_NULL_HANDLER,
                   38544:        ZEND_NULL_HANDLER,
                   38545:        ZEND_NULL_HANDLER,
                   38546:        ZEND_NULL_HANDLER,
                   38547:        ZEND_NULL_HANDLER,
                   38548:        ZEND_NULL_HANDLER,
                   38549:        ZEND_NULL_HANDLER,
                   38550:        ZEND_NULL_HANDLER,
                   38551:        ZEND_NULL_HANDLER,
                   38552:        ZEND_NULL_HANDLER,
                   38553:        ZEND_EXIT_SPEC_CONST_HANDLER,
                   38554:        ZEND_EXIT_SPEC_CONST_HANDLER,
                   38555:        ZEND_EXIT_SPEC_CONST_HANDLER,
                   38556:        ZEND_EXIT_SPEC_CONST_HANDLER,
                   38557:        ZEND_EXIT_SPEC_CONST_HANDLER,
                   38558:        ZEND_EXIT_SPEC_TMP_HANDLER,
                   38559:        ZEND_EXIT_SPEC_TMP_HANDLER,
                   38560:        ZEND_EXIT_SPEC_TMP_HANDLER,
                   38561:        ZEND_EXIT_SPEC_TMP_HANDLER,
                   38562:        ZEND_EXIT_SPEC_TMP_HANDLER,
                   38563:        ZEND_EXIT_SPEC_VAR_HANDLER,
                   38564:        ZEND_EXIT_SPEC_VAR_HANDLER,
                   38565:        ZEND_EXIT_SPEC_VAR_HANDLER,
                   38566:        ZEND_EXIT_SPEC_VAR_HANDLER,
                   38567:        ZEND_EXIT_SPEC_VAR_HANDLER,
                   38568:        ZEND_EXIT_SPEC_UNUSED_HANDLER,
                   38569:        ZEND_EXIT_SPEC_UNUSED_HANDLER,
                   38570:        ZEND_EXIT_SPEC_UNUSED_HANDLER,
                   38571:        ZEND_EXIT_SPEC_UNUSED_HANDLER,
                   38572:        ZEND_EXIT_SPEC_UNUSED_HANDLER,
                   38573:        ZEND_EXIT_SPEC_CV_HANDLER,
                   38574:        ZEND_EXIT_SPEC_CV_HANDLER,
                   38575:        ZEND_EXIT_SPEC_CV_HANDLER,
                   38576:        ZEND_EXIT_SPEC_CV_HANDLER,
                   38577:        ZEND_EXIT_SPEC_CV_HANDLER,
1.1.1.2   misho    38578:        ZEND_FETCH_R_SPEC_CONST_CONST_HANDLER,
                   38579:        ZEND_NULL_HANDLER,
                   38580:        ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER,
                   38581:        ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
                   38582:        ZEND_NULL_HANDLER,
                   38583:        ZEND_FETCH_R_SPEC_TMP_CONST_HANDLER,
                   38584:        ZEND_NULL_HANDLER,
                   38585:        ZEND_FETCH_R_SPEC_TMP_VAR_HANDLER,
                   38586:        ZEND_FETCH_R_SPEC_TMP_UNUSED_HANDLER,
                   38587:        ZEND_NULL_HANDLER,
                   38588:        ZEND_FETCH_R_SPEC_VAR_CONST_HANDLER,
                   38589:        ZEND_NULL_HANDLER,
                   38590:        ZEND_FETCH_R_SPEC_VAR_VAR_HANDLER,
                   38591:        ZEND_FETCH_R_SPEC_VAR_UNUSED_HANDLER,
                   38592:        ZEND_NULL_HANDLER,
1.1       misho    38593:        ZEND_NULL_HANDLER,
                   38594:        ZEND_NULL_HANDLER,
                   38595:        ZEND_NULL_HANDLER,
                   38596:        ZEND_NULL_HANDLER,
                   38597:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38598:        ZEND_FETCH_R_SPEC_CV_CONST_HANDLER,
                   38599:        ZEND_NULL_HANDLER,
                   38600:        ZEND_FETCH_R_SPEC_CV_VAR_HANDLER,
                   38601:        ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
                   38602:        ZEND_NULL_HANDLER,
1.1       misho    38603:        ZEND_NULL_HANDLER,
                   38604:        ZEND_NULL_HANDLER,
                   38605:        ZEND_NULL_HANDLER,
                   38606:        ZEND_NULL_HANDLER,
                   38607:        ZEND_NULL_HANDLER,
                   38608:        ZEND_NULL_HANDLER,
                   38609:        ZEND_NULL_HANDLER,
                   38610:        ZEND_NULL_HANDLER,
                   38611:        ZEND_NULL_HANDLER,
                   38612:        ZEND_NULL_HANDLER,
                   38613:        ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER,
                   38614:        ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER,
                   38615:        ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER,
                   38616:        ZEND_NULL_HANDLER,
                   38617:        ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER,
                   38618:        ZEND_NULL_HANDLER,
                   38619:        ZEND_NULL_HANDLER,
                   38620:        ZEND_NULL_HANDLER,
                   38621:        ZEND_NULL_HANDLER,
                   38622:        ZEND_NULL_HANDLER,
                   38623:        ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
                   38624:        ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER,
                   38625:        ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER,
                   38626:        ZEND_NULL_HANDLER,
                   38627:        ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
                   38628:        ZEND_NULL_HANDLER,
                   38629:        ZEND_NULL_HANDLER,
                   38630:        ZEND_NULL_HANDLER,
                   38631:        ZEND_NULL_HANDLER,
                   38632:        ZEND_NULL_HANDLER,
                   38633:        ZEND_NULL_HANDLER,
                   38634:        ZEND_NULL_HANDLER,
                   38635:        ZEND_NULL_HANDLER,
                   38636:        ZEND_NULL_HANDLER,
                   38637:        ZEND_NULL_HANDLER,
                   38638:        ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER,
                   38639:        ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER,
                   38640:        ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER,
                   38641:        ZEND_NULL_HANDLER,
                   38642:        ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER,
                   38643:        ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
                   38644:        ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER,
                   38645:        ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER,
                   38646:        ZEND_NULL_HANDLER,
                   38647:        ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
                   38648:        ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
                   38649:        ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER,
                   38650:        ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER,
                   38651:        ZEND_NULL_HANDLER,
                   38652:        ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
1.1.1.2   misho    38653:        ZEND_FETCH_W_SPEC_CONST_CONST_HANDLER,
                   38654:        ZEND_NULL_HANDLER,
                   38655:        ZEND_FETCH_W_SPEC_CONST_VAR_HANDLER,
                   38656:        ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
                   38657:        ZEND_NULL_HANDLER,
                   38658:        ZEND_FETCH_W_SPEC_TMP_CONST_HANDLER,
                   38659:        ZEND_NULL_HANDLER,
                   38660:        ZEND_FETCH_W_SPEC_TMP_VAR_HANDLER,
                   38661:        ZEND_FETCH_W_SPEC_TMP_UNUSED_HANDLER,
                   38662:        ZEND_NULL_HANDLER,
                   38663:        ZEND_FETCH_W_SPEC_VAR_CONST_HANDLER,
                   38664:        ZEND_NULL_HANDLER,
                   38665:        ZEND_FETCH_W_SPEC_VAR_VAR_HANDLER,
                   38666:        ZEND_FETCH_W_SPEC_VAR_UNUSED_HANDLER,
                   38667:        ZEND_NULL_HANDLER,
1.1       misho    38668:        ZEND_NULL_HANDLER,
                   38669:        ZEND_NULL_HANDLER,
                   38670:        ZEND_NULL_HANDLER,
                   38671:        ZEND_NULL_HANDLER,
                   38672:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38673:        ZEND_FETCH_W_SPEC_CV_CONST_HANDLER,
                   38674:        ZEND_NULL_HANDLER,
                   38675:        ZEND_FETCH_W_SPEC_CV_VAR_HANDLER,
                   38676:        ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
                   38677:        ZEND_NULL_HANDLER,
1.1       misho    38678:        ZEND_NULL_HANDLER,
                   38679:        ZEND_NULL_HANDLER,
                   38680:        ZEND_NULL_HANDLER,
                   38681:        ZEND_NULL_HANDLER,
                   38682:        ZEND_NULL_HANDLER,
                   38683:        ZEND_NULL_HANDLER,
                   38684:        ZEND_NULL_HANDLER,
                   38685:        ZEND_NULL_HANDLER,
                   38686:        ZEND_NULL_HANDLER,
                   38687:        ZEND_NULL_HANDLER,
                   38688:        ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
                   38689:        ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER,
                   38690:        ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER,
                   38691:        ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
                   38692:        ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
                   38693:        ZEND_NULL_HANDLER,
                   38694:        ZEND_NULL_HANDLER,
                   38695:        ZEND_NULL_HANDLER,
                   38696:        ZEND_NULL_HANDLER,
                   38697:        ZEND_NULL_HANDLER,
                   38698:        ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
                   38699:        ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER,
                   38700:        ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER,
                   38701:        ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
                   38702:        ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
                   38703:        ZEND_NULL_HANDLER,
                   38704:        ZEND_NULL_HANDLER,
                   38705:        ZEND_NULL_HANDLER,
                   38706:        ZEND_NULL_HANDLER,
                   38707:        ZEND_NULL_HANDLER,
                   38708:        ZEND_NULL_HANDLER,
                   38709:        ZEND_NULL_HANDLER,
                   38710:        ZEND_NULL_HANDLER,
                   38711:        ZEND_NULL_HANDLER,
                   38712:        ZEND_NULL_HANDLER,
                   38713:        ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
                   38714:        ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER,
                   38715:        ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER,
                   38716:        ZEND_NULL_HANDLER,
                   38717:        ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
                   38718:        ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
                   38719:        ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER,
                   38720:        ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER,
                   38721:        ZEND_NULL_HANDLER,
                   38722:        ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
                   38723:        ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
                   38724:        ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER,
                   38725:        ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER,
                   38726:        ZEND_NULL_HANDLER,
                   38727:        ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
1.1.1.2   misho    38728:        ZEND_FETCH_RW_SPEC_CONST_CONST_HANDLER,
                   38729:        ZEND_NULL_HANDLER,
                   38730:        ZEND_FETCH_RW_SPEC_CONST_VAR_HANDLER,
                   38731:        ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
                   38732:        ZEND_NULL_HANDLER,
                   38733:        ZEND_FETCH_RW_SPEC_TMP_CONST_HANDLER,
                   38734:        ZEND_NULL_HANDLER,
                   38735:        ZEND_FETCH_RW_SPEC_TMP_VAR_HANDLER,
                   38736:        ZEND_FETCH_RW_SPEC_TMP_UNUSED_HANDLER,
                   38737:        ZEND_NULL_HANDLER,
                   38738:        ZEND_FETCH_RW_SPEC_VAR_CONST_HANDLER,
                   38739:        ZEND_NULL_HANDLER,
                   38740:        ZEND_FETCH_RW_SPEC_VAR_VAR_HANDLER,
                   38741:        ZEND_FETCH_RW_SPEC_VAR_UNUSED_HANDLER,
                   38742:        ZEND_NULL_HANDLER,
1.1       misho    38743:        ZEND_NULL_HANDLER,
                   38744:        ZEND_NULL_HANDLER,
                   38745:        ZEND_NULL_HANDLER,
                   38746:        ZEND_NULL_HANDLER,
                   38747:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38748:        ZEND_FETCH_RW_SPEC_CV_CONST_HANDLER,
                   38749:        ZEND_NULL_HANDLER,
                   38750:        ZEND_FETCH_RW_SPEC_CV_VAR_HANDLER,
                   38751:        ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
                   38752:        ZEND_NULL_HANDLER,
1.1       misho    38753:        ZEND_NULL_HANDLER,
                   38754:        ZEND_NULL_HANDLER,
                   38755:        ZEND_NULL_HANDLER,
                   38756:        ZEND_NULL_HANDLER,
                   38757:        ZEND_NULL_HANDLER,
                   38758:        ZEND_NULL_HANDLER,
                   38759:        ZEND_NULL_HANDLER,
                   38760:        ZEND_NULL_HANDLER,
                   38761:        ZEND_NULL_HANDLER,
                   38762:        ZEND_NULL_HANDLER,
                   38763:        ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
                   38764:        ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER,
                   38765:        ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER,
                   38766:        ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
                   38767:        ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
                   38768:        ZEND_NULL_HANDLER,
                   38769:        ZEND_NULL_HANDLER,
                   38770:        ZEND_NULL_HANDLER,
                   38771:        ZEND_NULL_HANDLER,
                   38772:        ZEND_NULL_HANDLER,
                   38773:        ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
                   38774:        ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER,
                   38775:        ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER,
                   38776:        ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
                   38777:        ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
                   38778:        ZEND_NULL_HANDLER,
                   38779:        ZEND_NULL_HANDLER,
                   38780:        ZEND_NULL_HANDLER,
                   38781:        ZEND_NULL_HANDLER,
                   38782:        ZEND_NULL_HANDLER,
                   38783:        ZEND_NULL_HANDLER,
                   38784:        ZEND_NULL_HANDLER,
                   38785:        ZEND_NULL_HANDLER,
                   38786:        ZEND_NULL_HANDLER,
                   38787:        ZEND_NULL_HANDLER,
                   38788:        ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
                   38789:        ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER,
                   38790:        ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER,
                   38791:        ZEND_NULL_HANDLER,
                   38792:        ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
                   38793:        ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
                   38794:        ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER,
                   38795:        ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER,
                   38796:        ZEND_NULL_HANDLER,
                   38797:        ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
                   38798:        ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
                   38799:        ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER,
                   38800:        ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER,
                   38801:        ZEND_NULL_HANDLER,
                   38802:        ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
1.1.1.2   misho    38803:        ZEND_FETCH_IS_SPEC_CONST_CONST_HANDLER,
                   38804:        ZEND_NULL_HANDLER,
                   38805:        ZEND_FETCH_IS_SPEC_CONST_VAR_HANDLER,
                   38806:        ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
                   38807:        ZEND_NULL_HANDLER,
                   38808:        ZEND_FETCH_IS_SPEC_TMP_CONST_HANDLER,
                   38809:        ZEND_NULL_HANDLER,
                   38810:        ZEND_FETCH_IS_SPEC_TMP_VAR_HANDLER,
                   38811:        ZEND_FETCH_IS_SPEC_TMP_UNUSED_HANDLER,
                   38812:        ZEND_NULL_HANDLER,
                   38813:        ZEND_FETCH_IS_SPEC_VAR_CONST_HANDLER,
                   38814:        ZEND_NULL_HANDLER,
                   38815:        ZEND_FETCH_IS_SPEC_VAR_VAR_HANDLER,
                   38816:        ZEND_FETCH_IS_SPEC_VAR_UNUSED_HANDLER,
                   38817:        ZEND_NULL_HANDLER,
1.1       misho    38818:        ZEND_NULL_HANDLER,
                   38819:        ZEND_NULL_HANDLER,
                   38820:        ZEND_NULL_HANDLER,
                   38821:        ZEND_NULL_HANDLER,
                   38822:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38823:        ZEND_FETCH_IS_SPEC_CV_CONST_HANDLER,
                   38824:        ZEND_NULL_HANDLER,
                   38825:        ZEND_FETCH_IS_SPEC_CV_VAR_HANDLER,
                   38826:        ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
                   38827:        ZEND_NULL_HANDLER,
1.1       misho    38828:        ZEND_NULL_HANDLER,
                   38829:        ZEND_NULL_HANDLER,
                   38830:        ZEND_NULL_HANDLER,
                   38831:        ZEND_NULL_HANDLER,
                   38832:        ZEND_NULL_HANDLER,
                   38833:        ZEND_NULL_HANDLER,
                   38834:        ZEND_NULL_HANDLER,
                   38835:        ZEND_NULL_HANDLER,
                   38836:        ZEND_NULL_HANDLER,
                   38837:        ZEND_NULL_HANDLER,
                   38838:        ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER,
                   38839:        ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER,
                   38840:        ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER,
                   38841:        ZEND_NULL_HANDLER,
                   38842:        ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER,
                   38843:        ZEND_NULL_HANDLER,
                   38844:        ZEND_NULL_HANDLER,
                   38845:        ZEND_NULL_HANDLER,
                   38846:        ZEND_NULL_HANDLER,
                   38847:        ZEND_NULL_HANDLER,
                   38848:        ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
                   38849:        ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER,
                   38850:        ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER,
                   38851:        ZEND_NULL_HANDLER,
                   38852:        ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
                   38853:        ZEND_NULL_HANDLER,
                   38854:        ZEND_NULL_HANDLER,
                   38855:        ZEND_NULL_HANDLER,
                   38856:        ZEND_NULL_HANDLER,
                   38857:        ZEND_NULL_HANDLER,
                   38858:        ZEND_NULL_HANDLER,
                   38859:        ZEND_NULL_HANDLER,
                   38860:        ZEND_NULL_HANDLER,
                   38861:        ZEND_NULL_HANDLER,
                   38862:        ZEND_NULL_HANDLER,
                   38863:        ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER,
                   38864:        ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER,
                   38865:        ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER,
                   38866:        ZEND_NULL_HANDLER,
                   38867:        ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER,
                   38868:        ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
                   38869:        ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER,
                   38870:        ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER,
                   38871:        ZEND_NULL_HANDLER,
                   38872:        ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
                   38873:        ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
                   38874:        ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER,
                   38875:        ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER,
                   38876:        ZEND_NULL_HANDLER,
                   38877:        ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
1.1.1.2   misho    38878:        ZEND_FETCH_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
                   38879:        ZEND_NULL_HANDLER,
                   38880:        ZEND_FETCH_FUNC_ARG_SPEC_CONST_VAR_HANDLER,
                   38881:        ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
                   38882:        ZEND_NULL_HANDLER,
                   38883:        ZEND_FETCH_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
                   38884:        ZEND_NULL_HANDLER,
                   38885:        ZEND_FETCH_FUNC_ARG_SPEC_TMP_VAR_HANDLER,
                   38886:        ZEND_FETCH_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
                   38887:        ZEND_NULL_HANDLER,
                   38888:        ZEND_FETCH_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
                   38889:        ZEND_NULL_HANDLER,
                   38890:        ZEND_FETCH_FUNC_ARG_SPEC_VAR_VAR_HANDLER,
                   38891:        ZEND_FETCH_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
                   38892:        ZEND_NULL_HANDLER,
1.1       misho    38893:        ZEND_NULL_HANDLER,
                   38894:        ZEND_NULL_HANDLER,
                   38895:        ZEND_NULL_HANDLER,
                   38896:        ZEND_NULL_HANDLER,
                   38897:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38898:        ZEND_FETCH_FUNC_ARG_SPEC_CV_CONST_HANDLER,
                   38899:        ZEND_NULL_HANDLER,
                   38900:        ZEND_FETCH_FUNC_ARG_SPEC_CV_VAR_HANDLER,
                   38901:        ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
                   38902:        ZEND_NULL_HANDLER,
1.1       misho    38903:        ZEND_NULL_HANDLER,
                   38904:        ZEND_NULL_HANDLER,
                   38905:        ZEND_NULL_HANDLER,
                   38906:        ZEND_NULL_HANDLER,
                   38907:        ZEND_NULL_HANDLER,
                   38908:        ZEND_NULL_HANDLER,
                   38909:        ZEND_NULL_HANDLER,
                   38910:        ZEND_NULL_HANDLER,
                   38911:        ZEND_NULL_HANDLER,
                   38912:        ZEND_NULL_HANDLER,
                   38913:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
                   38914:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER,
                   38915:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER,
                   38916:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
                   38917:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
                   38918:        ZEND_NULL_HANDLER,
                   38919:        ZEND_NULL_HANDLER,
                   38920:        ZEND_NULL_HANDLER,
                   38921:        ZEND_NULL_HANDLER,
                   38922:        ZEND_NULL_HANDLER,
                   38923:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
                   38924:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER,
                   38925:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER,
                   38926:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
                   38927:        ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
                   38928:        ZEND_NULL_HANDLER,
                   38929:        ZEND_NULL_HANDLER,
                   38930:        ZEND_NULL_HANDLER,
                   38931:        ZEND_NULL_HANDLER,
                   38932:        ZEND_NULL_HANDLER,
                   38933:        ZEND_NULL_HANDLER,
                   38934:        ZEND_NULL_HANDLER,
                   38935:        ZEND_NULL_HANDLER,
                   38936:        ZEND_NULL_HANDLER,
                   38937:        ZEND_NULL_HANDLER,
                   38938:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
                   38939:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER,
                   38940:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER,
                   38941:        ZEND_NULL_HANDLER,
                   38942:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
                   38943:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
                   38944:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER,
                   38945:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER,
                   38946:        ZEND_NULL_HANDLER,
                   38947:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
                   38948:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
                   38949:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER,
                   38950:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER,
                   38951:        ZEND_NULL_HANDLER,
                   38952:        ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
1.1.1.2   misho    38953:        ZEND_FETCH_UNSET_SPEC_CONST_CONST_HANDLER,
                   38954:        ZEND_NULL_HANDLER,
                   38955:        ZEND_FETCH_UNSET_SPEC_CONST_VAR_HANDLER,
                   38956:        ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
                   38957:        ZEND_NULL_HANDLER,
                   38958:        ZEND_FETCH_UNSET_SPEC_TMP_CONST_HANDLER,
                   38959:        ZEND_NULL_HANDLER,
                   38960:        ZEND_FETCH_UNSET_SPEC_TMP_VAR_HANDLER,
                   38961:        ZEND_FETCH_UNSET_SPEC_TMP_UNUSED_HANDLER,
                   38962:        ZEND_NULL_HANDLER,
                   38963:        ZEND_FETCH_UNSET_SPEC_VAR_CONST_HANDLER,
                   38964:        ZEND_NULL_HANDLER,
                   38965:        ZEND_FETCH_UNSET_SPEC_VAR_VAR_HANDLER,
                   38966:        ZEND_FETCH_UNSET_SPEC_VAR_UNUSED_HANDLER,
                   38967:        ZEND_NULL_HANDLER,
1.1       misho    38968:        ZEND_NULL_HANDLER,
                   38969:        ZEND_NULL_HANDLER,
                   38970:        ZEND_NULL_HANDLER,
                   38971:        ZEND_NULL_HANDLER,
                   38972:        ZEND_NULL_HANDLER,
1.1.1.2   misho    38973:        ZEND_FETCH_UNSET_SPEC_CV_CONST_HANDLER,
                   38974:        ZEND_NULL_HANDLER,
                   38975:        ZEND_FETCH_UNSET_SPEC_CV_VAR_HANDLER,
                   38976:        ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
                   38977:        ZEND_NULL_HANDLER,
1.1       misho    38978:        ZEND_NULL_HANDLER,
                   38979:        ZEND_NULL_HANDLER,
                   38980:        ZEND_NULL_HANDLER,
                   38981:        ZEND_NULL_HANDLER,
                   38982:        ZEND_NULL_HANDLER,
                   38983:        ZEND_NULL_HANDLER,
                   38984:        ZEND_NULL_HANDLER,
                   38985:        ZEND_NULL_HANDLER,
                   38986:        ZEND_NULL_HANDLER,
                   38987:        ZEND_NULL_HANDLER,
                   38988:        ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
                   38989:        ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER,
                   38990:        ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER,
                   38991:        ZEND_NULL_HANDLER,
                   38992:        ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
                   38993:        ZEND_NULL_HANDLER,
                   38994:        ZEND_NULL_HANDLER,
                   38995:        ZEND_NULL_HANDLER,
                   38996:        ZEND_NULL_HANDLER,
                   38997:        ZEND_NULL_HANDLER,
                   38998:        ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
                   38999:        ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER,
                   39000:        ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER,
                   39001:        ZEND_NULL_HANDLER,
                   39002:        ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
                   39003:        ZEND_NULL_HANDLER,
                   39004:        ZEND_NULL_HANDLER,
                   39005:        ZEND_NULL_HANDLER,
                   39006:        ZEND_NULL_HANDLER,
                   39007:        ZEND_NULL_HANDLER,
                   39008:        ZEND_NULL_HANDLER,
                   39009:        ZEND_NULL_HANDLER,
                   39010:        ZEND_NULL_HANDLER,
                   39011:        ZEND_NULL_HANDLER,
                   39012:        ZEND_NULL_HANDLER,
                   39013:        ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
                   39014:        ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER,
                   39015:        ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER,
                   39016:        ZEND_NULL_HANDLER,
                   39017:        ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
                   39018:        ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
                   39019:        ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER,
                   39020:        ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER,
                   39021:        ZEND_NULL_HANDLER,
                   39022:        ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
                   39023:        ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
                   39024:        ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER,
                   39025:        ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER,
                   39026:        ZEND_NULL_HANDLER,
                   39027:        ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
                   39028:        ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER,
                   39029:        ZEND_NULL_HANDLER,
                   39030:        ZEND_NULL_HANDLER,
                   39031:        ZEND_NULL_HANDLER,
                   39032:        ZEND_NULL_HANDLER,
                   39033:        ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER,
                   39034:        ZEND_NULL_HANDLER,
                   39035:        ZEND_NULL_HANDLER,
                   39036:        ZEND_NULL_HANDLER,
                   39037:        ZEND_NULL_HANDLER,
                   39038:        ZEND_NULL_HANDLER,
                   39039:        ZEND_NULL_HANDLER,
                   39040:        ZEND_NULL_HANDLER,
                   39041:        ZEND_NULL_HANDLER,
                   39042:        ZEND_NULL_HANDLER,
                   39043:        ZEND_NULL_HANDLER,
                   39044:        ZEND_NULL_HANDLER,
                   39045:        ZEND_NULL_HANDLER,
                   39046:        ZEND_NULL_HANDLER,
                   39047:        ZEND_NULL_HANDLER,
                   39048:        ZEND_NULL_HANDLER,
                   39049:        ZEND_NULL_HANDLER,
                   39050:        ZEND_NULL_HANDLER,
                   39051:        ZEND_NULL_HANDLER,
                   39052:        ZEND_NULL_HANDLER,
                   39053:        ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER,
                   39054:        ZEND_NULL_HANDLER,
                   39055:        ZEND_NULL_HANDLER,
                   39056:        ZEND_NULL_HANDLER,
                   39057:        ZEND_NULL_HANDLER,
                   39058:        ZEND_NULL_HANDLER,
                   39059:        ZEND_NULL_HANDLER,
                   39060:        ZEND_NULL_HANDLER,
                   39061:        ZEND_NULL_HANDLER,
                   39062:        ZEND_NULL_HANDLER,
                   39063:        ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER,
                   39064:        ZEND_NULL_HANDLER,
                   39065:        ZEND_NULL_HANDLER,
                   39066:        ZEND_NULL_HANDLER,
                   39067:        ZEND_NULL_HANDLER,
                   39068:        ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
                   39069:        ZEND_NULL_HANDLER,
                   39070:        ZEND_NULL_HANDLER,
                   39071:        ZEND_NULL_HANDLER,
                   39072:        ZEND_NULL_HANDLER,
                   39073:        ZEND_NULL_HANDLER,
                   39074:        ZEND_NULL_HANDLER,
                   39075:        ZEND_NULL_HANDLER,
                   39076:        ZEND_NULL_HANDLER,
                   39077:        ZEND_NULL_HANDLER,
                   39078:        ZEND_GOTO_SPEC_CONST_HANDLER,
                   39079:        ZEND_NULL_HANDLER,
                   39080:        ZEND_NULL_HANDLER,
                   39081:        ZEND_NULL_HANDLER,
                   39082:        ZEND_NULL_HANDLER,
                   39083:        ZEND_GOTO_SPEC_CONST_HANDLER,
                   39084:        ZEND_NULL_HANDLER,
                   39085:        ZEND_NULL_HANDLER,
                   39086:        ZEND_NULL_HANDLER,
                   39087:        ZEND_NULL_HANDLER,
                   39088:        ZEND_GOTO_SPEC_CONST_HANDLER,
                   39089:        ZEND_NULL_HANDLER,
                   39090:        ZEND_NULL_HANDLER,
                   39091:        ZEND_NULL_HANDLER,
                   39092:        ZEND_NULL_HANDLER,
                   39093:        ZEND_GOTO_SPEC_CONST_HANDLER,
                   39094:        ZEND_NULL_HANDLER,
                   39095:        ZEND_NULL_HANDLER,
                   39096:        ZEND_NULL_HANDLER,
                   39097:        ZEND_NULL_HANDLER,
                   39098:        ZEND_GOTO_SPEC_CONST_HANDLER,
                   39099:        ZEND_NULL_HANDLER,
                   39100:        ZEND_NULL_HANDLER,
                   39101:        ZEND_NULL_HANDLER,
                   39102:        ZEND_NULL_HANDLER,
                   39103:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39104:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39105:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39106:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39107:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39108:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39109:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39110:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39111:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39112:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39113:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39114:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39115:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39116:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39117:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39118:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39119:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39120:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39121:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39122:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39123:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39124:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39125:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39126:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39127:        ZEND_EXT_STMT_SPEC_HANDLER,
                   39128:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39129:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39130:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39131:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39132:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39133:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39134:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39135:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39136:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39137:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39138:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39139:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39140:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39141:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39142:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39143:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39144:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39145:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39146:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39147:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39148:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39149:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39150:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39151:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39152:        ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
                   39153:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39154:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39155:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39156:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39157:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39158:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39159:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39160:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39161:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39162:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39163:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39164:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39165:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39166:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39167:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39168:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39169:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39170:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39171:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39172:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39173:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39174:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39175:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39176:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39177:        ZEND_EXT_FCALL_END_SPEC_HANDLER,
                   39178:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39179:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39180:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39181:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39182:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39183:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39184:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39185:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39186:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39187:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39188:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39189:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39190:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39191:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39192:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39193:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39194:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39195:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39196:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39197:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39198:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39199:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39200:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39201:        ZEND_EXT_NOP_SPEC_HANDLER,
                   39202:        ZEND_EXT_NOP_SPEC_HANDLER,
1.1.1.2   misho    39203:        ZEND_TICKS_SPEC_HANDLER,
                   39204:        ZEND_TICKS_SPEC_HANDLER,
                   39205:        ZEND_TICKS_SPEC_HANDLER,
                   39206:        ZEND_TICKS_SPEC_HANDLER,
                   39207:        ZEND_TICKS_SPEC_HANDLER,
                   39208:        ZEND_TICKS_SPEC_HANDLER,
                   39209:        ZEND_TICKS_SPEC_HANDLER,
                   39210:        ZEND_TICKS_SPEC_HANDLER,
                   39211:        ZEND_TICKS_SPEC_HANDLER,
                   39212:        ZEND_TICKS_SPEC_HANDLER,
                   39213:        ZEND_TICKS_SPEC_HANDLER,
                   39214:        ZEND_TICKS_SPEC_HANDLER,
                   39215:        ZEND_TICKS_SPEC_HANDLER,
                   39216:        ZEND_TICKS_SPEC_HANDLER,
                   39217:        ZEND_TICKS_SPEC_HANDLER,
                   39218:        ZEND_TICKS_SPEC_HANDLER,
                   39219:        ZEND_TICKS_SPEC_HANDLER,
                   39220:        ZEND_TICKS_SPEC_HANDLER,
                   39221:        ZEND_TICKS_SPEC_HANDLER,
                   39222:        ZEND_TICKS_SPEC_HANDLER,
                   39223:        ZEND_TICKS_SPEC_HANDLER,
                   39224:        ZEND_TICKS_SPEC_HANDLER,
                   39225:        ZEND_TICKS_SPEC_HANDLER,
                   39226:        ZEND_TICKS_SPEC_HANDLER,
                   39227:        ZEND_TICKS_SPEC_HANDLER,
1.1       misho    39228:        ZEND_NULL_HANDLER,
                   39229:        ZEND_NULL_HANDLER,
                   39230:        ZEND_NULL_HANDLER,
                   39231:        ZEND_NULL_HANDLER,
                   39232:        ZEND_NULL_HANDLER,
                   39233:        ZEND_NULL_HANDLER,
                   39234:        ZEND_NULL_HANDLER,
                   39235:        ZEND_NULL_HANDLER,
                   39236:        ZEND_NULL_HANDLER,
                   39237:        ZEND_NULL_HANDLER,
                   39238:        ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
                   39239:        ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
                   39240:        ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
                   39241:        ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
                   39242:        ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
                   39243:        ZEND_NULL_HANDLER,
                   39244:        ZEND_NULL_HANDLER,
                   39245:        ZEND_NULL_HANDLER,
                   39246:        ZEND_NULL_HANDLER,
                   39247:        ZEND_NULL_HANDLER,
                   39248:        ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
                   39249:        ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
                   39250:        ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
                   39251:        ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
                   39252:        ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
                   39253:        ZEND_NULL_HANDLER,
                   39254:        ZEND_NULL_HANDLER,
                   39255:        ZEND_NULL_HANDLER,
                   39256:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39257:        ZEND_CATCH_SPEC_CONST_CV_HANDLER,
                   39258:        ZEND_NULL_HANDLER,
                   39259:        ZEND_NULL_HANDLER,
                   39260:        ZEND_NULL_HANDLER,
                   39261:        ZEND_NULL_HANDLER,
1.1       misho    39262:        ZEND_NULL_HANDLER,
                   39263:        ZEND_NULL_HANDLER,
                   39264:        ZEND_NULL_HANDLER,
                   39265:        ZEND_NULL_HANDLER,
                   39266:        ZEND_NULL_HANDLER,
                   39267:        ZEND_NULL_HANDLER,
                   39268:        ZEND_NULL_HANDLER,
                   39269:        ZEND_NULL_HANDLER,
                   39270:        ZEND_NULL_HANDLER,
                   39271:        ZEND_NULL_HANDLER,
                   39272:        ZEND_NULL_HANDLER,
                   39273:        ZEND_NULL_HANDLER,
                   39274:        ZEND_NULL_HANDLER,
                   39275:        ZEND_NULL_HANDLER,
                   39276:        ZEND_NULL_HANDLER,
                   39277:        ZEND_NULL_HANDLER,
                   39278:        ZEND_THROW_SPEC_CONST_HANDLER,
                   39279:        ZEND_THROW_SPEC_CONST_HANDLER,
                   39280:        ZEND_THROW_SPEC_CONST_HANDLER,
                   39281:        ZEND_THROW_SPEC_CONST_HANDLER,
                   39282:        ZEND_THROW_SPEC_CONST_HANDLER,
                   39283:        ZEND_THROW_SPEC_TMP_HANDLER,
                   39284:        ZEND_THROW_SPEC_TMP_HANDLER,
                   39285:        ZEND_THROW_SPEC_TMP_HANDLER,
                   39286:        ZEND_THROW_SPEC_TMP_HANDLER,
                   39287:        ZEND_THROW_SPEC_TMP_HANDLER,
                   39288:        ZEND_THROW_SPEC_VAR_HANDLER,
                   39289:        ZEND_THROW_SPEC_VAR_HANDLER,
                   39290:        ZEND_THROW_SPEC_VAR_HANDLER,
                   39291:        ZEND_THROW_SPEC_VAR_HANDLER,
                   39292:        ZEND_THROW_SPEC_VAR_HANDLER,
                   39293:        ZEND_NULL_HANDLER,
                   39294:        ZEND_NULL_HANDLER,
                   39295:        ZEND_NULL_HANDLER,
                   39296:        ZEND_NULL_HANDLER,
                   39297:        ZEND_NULL_HANDLER,
                   39298:        ZEND_THROW_SPEC_CV_HANDLER,
                   39299:        ZEND_THROW_SPEC_CV_HANDLER,
                   39300:        ZEND_THROW_SPEC_CV_HANDLER,
                   39301:        ZEND_THROW_SPEC_CV_HANDLER,
                   39302:        ZEND_THROW_SPEC_CV_HANDLER,
                   39303:        ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
                   39304:        ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
                   39305:        ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
                   39306:        ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
                   39307:        ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
                   39308:        ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
                   39309:        ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
                   39310:        ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
                   39311:        ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
                   39312:        ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
                   39313:        ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
                   39314:        ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
                   39315:        ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
                   39316:        ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
                   39317:        ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
                   39318:        ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
                   39319:        ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
                   39320:        ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
                   39321:        ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
                   39322:        ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
                   39323:        ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
                   39324:        ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
                   39325:        ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
                   39326:        ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
                   39327:        ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
                   39328:        ZEND_CLONE_SPEC_CONST_HANDLER,
                   39329:        ZEND_CLONE_SPEC_CONST_HANDLER,
                   39330:        ZEND_CLONE_SPEC_CONST_HANDLER,
                   39331:        ZEND_CLONE_SPEC_CONST_HANDLER,
                   39332:        ZEND_CLONE_SPEC_CONST_HANDLER,
                   39333:        ZEND_CLONE_SPEC_TMP_HANDLER,
                   39334:        ZEND_CLONE_SPEC_TMP_HANDLER,
                   39335:        ZEND_CLONE_SPEC_TMP_HANDLER,
                   39336:        ZEND_CLONE_SPEC_TMP_HANDLER,
                   39337:        ZEND_CLONE_SPEC_TMP_HANDLER,
                   39338:        ZEND_CLONE_SPEC_VAR_HANDLER,
                   39339:        ZEND_CLONE_SPEC_VAR_HANDLER,
                   39340:        ZEND_CLONE_SPEC_VAR_HANDLER,
                   39341:        ZEND_CLONE_SPEC_VAR_HANDLER,
                   39342:        ZEND_CLONE_SPEC_VAR_HANDLER,
                   39343:        ZEND_CLONE_SPEC_UNUSED_HANDLER,
                   39344:        ZEND_CLONE_SPEC_UNUSED_HANDLER,
                   39345:        ZEND_CLONE_SPEC_UNUSED_HANDLER,
                   39346:        ZEND_CLONE_SPEC_UNUSED_HANDLER,
                   39347:        ZEND_CLONE_SPEC_UNUSED_HANDLER,
                   39348:        ZEND_CLONE_SPEC_CV_HANDLER,
                   39349:        ZEND_CLONE_SPEC_CV_HANDLER,
                   39350:        ZEND_CLONE_SPEC_CV_HANDLER,
                   39351:        ZEND_CLONE_SPEC_CV_HANDLER,
                   39352:        ZEND_CLONE_SPEC_CV_HANDLER,
1.1.1.2   misho    39353:        ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
                   39354:        ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
                   39355:        ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
                   39356:        ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
                   39357:        ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
                   39358:        ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
                   39359:        ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
                   39360:        ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
                   39361:        ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
                   39362:        ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
                   39363:        ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
                   39364:        ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
                   39365:        ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
                   39366:        ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
                   39367:        ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
1.1       misho    39368:        ZEND_NULL_HANDLER,
                   39369:        ZEND_NULL_HANDLER,
                   39370:        ZEND_NULL_HANDLER,
                   39371:        ZEND_NULL_HANDLER,
                   39372:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39373:        ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
                   39374:        ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
                   39375:        ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
                   39376:        ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
                   39377:        ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
1.1       misho    39378:        ZEND_NULL_HANDLER,
                   39379:        ZEND_NULL_HANDLER,
                   39380:        ZEND_NULL_HANDLER,
                   39381:        ZEND_NULL_HANDLER,
                   39382:        ZEND_NULL_HANDLER,
                   39383:        ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER,
                   39384:        ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER,
                   39385:        ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER,
                   39386:        ZEND_NULL_HANDLER,
                   39387:        ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER,
                   39388:        ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
                   39389:        ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER,
                   39390:        ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER,
                   39391:        ZEND_NULL_HANDLER,
                   39392:        ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER,
                   39393:        ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
                   39394:        ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER,
                   39395:        ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER,
                   39396:        ZEND_NULL_HANDLER,
                   39397:        ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
                   39398:        ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
                   39399:        ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER,
                   39400:        ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER,
                   39401:        ZEND_NULL_HANDLER,
                   39402:        ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
                   39403:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
                   39404:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER,
                   39405:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER,
                   39406:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
                   39407:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
                   39408:        ZEND_NULL_HANDLER,
                   39409:        ZEND_NULL_HANDLER,
                   39410:        ZEND_NULL_HANDLER,
                   39411:        ZEND_NULL_HANDLER,
                   39412:        ZEND_NULL_HANDLER,
                   39413:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
                   39414:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER,
                   39415:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER,
                   39416:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
                   39417:        ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
                   39418:        ZEND_NULL_HANDLER,
                   39419:        ZEND_NULL_HANDLER,
                   39420:        ZEND_NULL_HANDLER,
                   39421:        ZEND_NULL_HANDLER,
                   39422:        ZEND_NULL_HANDLER,
                   39423:        ZEND_NULL_HANDLER,
                   39424:        ZEND_NULL_HANDLER,
                   39425:        ZEND_NULL_HANDLER,
                   39426:        ZEND_NULL_HANDLER,
                   39427:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39428:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER,
                   39429:        ZEND_NULL_HANDLER,
                   39430:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER,
                   39431:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
                   39432:        ZEND_NULL_HANDLER,
                   39433:        ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER,
1.1       misho    39434:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39435:        ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER,
                   39436:        ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER,
1.1       misho    39437:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39438:        ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER,
1.1       misho    39439:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39440:        ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER,
                   39441:        ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER,
1.1       misho    39442:        ZEND_NULL_HANDLER,
                   39443:        ZEND_NULL_HANDLER,
1.1.1.2   misho    39444:        ZEND_NULL_HANDLER,
                   39445:        ZEND_NULL_HANDLER,
                   39446:        ZEND_NULL_HANDLER,
                   39447:        ZEND_NULL_HANDLER,
                   39448:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER,
                   39449:        ZEND_NULL_HANDLER,
                   39450:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER,
                   39451:        ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
                   39452:        ZEND_NULL_HANDLER,
1.1       misho    39453:        ZEND_NULL_HANDLER,
                   39454:        ZEND_NULL_HANDLER,
                   39455:        ZEND_NULL_HANDLER,
                   39456:        ZEND_NULL_HANDLER,
                   39457:        ZEND_NULL_HANDLER,
                   39458:        ZEND_NULL_HANDLER,
                   39459:        ZEND_NULL_HANDLER,
                   39460:        ZEND_NULL_HANDLER,
                   39461:        ZEND_NULL_HANDLER,
                   39462:        ZEND_NULL_HANDLER,
                   39463:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER,
                   39464:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER,
                   39465:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER,
                   39466:        ZEND_NULL_HANDLER,
                   39467:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER,
                   39468:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39469:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39470:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39471:        ZEND_NULL_HANDLER,
                   39472:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39473:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
                   39474:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER,
                   39475:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER,
                   39476:        ZEND_NULL_HANDLER,
                   39477:        ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
                   39478:        ZEND_NULL_HANDLER,
                   39479:        ZEND_NULL_HANDLER,
                   39480:        ZEND_NULL_HANDLER,
                   39481:        ZEND_NULL_HANDLER,
                   39482:        ZEND_NULL_HANDLER,
                   39483:        ZEND_NULL_HANDLER,
                   39484:        ZEND_NULL_HANDLER,
                   39485:        ZEND_NULL_HANDLER,
                   39486:        ZEND_NULL_HANDLER,
                   39487:        ZEND_NULL_HANDLER,
                   39488:        ZEND_NULL_HANDLER,
                   39489:        ZEND_NULL_HANDLER,
                   39490:        ZEND_NULL_HANDLER,
                   39491:        ZEND_NULL_HANDLER,
                   39492:        ZEND_NULL_HANDLER,
                   39493:        ZEND_NULL_HANDLER,
                   39494:        ZEND_NULL_HANDLER,
                   39495:        ZEND_NULL_HANDLER,
                   39496:        ZEND_NULL_HANDLER,
                   39497:        ZEND_NULL_HANDLER,
                   39498:        ZEND_NULL_HANDLER,
                   39499:        ZEND_NULL_HANDLER,
                   39500:        ZEND_NULL_HANDLER,
                   39501:        ZEND_NULL_HANDLER,
                   39502:        ZEND_NULL_HANDLER,
                   39503:        ZEND_NULL_HANDLER,
                   39504:        ZEND_NULL_HANDLER,
                   39505:        ZEND_NULL_HANDLER,
                   39506:        ZEND_NULL_HANDLER,
                   39507:        ZEND_NULL_HANDLER,
                   39508:        ZEND_NULL_HANDLER,
                   39509:        ZEND_NULL_HANDLER,
                   39510:        ZEND_NULL_HANDLER,
                   39511:        ZEND_NULL_HANDLER,
                   39512:        ZEND_NULL_HANDLER,
                   39513:        ZEND_NULL_HANDLER,
                   39514:        ZEND_NULL_HANDLER,
                   39515:        ZEND_NULL_HANDLER,
                   39516:        ZEND_NULL_HANDLER,
                   39517:        ZEND_NULL_HANDLER,
                   39518:        ZEND_NULL_HANDLER,
                   39519:        ZEND_NULL_HANDLER,
                   39520:        ZEND_NULL_HANDLER,
                   39521:        ZEND_NULL_HANDLER,
                   39522:        ZEND_NULL_HANDLER,
                   39523:        ZEND_NULL_HANDLER,
                   39524:        ZEND_NULL_HANDLER,
                   39525:        ZEND_NULL_HANDLER,
                   39526:        ZEND_NULL_HANDLER,
                   39527:        ZEND_NULL_HANDLER,
                   39528:        ZEND_NULL_HANDLER,
                   39529:        ZEND_NULL_HANDLER,
                   39530:        ZEND_NULL_HANDLER,
                   39531:        ZEND_NULL_HANDLER,
                   39532:        ZEND_NULL_HANDLER,
                   39533:        ZEND_NULL_HANDLER,
                   39534:        ZEND_NULL_HANDLER,
                   39535:        ZEND_NULL_HANDLER,
                   39536:        ZEND_NULL_HANDLER,
                   39537:        ZEND_NULL_HANDLER,
                   39538:        ZEND_NULL_HANDLER,
                   39539:        ZEND_NULL_HANDLER,
                   39540:        ZEND_NULL_HANDLER,
                   39541:        ZEND_NULL_HANDLER,
                   39542:        ZEND_NULL_HANDLER,
                   39543:        ZEND_NULL_HANDLER,
                   39544:        ZEND_NULL_HANDLER,
                   39545:        ZEND_NULL_HANDLER,
                   39546:        ZEND_NULL_HANDLER,
                   39547:        ZEND_NULL_HANDLER,
                   39548:        ZEND_NULL_HANDLER,
                   39549:        ZEND_NULL_HANDLER,
                   39550:        ZEND_NULL_HANDLER,
                   39551:        ZEND_NULL_HANDLER,
                   39552:        ZEND_NULL_HANDLER,
                   39553:        ZEND_NULL_HANDLER,
                   39554:        ZEND_NULL_HANDLER,
                   39555:        ZEND_NULL_HANDLER,
                   39556:        ZEND_NULL_HANDLER,
                   39557:        ZEND_NULL_HANDLER,
                   39558:        ZEND_NULL_HANDLER,
                   39559:        ZEND_NULL_HANDLER,
                   39560:        ZEND_NULL_HANDLER,
                   39561:        ZEND_NULL_HANDLER,
                   39562:        ZEND_NULL_HANDLER,
                   39563:        ZEND_NULL_HANDLER,
                   39564:        ZEND_NULL_HANDLER,
                   39565:        ZEND_NULL_HANDLER,
                   39566:        ZEND_NULL_HANDLER,
                   39567:        ZEND_NULL_HANDLER,
                   39568:        ZEND_NULL_HANDLER,
                   39569:        ZEND_NULL_HANDLER,
                   39570:        ZEND_NULL_HANDLER,
                   39571:        ZEND_NULL_HANDLER,
                   39572:        ZEND_NULL_HANDLER,
                   39573:        ZEND_NULL_HANDLER,
                   39574:        ZEND_NULL_HANDLER,
                   39575:        ZEND_NULL_HANDLER,
                   39576:        ZEND_NULL_HANDLER,
                   39577:        ZEND_NULL_HANDLER,
                   39578:        ZEND_NULL_HANDLER,
                   39579:        ZEND_NULL_HANDLER,
                   39580:        ZEND_NULL_HANDLER,
                   39581:        ZEND_NULL_HANDLER,
                   39582:        ZEND_NULL_HANDLER,
                   39583:        ZEND_NULL_HANDLER,
                   39584:        ZEND_NULL_HANDLER,
                   39585:        ZEND_NULL_HANDLER,
                   39586:        ZEND_NULL_HANDLER,
                   39587:        ZEND_NULL_HANDLER,
                   39588:        ZEND_NULL_HANDLER,
                   39589:        ZEND_NULL_HANDLER,
                   39590:        ZEND_NULL_HANDLER,
                   39591:        ZEND_NULL_HANDLER,
                   39592:        ZEND_NULL_HANDLER,
                   39593:        ZEND_NULL_HANDLER,
                   39594:        ZEND_NULL_HANDLER,
                   39595:        ZEND_NULL_HANDLER,
                   39596:        ZEND_NULL_HANDLER,
                   39597:        ZEND_NULL_HANDLER,
                   39598:        ZEND_NULL_HANDLER,
                   39599:        ZEND_NULL_HANDLER,
                   39600:        ZEND_NULL_HANDLER,
                   39601:        ZEND_NULL_HANDLER,
                   39602:        ZEND_NULL_HANDLER,
                   39603:        ZEND_NULL_HANDLER,
                   39604:        ZEND_NULL_HANDLER,
                   39605:        ZEND_NULL_HANDLER,
                   39606:        ZEND_NULL_HANDLER,
                   39607:        ZEND_NULL_HANDLER,
                   39608:        ZEND_NULL_HANDLER,
                   39609:        ZEND_NULL_HANDLER,
                   39610:        ZEND_NULL_HANDLER,
                   39611:        ZEND_NULL_HANDLER,
                   39612:        ZEND_NULL_HANDLER,
                   39613:        ZEND_NULL_HANDLER,
                   39614:        ZEND_NULL_HANDLER,
                   39615:        ZEND_NULL_HANDLER,
                   39616:        ZEND_NULL_HANDLER,
                   39617:        ZEND_NULL_HANDLER,
                   39618:        ZEND_NULL_HANDLER,
                   39619:        ZEND_NULL_HANDLER,
                   39620:        ZEND_NULL_HANDLER,
                   39621:        ZEND_NULL_HANDLER,
                   39622:        ZEND_NULL_HANDLER,
                   39623:        ZEND_NULL_HANDLER,
                   39624:        ZEND_NULL_HANDLER,
                   39625:        ZEND_NULL_HANDLER,
                   39626:        ZEND_NULL_HANDLER,
                   39627:        ZEND_NULL_HANDLER,
                   39628:        ZEND_NULL_HANDLER,
                   39629:        ZEND_NULL_HANDLER,
                   39630:        ZEND_NULL_HANDLER,
                   39631:        ZEND_NULL_HANDLER,
                   39632:        ZEND_NULL_HANDLER,
                   39633:        ZEND_NULL_HANDLER,
                   39634:        ZEND_NULL_HANDLER,
                   39635:        ZEND_NULL_HANDLER,
                   39636:        ZEND_NULL_HANDLER,
                   39637:        ZEND_NULL_HANDLER,
                   39638:        ZEND_NULL_HANDLER,
                   39639:        ZEND_NULL_HANDLER,
                   39640:        ZEND_NULL_HANDLER,
                   39641:        ZEND_NULL_HANDLER,
                   39642:        ZEND_NULL_HANDLER,
                   39643:        ZEND_NULL_HANDLER,
                   39644:        ZEND_NULL_HANDLER,
                   39645:        ZEND_NULL_HANDLER,
                   39646:        ZEND_NULL_HANDLER,
                   39647:        ZEND_NULL_HANDLER,
                   39648:        ZEND_NULL_HANDLER,
                   39649:        ZEND_NULL_HANDLER,
                   39650:        ZEND_NULL_HANDLER,
                   39651:        ZEND_NULL_HANDLER,
                   39652:        ZEND_NULL_HANDLER,
                   39653:        ZEND_NULL_HANDLER,
                   39654:        ZEND_NULL_HANDLER,
                   39655:        ZEND_NULL_HANDLER,
                   39656:        ZEND_NULL_HANDLER,
                   39657:        ZEND_NULL_HANDLER,
                   39658:        ZEND_NULL_HANDLER,
                   39659:        ZEND_NULL_HANDLER,
                   39660:        ZEND_NULL_HANDLER,
                   39661:        ZEND_NULL_HANDLER,
                   39662:        ZEND_NULL_HANDLER,
                   39663:        ZEND_NULL_HANDLER,
                   39664:        ZEND_NULL_HANDLER,
                   39665:        ZEND_NULL_HANDLER,
                   39666:        ZEND_NULL_HANDLER,
                   39667:        ZEND_NULL_HANDLER,
                   39668:        ZEND_NULL_HANDLER,
                   39669:        ZEND_NULL_HANDLER,
                   39670:        ZEND_NULL_HANDLER,
                   39671:        ZEND_NULL_HANDLER,
                   39672:        ZEND_NULL_HANDLER,
                   39673:        ZEND_NULL_HANDLER,
                   39674:        ZEND_NULL_HANDLER,
                   39675:        ZEND_NULL_HANDLER,
                   39676:        ZEND_NULL_HANDLER,
                   39677:        ZEND_NULL_HANDLER,
                   39678:        ZEND_NULL_HANDLER,
                   39679:        ZEND_NULL_HANDLER,
                   39680:        ZEND_NULL_HANDLER,
                   39681:        ZEND_NULL_HANDLER,
                   39682:        ZEND_NULL_HANDLER,
                   39683:        ZEND_NULL_HANDLER,
                   39684:        ZEND_NULL_HANDLER,
                   39685:        ZEND_NULL_HANDLER,
                   39686:        ZEND_NULL_HANDLER,
                   39687:        ZEND_NULL_HANDLER,
                   39688:        ZEND_NULL_HANDLER,
                   39689:        ZEND_NULL_HANDLER,
                   39690:        ZEND_NULL_HANDLER,
                   39691:        ZEND_NULL_HANDLER,
                   39692:        ZEND_NULL_HANDLER,
                   39693:        ZEND_NULL_HANDLER,
                   39694:        ZEND_NULL_HANDLER,
                   39695:        ZEND_NULL_HANDLER,
                   39696:        ZEND_NULL_HANDLER,
                   39697:        ZEND_NULL_HANDLER,
                   39698:        ZEND_NULL_HANDLER,
                   39699:        ZEND_NULL_HANDLER,
                   39700:        ZEND_NULL_HANDLER,
                   39701:        ZEND_NULL_HANDLER,
                   39702:        ZEND_NULL_HANDLER,
                   39703:        ZEND_NULL_HANDLER,
                   39704:        ZEND_NULL_HANDLER,
                   39705:        ZEND_NULL_HANDLER,
                   39706:        ZEND_NULL_HANDLER,
                   39707:        ZEND_NULL_HANDLER,
                   39708:        ZEND_NULL_HANDLER,
                   39709:        ZEND_NULL_HANDLER,
                   39710:        ZEND_NULL_HANDLER,
                   39711:        ZEND_NULL_HANDLER,
                   39712:        ZEND_NULL_HANDLER,
                   39713:        ZEND_NULL_HANDLER,
                   39714:        ZEND_NULL_HANDLER,
                   39715:        ZEND_NULL_HANDLER,
                   39716:        ZEND_NULL_HANDLER,
                   39717:        ZEND_NULL_HANDLER,
                   39718:        ZEND_NULL_HANDLER,
                   39719:        ZEND_NULL_HANDLER,
                   39720:        ZEND_NULL_HANDLER,
                   39721:        ZEND_NULL_HANDLER,
                   39722:        ZEND_NULL_HANDLER,
                   39723:        ZEND_NULL_HANDLER,
                   39724:        ZEND_NULL_HANDLER,
                   39725:        ZEND_NULL_HANDLER,
                   39726:        ZEND_NULL_HANDLER,
                   39727:        ZEND_NULL_HANDLER,
                   39728:        ZEND_NULL_HANDLER,
                   39729:        ZEND_NULL_HANDLER,
                   39730:        ZEND_NULL_HANDLER,
                   39731:        ZEND_NULL_HANDLER,
                   39732:        ZEND_NULL_HANDLER,
                   39733:        ZEND_NULL_HANDLER,
                   39734:        ZEND_NULL_HANDLER,
                   39735:        ZEND_NULL_HANDLER,
                   39736:        ZEND_NULL_HANDLER,
                   39737:        ZEND_NULL_HANDLER,
                   39738:        ZEND_NULL_HANDLER,
                   39739:        ZEND_NULL_HANDLER,
                   39740:        ZEND_NULL_HANDLER,
                   39741:        ZEND_NULL_HANDLER,
                   39742:        ZEND_NULL_HANDLER,
                   39743:        ZEND_NULL_HANDLER,
                   39744:        ZEND_NULL_HANDLER,
                   39745:        ZEND_NULL_HANDLER,
                   39746:        ZEND_NULL_HANDLER,
                   39747:        ZEND_NULL_HANDLER,
                   39748:        ZEND_NULL_HANDLER,
                   39749:        ZEND_NULL_HANDLER,
                   39750:        ZEND_NULL_HANDLER,
                   39751:        ZEND_NULL_HANDLER,
                   39752:        ZEND_NULL_HANDLER,
                   39753:        ZEND_NULL_HANDLER,
                   39754:        ZEND_NULL_HANDLER,
                   39755:        ZEND_NULL_HANDLER,
                   39756:        ZEND_NULL_HANDLER,
                   39757:        ZEND_NULL_HANDLER,
                   39758:        ZEND_NULL_HANDLER,
                   39759:        ZEND_NULL_HANDLER,
                   39760:        ZEND_NULL_HANDLER,
                   39761:        ZEND_NULL_HANDLER,
                   39762:        ZEND_NULL_HANDLER,
                   39763:        ZEND_NULL_HANDLER,
                   39764:        ZEND_NULL_HANDLER,
                   39765:        ZEND_NULL_HANDLER,
                   39766:        ZEND_NULL_HANDLER,
                   39767:        ZEND_NULL_HANDLER,
                   39768:        ZEND_NULL_HANDLER,
                   39769:        ZEND_NULL_HANDLER,
                   39770:        ZEND_NULL_HANDLER,
                   39771:        ZEND_NULL_HANDLER,
                   39772:        ZEND_NULL_HANDLER,
                   39773:        ZEND_NULL_HANDLER,
                   39774:        ZEND_NULL_HANDLER,
                   39775:        ZEND_NULL_HANDLER,
                   39776:        ZEND_NULL_HANDLER,
                   39777:        ZEND_NULL_HANDLER,
                   39778:        ZEND_NULL_HANDLER,
                   39779:        ZEND_NULL_HANDLER,
                   39780:        ZEND_NULL_HANDLER,
                   39781:        ZEND_NULL_HANDLER,
                   39782:        ZEND_NULL_HANDLER,
                   39783:        ZEND_NULL_HANDLER,
                   39784:        ZEND_NULL_HANDLER,
                   39785:        ZEND_NULL_HANDLER,
                   39786:        ZEND_NULL_HANDLER,
                   39787:        ZEND_NULL_HANDLER,
                   39788:        ZEND_NULL_HANDLER,
                   39789:        ZEND_NULL_HANDLER,
                   39790:        ZEND_NULL_HANDLER,
                   39791:        ZEND_NULL_HANDLER,
                   39792:        ZEND_NULL_HANDLER,
                   39793:        ZEND_NULL_HANDLER,
                   39794:        ZEND_NULL_HANDLER,
                   39795:        ZEND_NULL_HANDLER,
                   39796:        ZEND_NULL_HANDLER,
                   39797:        ZEND_NULL_HANDLER,
                   39798:        ZEND_NULL_HANDLER,
                   39799:        ZEND_NULL_HANDLER,
                   39800:        ZEND_NULL_HANDLER,
                   39801:        ZEND_NULL_HANDLER,
                   39802:        ZEND_NULL_HANDLER,
                   39803:        ZEND_NULL_HANDLER,
                   39804:        ZEND_NULL_HANDLER,
                   39805:        ZEND_NULL_HANDLER,
                   39806:        ZEND_NULL_HANDLER,
                   39807:        ZEND_NULL_HANDLER,
                   39808:        ZEND_NULL_HANDLER,
                   39809:        ZEND_NULL_HANDLER,
                   39810:        ZEND_NULL_HANDLER,
                   39811:        ZEND_NULL_HANDLER,
                   39812:        ZEND_NULL_HANDLER,
                   39813:        ZEND_NULL_HANDLER,
                   39814:        ZEND_NULL_HANDLER,
                   39815:        ZEND_NULL_HANDLER,
                   39816:        ZEND_NULL_HANDLER,
                   39817:        ZEND_NULL_HANDLER,
                   39818:        ZEND_NULL_HANDLER,
                   39819:        ZEND_NULL_HANDLER,
                   39820:        ZEND_NULL_HANDLER,
                   39821:        ZEND_NULL_HANDLER,
                   39822:        ZEND_NULL_HANDLER,
                   39823:        ZEND_NULL_HANDLER,
                   39824:        ZEND_NULL_HANDLER,
                   39825:        ZEND_NULL_HANDLER,
                   39826:        ZEND_NULL_HANDLER,
                   39827:        ZEND_NULL_HANDLER,
                   39828:        ZEND_NULL_HANDLER,
                   39829:        ZEND_NULL_HANDLER,
                   39830:        ZEND_NULL_HANDLER,
                   39831:        ZEND_NULL_HANDLER,
                   39832:        ZEND_NULL_HANDLER,
                   39833:        ZEND_NULL_HANDLER,
                   39834:        ZEND_NULL_HANDLER,
                   39835:        ZEND_NULL_HANDLER,
                   39836:        ZEND_NULL_HANDLER,
                   39837:        ZEND_NULL_HANDLER,
                   39838:        ZEND_NULL_HANDLER,
                   39839:        ZEND_NULL_HANDLER,
                   39840:        ZEND_NULL_HANDLER,
                   39841:        ZEND_NULL_HANDLER,
                   39842:        ZEND_NULL_HANDLER,
                   39843:        ZEND_NULL_HANDLER,
                   39844:        ZEND_NULL_HANDLER,
                   39845:        ZEND_NULL_HANDLER,
                   39846:        ZEND_NULL_HANDLER,
                   39847:        ZEND_NULL_HANDLER,
                   39848:        ZEND_NULL_HANDLER,
                   39849:        ZEND_NULL_HANDLER,
                   39850:        ZEND_NULL_HANDLER,
                   39851:        ZEND_NULL_HANDLER,
                   39852:        ZEND_NULL_HANDLER,
                   39853:        ZEND_NULL_HANDLER,
                   39854:        ZEND_NULL_HANDLER,
                   39855:        ZEND_NULL_HANDLER,
                   39856:        ZEND_NULL_HANDLER,
                   39857:        ZEND_NULL_HANDLER,
                   39858:        ZEND_NULL_HANDLER,
                   39859:        ZEND_NULL_HANDLER,
                   39860:        ZEND_NULL_HANDLER,
                   39861:        ZEND_NULL_HANDLER,
                   39862:        ZEND_NULL_HANDLER,
                   39863:        ZEND_NULL_HANDLER,
                   39864:        ZEND_NULL_HANDLER,
                   39865:        ZEND_NULL_HANDLER,
                   39866:        ZEND_NULL_HANDLER,
                   39867:        ZEND_NULL_HANDLER,
                   39868:        ZEND_NULL_HANDLER,
                   39869:        ZEND_NULL_HANDLER,
                   39870:        ZEND_NULL_HANDLER,
                   39871:        ZEND_NULL_HANDLER,
                   39872:        ZEND_NULL_HANDLER,
                   39873:        ZEND_NULL_HANDLER,
                   39874:        ZEND_NULL_HANDLER,
                   39875:        ZEND_NULL_HANDLER,
                   39876:        ZEND_NULL_HANDLER,
                   39877:        ZEND_NULL_HANDLER,
                   39878:        ZEND_NULL_HANDLER,
                   39879:        ZEND_NULL_HANDLER,
                   39880:        ZEND_NULL_HANDLER,
                   39881:        ZEND_NULL_HANDLER,
                   39882:        ZEND_NULL_HANDLER,
                   39883:        ZEND_NULL_HANDLER,
                   39884:        ZEND_NULL_HANDLER,
                   39885:        ZEND_NULL_HANDLER,
                   39886:        ZEND_NULL_HANDLER,
                   39887:        ZEND_NULL_HANDLER,
                   39888:        ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
                   39889:        ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER,
                   39890:        ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER,
                   39891:        ZEND_NULL_HANDLER,
                   39892:        ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
                   39893:        ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39894:        ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39895:        ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39896:        ZEND_NULL_HANDLER,
                   39897:        ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39898:        ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
                   39899:        ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER,
                   39900:        ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER,
                   39901:        ZEND_NULL_HANDLER,
                   39902:        ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
                   39903:        ZEND_NULL_HANDLER,
                   39904:        ZEND_NULL_HANDLER,
                   39905:        ZEND_NULL_HANDLER,
                   39906:        ZEND_NULL_HANDLER,
                   39907:        ZEND_NULL_HANDLER,
                   39908:        ZEND_NULL_HANDLER,
                   39909:        ZEND_NULL_HANDLER,
                   39910:        ZEND_NULL_HANDLER,
                   39911:        ZEND_NULL_HANDLER,
                   39912:        ZEND_NULL_HANDLER,
                   39913:        ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
                   39914:        ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER,
                   39915:        ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER,
                   39916:        ZEND_NULL_HANDLER,
                   39917:        ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER,
                   39918:        ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39919:        ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39920:        ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39921:        ZEND_NULL_HANDLER,
                   39922:        ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39923:        ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER,
                   39924:        ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER,
                   39925:        ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER,
                   39926:        ZEND_NULL_HANDLER,
                   39927:        ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER,
                   39928:        ZEND_NULL_HANDLER,
                   39929:        ZEND_NULL_HANDLER,
                   39930:        ZEND_NULL_HANDLER,
                   39931:        ZEND_NULL_HANDLER,
                   39932:        ZEND_NULL_HANDLER,
                   39933:        ZEND_NULL_HANDLER,
                   39934:        ZEND_NULL_HANDLER,
                   39935:        ZEND_NULL_HANDLER,
                   39936:        ZEND_NULL_HANDLER,
                   39937:        ZEND_NULL_HANDLER,
                   39938:        ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
                   39939:        ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER,
                   39940:        ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER,
                   39941:        ZEND_NULL_HANDLER,
                   39942:        ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
                   39943:        ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39944:        ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39945:        ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39946:        ZEND_NULL_HANDLER,
                   39947:        ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39948:        ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
                   39949:        ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER,
                   39950:        ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER,
                   39951:        ZEND_NULL_HANDLER,
                   39952:        ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
                   39953:        ZEND_NULL_HANDLER,
                   39954:        ZEND_NULL_HANDLER,
                   39955:        ZEND_NULL_HANDLER,
                   39956:        ZEND_NULL_HANDLER,
                   39957:        ZEND_NULL_HANDLER,
                   39958:        ZEND_NULL_HANDLER,
                   39959:        ZEND_NULL_HANDLER,
                   39960:        ZEND_NULL_HANDLER,
                   39961:        ZEND_NULL_HANDLER,
                   39962:        ZEND_NULL_HANDLER,
                   39963:        ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
                   39964:        ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER,
                   39965:        ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER,
                   39966:        ZEND_NULL_HANDLER,
                   39967:        ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER,
                   39968:        ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39969:        ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39970:        ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39971:        ZEND_NULL_HANDLER,
                   39972:        ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39973:        ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER,
                   39974:        ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER,
                   39975:        ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER,
                   39976:        ZEND_NULL_HANDLER,
                   39977:        ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER,
                   39978:        ZEND_NULL_HANDLER,
                   39979:        ZEND_NULL_HANDLER,
                   39980:        ZEND_NULL_HANDLER,
                   39981:        ZEND_NULL_HANDLER,
                   39982:        ZEND_NULL_HANDLER,
                   39983:        ZEND_NULL_HANDLER,
                   39984:        ZEND_NULL_HANDLER,
                   39985:        ZEND_NULL_HANDLER,
                   39986:        ZEND_NULL_HANDLER,
                   39987:        ZEND_NULL_HANDLER,
                   39988:        ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER,
                   39989:        ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER,
                   39990:        ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER,
                   39991:        ZEND_NULL_HANDLER,
                   39992:        ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER,
                   39993:        ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   39994:        ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   39995:        ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   39996:        ZEND_NULL_HANDLER,
                   39997:        ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER,
                   39998:        ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER,
                   39999:        ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER,
                   40000:        ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER,
                   40001:        ZEND_NULL_HANDLER,
                   40002:        ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER,
                   40003:        ZEND_NULL_HANDLER,
                   40004:        ZEND_NULL_HANDLER,
                   40005:        ZEND_NULL_HANDLER,
                   40006:        ZEND_NULL_HANDLER,
                   40007:        ZEND_NULL_HANDLER,
                   40008:        ZEND_NULL_HANDLER,
                   40009:        ZEND_NULL_HANDLER,
                   40010:        ZEND_NULL_HANDLER,
                   40011:        ZEND_NULL_HANDLER,
                   40012:        ZEND_NULL_HANDLER,
                   40013:        ZEND_NULL_HANDLER,
                   40014:        ZEND_NULL_HANDLER,
                   40015:        ZEND_NULL_HANDLER,
                   40016:        ZEND_NULL_HANDLER,
                   40017:        ZEND_NULL_HANDLER,
                   40018:        ZEND_NULL_HANDLER,
                   40019:        ZEND_NULL_HANDLER,
                   40020:        ZEND_NULL_HANDLER,
                   40021:        ZEND_NULL_HANDLER,
                   40022:        ZEND_NULL_HANDLER,
                   40023:        ZEND_NULL_HANDLER,
                   40024:        ZEND_NULL_HANDLER,
                   40025:        ZEND_NULL_HANDLER,
                   40026:        ZEND_NULL_HANDLER,
                   40027:        ZEND_NULL_HANDLER,
                   40028:        ZEND_NULL_HANDLER,
                   40029:        ZEND_NULL_HANDLER,
                   40030:        ZEND_NULL_HANDLER,
                   40031:        ZEND_NULL_HANDLER,
                   40032:        ZEND_NULL_HANDLER,
                   40033:        ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
                   40034:        ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
                   40035:        ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
                   40036:        ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
                   40037:        ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
                   40038:        ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
                   40039:        ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
                   40040:        ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
                   40041:        ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
                   40042:        ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
                   40043:        ZEND_NULL_HANDLER,
                   40044:        ZEND_NULL_HANDLER,
                   40045:        ZEND_NULL_HANDLER,
                   40046:        ZEND_NULL_HANDLER,
                   40047:        ZEND_NULL_HANDLER,
                   40048:        ZEND_INSTANCEOF_SPEC_CV_HANDLER,
                   40049:        ZEND_INSTANCEOF_SPEC_CV_HANDLER,
                   40050:        ZEND_INSTANCEOF_SPEC_CV_HANDLER,
                   40051:        ZEND_INSTANCEOF_SPEC_CV_HANDLER,
                   40052:        ZEND_INSTANCEOF_SPEC_CV_HANDLER,
                   40053:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40054:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40055:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40056:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40057:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40058:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40059:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40060:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40061:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40062:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40063:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40064:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40065:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40066:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40067:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40068:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40069:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40070:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40071:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40072:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40073:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40074:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40075:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40076:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40077:        ZEND_DECLARE_CLASS_SPEC_HANDLER,
                   40078:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40079:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40080:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40081:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40082:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40083:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40084:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40085:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40086:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40087:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40088:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40089:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40090:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40091:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40092:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40093:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40094:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40095:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40096:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40097:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40098:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40099:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40100:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40101:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40102:        ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
                   40103:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40104:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40105:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40106:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40107:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40108:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40109:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40110:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40111:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40112:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40113:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40114:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40115:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40116:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40117:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40118:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40119:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40120:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40121:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40122:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40123:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40124:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40125:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40126:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40127:        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
                   40128:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40129:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40130:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40131:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40132:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40133:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40134:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40135:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40136:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40137:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40138:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40139:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40140:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40141:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40142:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40143:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40144:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40145:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40146:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40147:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40148:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40149:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40150:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40151:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40152:        ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
                   40153:        ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
                   40154:        ZEND_NULL_HANDLER,
                   40155:        ZEND_NULL_HANDLER,
                   40156:        ZEND_NULL_HANDLER,
                   40157:        ZEND_NULL_HANDLER,
                   40158:        ZEND_NULL_HANDLER,
                   40159:        ZEND_NULL_HANDLER,
                   40160:        ZEND_NULL_HANDLER,
                   40161:        ZEND_NULL_HANDLER,
                   40162:        ZEND_NULL_HANDLER,
                   40163:        ZEND_NULL_HANDLER,
                   40164:        ZEND_NULL_HANDLER,
                   40165:        ZEND_NULL_HANDLER,
                   40166:        ZEND_NULL_HANDLER,
                   40167:        ZEND_NULL_HANDLER,
                   40168:        ZEND_NULL_HANDLER,
                   40169:        ZEND_NULL_HANDLER,
                   40170:        ZEND_NULL_HANDLER,
                   40171:        ZEND_NULL_HANDLER,
                   40172:        ZEND_NULL_HANDLER,
                   40173:        ZEND_NULL_HANDLER,
                   40174:        ZEND_NULL_HANDLER,
                   40175:        ZEND_NULL_HANDLER,
                   40176:        ZEND_NULL_HANDLER,
                   40177:        ZEND_NULL_HANDLER,
                   40178:        ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
                   40179:        ZEND_NULL_HANDLER,
                   40180:        ZEND_NULL_HANDLER,
                   40181:        ZEND_NULL_HANDLER,
                   40182:        ZEND_NULL_HANDLER,
                   40183:        ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
                   40184:        ZEND_NULL_HANDLER,
                   40185:        ZEND_NULL_HANDLER,
                   40186:        ZEND_NULL_HANDLER,
                   40187:        ZEND_NULL_HANDLER,
                   40188:        ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
                   40189:        ZEND_NULL_HANDLER,
                   40190:        ZEND_NULL_HANDLER,
                   40191:        ZEND_NULL_HANDLER,
                   40192:        ZEND_NULL_HANDLER,
                   40193:        ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
                   40194:        ZEND_NULL_HANDLER,
                   40195:        ZEND_NULL_HANDLER,
                   40196:        ZEND_NULL_HANDLER,
                   40197:        ZEND_NULL_HANDLER,
                   40198:        ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
                   40199:        ZEND_NULL_HANDLER,
                   40200:        ZEND_NULL_HANDLER,
                   40201:        ZEND_NULL_HANDLER,
                   40202:        ZEND_NULL_HANDLER,
                   40203:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40204:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40205:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40206:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40207:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40208:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40209:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40210:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40211:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40212:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40213:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40214:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40215:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40216:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40217:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40218:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40219:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40220:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40221:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40222:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40223:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40224:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40225:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40226:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40227:        ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
                   40228:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40229:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40230:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40231:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40232:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40233:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40234:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40235:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40236:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40237:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40238:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40239:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40240:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40241:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40242:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40243:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40244:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40245:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40246:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40247:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40248:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40249:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40250:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40251:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40252:        ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
                   40253:        ZEND_NULL_HANDLER,
                   40254:        ZEND_NULL_HANDLER,
                   40255:        ZEND_NULL_HANDLER,
                   40256:        ZEND_NULL_HANDLER,
                   40257:        ZEND_NULL_HANDLER,
                   40258:        ZEND_NULL_HANDLER,
                   40259:        ZEND_NULL_HANDLER,
                   40260:        ZEND_NULL_HANDLER,
                   40261:        ZEND_NULL_HANDLER,
                   40262:        ZEND_NULL_HANDLER,
                   40263:        ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER,
                   40264:        ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER,
                   40265:        ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER,
                   40266:        ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER,
                   40267:        ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER,
                   40268:        ZEND_NULL_HANDLER,
                   40269:        ZEND_NULL_HANDLER,
                   40270:        ZEND_NULL_HANDLER,
                   40271:        ZEND_NULL_HANDLER,
                   40272:        ZEND_NULL_HANDLER,
                   40273:        ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER,
                   40274:        ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER,
                   40275:        ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER,
                   40276:        ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER,
                   40277:        ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER,
                   40278:        ZEND_NULL_HANDLER,
                   40279:        ZEND_NULL_HANDLER,
                   40280:        ZEND_NULL_HANDLER,
                   40281:        ZEND_NULL_HANDLER,
                   40282:        ZEND_NULL_HANDLER,
                   40283:        ZEND_NULL_HANDLER,
                   40284:        ZEND_NULL_HANDLER,
                   40285:        ZEND_NULL_HANDLER,
                   40286:        ZEND_NULL_HANDLER,
                   40287:        ZEND_NULL_HANDLER,
                   40288:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER,
                   40289:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER,
                   40290:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER,
                   40291:        ZEND_NULL_HANDLER,
                   40292:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER,
                   40293:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
                   40294:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER,
                   40295:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER,
                   40296:        ZEND_NULL_HANDLER,
                   40297:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
                   40298:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
                   40299:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER,
                   40300:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER,
                   40301:        ZEND_NULL_HANDLER,
                   40302:        ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
                   40303:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40304:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40305:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40306:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40307:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40308:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40309:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40310:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40311:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40312:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40313:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40314:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40315:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40316:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40317:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40318:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40319:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40320:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40321:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40322:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40323:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40324:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40325:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40326:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40327:        ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
                   40328:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40329:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40330:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40331:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40332:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40333:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40334:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40335:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40336:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40337:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40338:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40339:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40340:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40341:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40342:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40343:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40344:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40345:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40346:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40347:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40348:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40349:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40350:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40351:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40352:        ZEND_USER_OPCODE_SPEC_HANDLER,
                   40353:        ZEND_NULL_HANDLER,
                   40354:        ZEND_NULL_HANDLER,
                   40355:        ZEND_NULL_HANDLER,
                   40356:        ZEND_NULL_HANDLER,
                   40357:        ZEND_NULL_HANDLER,
                   40358:        ZEND_NULL_HANDLER,
                   40359:        ZEND_NULL_HANDLER,
                   40360:        ZEND_NULL_HANDLER,
                   40361:        ZEND_NULL_HANDLER,
                   40362:        ZEND_NULL_HANDLER,
                   40363:        ZEND_NULL_HANDLER,
                   40364:        ZEND_NULL_HANDLER,
                   40365:        ZEND_NULL_HANDLER,
                   40366:        ZEND_NULL_HANDLER,
                   40367:        ZEND_NULL_HANDLER,
                   40368:        ZEND_NULL_HANDLER,
                   40369:        ZEND_NULL_HANDLER,
                   40370:        ZEND_NULL_HANDLER,
                   40371:        ZEND_NULL_HANDLER,
                   40372:        ZEND_NULL_HANDLER,
                   40373:        ZEND_NULL_HANDLER,
                   40374:        ZEND_NULL_HANDLER,
                   40375:        ZEND_NULL_HANDLER,
                   40376:        ZEND_NULL_HANDLER,
                   40377:        ZEND_NULL_HANDLER,
                   40378:        ZEND_JMP_SET_SPEC_CONST_HANDLER,
                   40379:        ZEND_JMP_SET_SPEC_CONST_HANDLER,
                   40380:        ZEND_JMP_SET_SPEC_CONST_HANDLER,
                   40381:        ZEND_JMP_SET_SPEC_CONST_HANDLER,
                   40382:        ZEND_JMP_SET_SPEC_CONST_HANDLER,
                   40383:        ZEND_JMP_SET_SPEC_TMP_HANDLER,
                   40384:        ZEND_JMP_SET_SPEC_TMP_HANDLER,
                   40385:        ZEND_JMP_SET_SPEC_TMP_HANDLER,
                   40386:        ZEND_JMP_SET_SPEC_TMP_HANDLER,
                   40387:        ZEND_JMP_SET_SPEC_TMP_HANDLER,
                   40388:        ZEND_JMP_SET_SPEC_VAR_HANDLER,
                   40389:        ZEND_JMP_SET_SPEC_VAR_HANDLER,
                   40390:        ZEND_JMP_SET_SPEC_VAR_HANDLER,
                   40391:        ZEND_JMP_SET_SPEC_VAR_HANDLER,
                   40392:        ZEND_JMP_SET_SPEC_VAR_HANDLER,
                   40393:        ZEND_NULL_HANDLER,
                   40394:        ZEND_NULL_HANDLER,
                   40395:        ZEND_NULL_HANDLER,
                   40396:        ZEND_NULL_HANDLER,
                   40397:        ZEND_NULL_HANDLER,
                   40398:        ZEND_JMP_SET_SPEC_CV_HANDLER,
                   40399:        ZEND_JMP_SET_SPEC_CV_HANDLER,
                   40400:        ZEND_JMP_SET_SPEC_CV_HANDLER,
                   40401:        ZEND_JMP_SET_SPEC_CV_HANDLER,
                   40402:        ZEND_JMP_SET_SPEC_CV_HANDLER,
                   40403:        ZEND_NULL_HANDLER,
                   40404:        ZEND_NULL_HANDLER,
                   40405:        ZEND_NULL_HANDLER,
1.1.1.2   misho    40406:        ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
                   40407:        ZEND_NULL_HANDLER,
                   40408:        ZEND_NULL_HANDLER,
                   40409:        ZEND_NULL_HANDLER,
                   40410:        ZEND_NULL_HANDLER,
                   40411:        ZEND_NULL_HANDLER,
                   40412:        ZEND_NULL_HANDLER,
                   40413:        ZEND_NULL_HANDLER,
                   40414:        ZEND_NULL_HANDLER,
                   40415:        ZEND_NULL_HANDLER,
                   40416:        ZEND_NULL_HANDLER,
                   40417:        ZEND_NULL_HANDLER,
                   40418:        ZEND_NULL_HANDLER,
                   40419:        ZEND_NULL_HANDLER,
                   40420:        ZEND_NULL_HANDLER,
                   40421:        ZEND_NULL_HANDLER,
                   40422:        ZEND_NULL_HANDLER,
                   40423:        ZEND_NULL_HANDLER,
                   40424:        ZEND_NULL_HANDLER,
                   40425:        ZEND_NULL_HANDLER,
                   40426:        ZEND_NULL_HANDLER,
                   40427:        ZEND_NULL_HANDLER,
                   40428:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40429:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40430:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40431:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40432:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40433:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40434:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40435:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40436:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40437:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40438:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40439:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40440:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40441:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40442:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40443:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40444:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40445:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40446:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40447:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40448:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40449:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40450:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40451:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40452:        ZEND_ADD_TRAIT_SPEC_HANDLER,
                   40453:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40454:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40455:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40456:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40457:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40458:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40459:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40460:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40461:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40462:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40463:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40464:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40465:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40466:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40467:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40468:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40469:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40470:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40471:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40472:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40473:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40474:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40475:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40476:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40477:        ZEND_BIND_TRAITS_SPEC_HANDLER,
                   40478:        ZEND_NULL_HANDLER,
                   40479:        ZEND_NULL_HANDLER,
                   40480:        ZEND_NULL_HANDLER,
                   40481:        ZEND_NULL_HANDLER,
                   40482:        ZEND_NULL_HANDLER,
                   40483:        ZEND_NULL_HANDLER,
                   40484:        ZEND_NULL_HANDLER,
                   40485:        ZEND_NULL_HANDLER,
                   40486:        ZEND_NULL_HANDLER,
                   40487:        ZEND_NULL_HANDLER,
                   40488:        ZEND_NULL_HANDLER,
                   40489:        ZEND_NULL_HANDLER,
                   40490:        ZEND_NULL_HANDLER,
                   40491:        ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
1.1       misho    40492:        ZEND_NULL_HANDLER,
                   40493:        ZEND_NULL_HANDLER,
                   40494:        ZEND_NULL_HANDLER,
                   40495:        ZEND_NULL_HANDLER,
                   40496:        ZEND_NULL_HANDLER,
                   40497:        ZEND_NULL_HANDLER,
                   40498:        ZEND_NULL_HANDLER,
                   40499:        ZEND_NULL_HANDLER,
                   40500:        ZEND_NULL_HANDLER,
                   40501:        ZEND_NULL_HANDLER,
                   40502:        ZEND_NULL_HANDLER,
1.1.1.2   misho    40503:        ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER,
                   40504:        ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER,
                   40505:        ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER,
                   40506:        ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER,
                   40507:        ZEND_QM_ASSIGN_VAR_SPEC_CONST_HANDLER,
                   40508:        ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER,
                   40509:        ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER,
                   40510:        ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER,
                   40511:        ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER,
                   40512:        ZEND_QM_ASSIGN_VAR_SPEC_TMP_HANDLER,
                   40513:        ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER,
                   40514:        ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER,
                   40515:        ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER,
                   40516:        ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER,
                   40517:        ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER,
1.1       misho    40518:        ZEND_NULL_HANDLER,
                   40519:        ZEND_NULL_HANDLER,
                   40520:        ZEND_NULL_HANDLER,
                   40521:        ZEND_NULL_HANDLER,
                   40522:        ZEND_NULL_HANDLER,
1.1.1.2   misho    40523:        ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER,
                   40524:        ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER,
                   40525:        ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER,
                   40526:        ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER,
                   40527:        ZEND_QM_ASSIGN_VAR_SPEC_CV_HANDLER,
                   40528:        ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER,
                   40529:        ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER,
                   40530:        ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER,
                   40531:        ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER,
                   40532:        ZEND_JMP_SET_VAR_SPEC_CONST_HANDLER,
                   40533:        ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER,
                   40534:        ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER,
                   40535:        ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER,
                   40536:        ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER,
                   40537:        ZEND_JMP_SET_VAR_SPEC_TMP_HANDLER,
                   40538:        ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER,
                   40539:        ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER,
                   40540:        ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER,
                   40541:        ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER,
                   40542:        ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER,
1.1       misho    40543:        ZEND_NULL_HANDLER,
                   40544:        ZEND_NULL_HANDLER,
                   40545:        ZEND_NULL_HANDLER,
                   40546:        ZEND_NULL_HANDLER,
                   40547:        ZEND_NULL_HANDLER,
1.1.1.2   misho    40548:        ZEND_JMP_SET_VAR_SPEC_CV_HANDLER,
                   40549:        ZEND_JMP_SET_VAR_SPEC_CV_HANDLER,
                   40550:        ZEND_JMP_SET_VAR_SPEC_CV_HANDLER,
                   40551:        ZEND_JMP_SET_VAR_SPEC_CV_HANDLER,
                   40552:        ZEND_JMP_SET_VAR_SPEC_CV_HANDLER,
1.1       misho    40553:        ZEND_NULL_HANDLER
                   40554:   };
                   40555:   zend_opcode_handlers = (opcode_handler_t*)labels;
                   40556: }
                   40557: static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op)
                   40558: {
                   40559:                static const int zend_vm_decode[] = {
                   40560:                        _UNUSED_CODE, /* 0              */
                   40561:                        _CONST_CODE,  /* 1 = IS_CONST   */
                   40562:                        _TMP_CODE,    /* 2 = IS_TMP_VAR */
                   40563:                        _UNUSED_CODE, /* 3              */
                   40564:                        _VAR_CODE,    /* 4 = IS_VAR     */
                   40565:                        _UNUSED_CODE, /* 5              */
                   40566:                        _UNUSED_CODE, /* 6              */
                   40567:                        _UNUSED_CODE, /* 7              */
                   40568:                        _UNUSED_CODE, /* 8 = IS_UNUSED  */
                   40569:                        _UNUSED_CODE, /* 9              */
                   40570:                        _UNUSED_CODE, /* 10             */
                   40571:                        _UNUSED_CODE, /* 11             */
                   40572:                        _UNUSED_CODE, /* 12             */
                   40573:                        _UNUSED_CODE, /* 13             */
                   40574:                        _UNUSED_CODE, /* 14             */
                   40575:                        _UNUSED_CODE, /* 15             */
                   40576:                        _CV_CODE      /* 16 = IS_CV     */
                   40577:                };
1.1.1.2   misho    40578:                return zend_opcode_handlers[opcode * 25 + zend_vm_decode[op->op1_type] * 5 + zend_vm_decode[op->op2_type]];
1.1       misho    40579: }
                   40580: 
                   40581: ZEND_API void zend_vm_set_opcode_handler(zend_op* op)
                   40582: {
                   40583:        op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);
                   40584: }
                   40585: 
                   40586: ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS)
                   40587: {
                   40588:        return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
                   40589: }
                   40590: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>