summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h147
1 files changed, 102 insertions, 45 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 805244e4a6..80a31331e5 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -6094,6 +6094,25 @@ static int ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER
ZEND_VM_NEXT_OPCODE();
}
+static int ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if IS_CONST != IS_UNUSED
+ USE_OPLINE
+#endif
+ SAVE_OPLINE();
+ if (IS_CONST == IS_UNUSED) {
+ zend_verify_missing_return_type(EX(func));
+ } else {
+ zval *retval_ptr;
+
+
+ retval_ptr = EX_CONSTANT(opline->op1);
+ zend_verify_return_type(EX(func), retval_ptr);
+ }
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -10093,6 +10112,25 @@ static int ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_O
ZEND_VM_NEXT_OPCODE();
}
+static int ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if IS_TMP_VAR != IS_UNUSED
+ USE_OPLINE
+#endif
+ SAVE_OPLINE();
+ if (IS_TMP_VAR == IS_UNUSED) {
+ zend_verify_missing_return_type(EX(func));
+ } else {
+ zval *retval_ptr;
+ zend_free_op free_op1;
+
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zend_verify_return_type(EX(func), retval_ptr);
+ }
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -11535,6 +11573,7 @@ static int ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
if (Z_OBJ(EX(call)->This)) {
OBJ_RELEASE(Z_OBJ(EX(call)->This));
}
+ ZVAL_UNDEF(param);
EX(call)->func = (zend_function*)&zend_pass_function;
EX(call)->called_scope = NULL;
Z_OBJ(EX(call)->This) = NULL;
@@ -14199,10 +14238,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
HANDLE_EXCEPTION();
}
return ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!(free_op2 != NULL)) {
- PZVAL_LOCK(value_ptr);
- }
}
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -14221,12 +14256,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
zend_assign_to_variable_reference(variable_ptr, value_ptr);
}
- if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!(free_op2 != NULL)) {
- Z_DELREF_P(variable_ptr);
- }
- }
-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
@@ -14924,6 +14953,25 @@ static int ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(Z
ZEND_VM_NEXT_OPCODE();
}
+static int ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if IS_VAR != IS_UNUSED
+ USE_OPLINE
+#endif
+ SAVE_OPLINE();
+ if (IS_VAR == IS_UNUSED) {
+ zend_verify_missing_return_type(EX(func));
+ } else {
+ zval *retval_ptr;
+ zend_free_op free_op1;
+
+ retval_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ zend_verify_return_type(EX(func), retval_ptr);
+ }
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -16209,10 +16257,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
HANDLE_EXCEPTION();
}
return ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!0) {
- PZVAL_LOCK(value_ptr);
- }
}
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -16231,12 +16275,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
zend_assign_to_variable_reference(variable_ptr, value_ptr);
}
- if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!0) {
- Z_DELREF_P(variable_ptr);
- }
- }
-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
@@ -20178,6 +20216,25 @@ static int ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPC
#endif
}
+static int ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if IS_UNUSED != IS_UNUSED
+ USE_OPLINE
+#endif
+ SAVE_OPLINE();
+ if (IS_UNUSED == IS_UNUSED) {
+ zend_verify_missing_return_type(EX(func));
+ } else {
+ zval *retval_ptr;
+
+
+ retval_ptr = NULL;
+ zend_verify_return_type(EX(func), retval_ptr);
+ }
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zval *array;
@@ -23662,6 +23719,7 @@ static int ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
if (Z_OBJ(EX(call)->This)) {
OBJ_RELEASE(Z_OBJ(EX(call)->This));
}
+ ZVAL_UNDEF(param);
EX(call)->func = (zend_function*)&zend_pass_function;
EX(call)->called_scope = NULL;
Z_OBJ(EX(call)->This) = NULL;
@@ -27364,10 +27422,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
HANDLE_EXCEPTION();
}
return ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!(free_op2 != NULL)) {
- PZVAL_LOCK(value_ptr);
- }
}
variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
@@ -27386,12 +27440,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
zend_assign_to_variable_reference(variable_ptr, value_ptr);
}
- if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!(free_op2 != NULL)) {
- Z_DELREF_P(variable_ptr);
- }
- }
-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
@@ -28352,6 +28400,25 @@ try_assign_dim_array:
ZEND_VM_NEXT_OPCODE();
}
+static int ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if IS_CV != IS_UNUSED
+ USE_OPLINE
+#endif
+ SAVE_OPLINE();
+ if (IS_CV == IS_UNUSED) {
+ zend_verify_missing_return_type(EX(func));
+ } else {
+ zval *retval_ptr;
+
+
+ retval_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ zend_verify_return_type(EX(func), retval_ptr);
+ }
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -30130,10 +30197,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER
HANDLE_EXCEPTION();
}
return ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!0) {
- PZVAL_LOCK(value_ptr);
- }
}
variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
@@ -30152,12 +30215,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER
zend_assign_to_variable_reference(variable_ptr, value_ptr);
}
- if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
- if (!0) {
- Z_DELREF_P(variable_ptr);
- }
- }
-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
@@ -39421,27 +39478,27 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
+ ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,