}
opline->opcode = ZEND_SEND_VAL;
break;
+ case ZEND_CASE: {
+ zend_op *m, *n;
+ int brk = op_array->last_brk_cont;
+ while (brk--) {
+ if (op_array->brk_cont_array[brk].start <= (opline - op_array->opcodes) &&
+ op_array->brk_cont_array[brk].brk > (opline - op_array->opcodes)) {
+ break;
+ }
+ }
+ m = opline;
+ n = op_array->opcodes + op_array->brk_cont_array[brk].brk + 1;
+ while (m < n) {
+ if (ZEND_OP1_TYPE(m) == IS_VAR &&
+ ZEND_OP1(m).var == var) {
+ if (m->opcode == ZEND_CASE) {
+ zval old_val;
+ old_val = *val;
+ zval_copy_ctor(val);
+ update_op1_const(op_array, m, val TSRMLS_CC);
+ *val = old_val;
+ } else if (m->opcode == ZEND_SWITCH_FREE) {
+ MAKE_NOP(m);
+ } else {
+ ZEND_ASSERT(0);
+ }
+ }
+ m++;
+ }
+ zval_dtor(val);
+ return 1;
+ }
+ case ZEND_SWITCH_FREE:
+ MAKE_NOP(opline);
+ zval_dtor(val);
+ return 1;
default:
break;
}
return $b;
}
var_dump(b());
+
+function c($b = "bad") {
+ switch (extension_loaded("standard")) {
+ case 0 : return "LALALAL";
+ case 1 : return "okey";
+ default : return "bad";
+ }
+}
+var_dump(c());
+
?>
--EXPECT--
string(4) "okey"
string(4) "okey"
+string(4) "okey"