summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.h1
-rw-r--r--Zend/zend_exceptions.c2
-rw-r--r--Zend/zend_exceptions.h2
-rw-r--r--Zend/zend_execute.h2
-rw-r--r--Zend/zend_execute_API.c1
-rw-r--r--Zend/zend_generators.c2
-rw-r--r--Zend/zend_objects_API.h18
-rw-r--r--Zend/zend_vm_def.h10
-rw-r--r--Zend/zend_vm_execute.h10
-rwxr-xr-xext/ext_skel4
-rw-r--r--ext/standard/tests/strings/setlocale_variation2.phpt4
11 files changed, 24 insertions, 32 deletions
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 573f1fe5ec..cf1256ab3c 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -367,7 +367,6 @@ struct _zend_execute_data {
zend_uchar frame_kind;
zend_class_entry *called_scope;
zend_object *object;
- zend_execute_data *prev_nested_call;
zend_execute_data *prev_execute_data;
zval *return_value;
zend_class_entry *scope; /* function scope (self) */
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index 999b6d790e..b3770526db 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -85,7 +85,7 @@ void zend_exception_restore(TSRMLS_D) /* {{{ */
}
/* }}} */
-void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
+ZEND_API void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
{
#ifdef HAVE_DTRACE
if (DTRACE_EXCEPTION_THROWN_ENABLED()) {
diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h
index 5aa6544e5d..3118ce1053 100644
--- a/Zend/zend_exceptions.h
+++ b/Zend/zend_exceptions.h
@@ -30,7 +30,7 @@ ZEND_API void zend_exception_set_previous(zend_object *exception, zend_object *a
ZEND_API void zend_exception_save(TSRMLS_D);
ZEND_API void zend_exception_restore(TSRMLS_D);
-void zend_throw_exception_internal(zval *exception TSRMLS_DC);
+ZEND_API void zend_throw_exception_internal(zval *exception TSRMLS_DC);
void zend_register_default_exception(TSRMLS_D);
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index e5ab12d9c5..ce01e51d3f 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -219,7 +219,7 @@ static zend_always_inline zend_execute_data *zend_vm_stack_push_call_frame(zend_
call->flags = flags;
call->called_scope = called_scope;
call->object = object;
- call->prev_nested_call = prev;
+ call->prev_execute_data = prev;
return call;
}
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 70984fbac5..be8b5afe09 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -700,7 +700,6 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
dummy_execute_data = *EG(current_execute_data);
dummy_execute_data.prev_execute_data = EG(current_execute_data);
dummy_execute_data.call = NULL;
- dummy_execute_data.prev_nested_call = NULL;
dummy_execute_data.opline = NULL;
dummy_execute_data.func = NULL;
EG(current_execute_data) = &dummy_execute_data;
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index b038600ead..4c64cb7590 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -71,7 +71,7 @@ static void zend_generator_cleanup_unfinished_execution(zend_generator *generato
if (execute_data->call->object) {
OBJ_RELEASE(execute_data->call->object);
}
- execute_data->call = execute_data->call->prev_nested_call;
+ execute_data->call = execute_data->call->prev_execute_data;
}
}
/* }}} */
diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h
index df22a26cc9..baa1a28bb4 100644
--- a/Zend/zend_objects_API.h
+++ b/Zend/zend_objects_API.h
@@ -37,14 +37,7 @@
} while (0)
-#define OBJ_RELEASE(obj) do { \
- zend_object *_obj = (obj); \
- if (--GC_REFCOUNT(_obj) == 0) { \
- zend_objects_store_del(_obj TSRMLS_CC); \
- } else { \
- gc_possible_root(&_obj->gc TSRMLS_CC); \
- } \
- } while (0)
+#define OBJ_RELEASE(obj) zend_object_release(obj TSRMLS_CC)
typedef struct _zend_objects_store {
zend_object **object_buckets;
@@ -78,6 +71,15 @@ ZEND_API zend_object *zend_object_create_proxy(zval *object, zval *member TSRMLS
ZEND_API zend_object_handlers *zend_get_std_object_handlers(void);
END_EXTERN_C()
+static zend_always_inline void zend_object_release(zend_object *obj TSRMLS_CC)
+{
+ if (--GC_REFCOUNT(obj) == 0) {
+ zend_objects_store_del(obj TSRMLS_CC);
+ } else if (UNEXPECTED(!GC_INFO(obj))) {
+ gc_possible_root(&obj->gc TSRMLS_CC);
+ }
+}
+
#endif /* ZEND_OBJECTS_H */
/*
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 02c93477e3..489e27202b 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2534,7 +2534,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY)
zend_function *fbc = call->func;
SAVE_OPLINE();
- EX(call) = call->prev_nested_call;
+ EX(call) = call->prev_execute_data;
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", fbc->common.scope->name->val, fbc->common.function_name->val);
@@ -2710,11 +2710,7 @@ ZEND_VM_C_LABEL(fcall_end_change_scope):
zend_object_store_ctor_failed(Z_OBJ(EG(This)) TSRMLS_CC);
}
}
- if (!Z_DELREF(EG(This))) {
- _zval_dtor_func_for_ptr(Z_COUNTED(EG(This)) ZEND_FILE_LINE_CC);
- } else if (UNEXPECTED(!Z_GC_INFO(EG(This)))) {
- gc_possible_root(Z_COUNTED(EG(This)) TSRMLS_CC);
- }
+ OBJ_RELEASE(Z_OBJ(EG(This)));
}
Z_OBJ(EG(This)) = EX(object);
EG(scope) = EX(scope);
@@ -5409,7 +5405,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
}
OBJ_RELEASE(call->object);
}
- EX(call) = call->prev_nested_call;
+ EX(call) = call->prev_execute_data;
zend_vm_stack_free_call_frame(call TSRMLS_CC);
call = EX(call);
} while (call);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 17858c2875..f1fde5034b 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -495,7 +495,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
zend_function *fbc = call->func;
SAVE_OPLINE();
- EX(call) = call->prev_nested_call;
+ EX(call) = call->prev_execute_data;
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", fbc->common.scope->name->val, fbc->common.function_name->val);
@@ -671,11 +671,7 @@ fcall_end_change_scope:
zend_object_store_ctor_failed(Z_OBJ(EG(This)) TSRMLS_CC);
}
}
- if (!Z_DELREF(EG(This))) {
- _zval_dtor_func_for_ptr(Z_COUNTED(EG(This)) ZEND_FILE_LINE_CC);
- } else if (UNEXPECTED(!Z_GC_INFO(EG(This)))) {
- gc_possible_root(Z_COUNTED(EG(This)) TSRMLS_CC);
- }
+ OBJ_RELEASE(Z_OBJ(EG(This)));
}
Z_OBJ(EG(This)) = EX(object);
EG(scope) = EX(scope);
@@ -1312,7 +1308,7 @@ static int ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
}
OBJ_RELEASE(call->object);
}
- EX(call) = call->prev_nested_call;
+ EX(call) = call->prev_execute_data;
zend_vm_stack_free_call_frame(call TSRMLS_CC);
call = EX(call);
} while (call);
diff --git a/ext/ext_skel b/ext/ext_skel
index e6b01fd4fc..c0c398d15e 100755
--- a/ext/ext_skel
+++ b/ext/ext_skel
@@ -156,12 +156,12 @@ if test "\$PHP_$EXTNAME" != "no"; then
dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL,
dnl [
- dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD)
+ dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/\$PHP_LIBDIR, ${EXTNAME}_SHARED_LIBADD)
dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ])
dnl ],[
dnl AC_MSG_ERROR([wrong $extname lib version or lib not found])
dnl ],[
- dnl -L\$${EXTNAME}_DIR/lib -lm
+ dnl -L\$${EXTNAME}_DIR/\$PHP_LIBDIR -lm
dnl ])
dnl
dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD)
diff --git a/ext/standard/tests/strings/setlocale_variation2.phpt b/ext/standard/tests/strings/setlocale_variation2.phpt
index 10ae22fe0c..5ebdfe8d50 100644
--- a/ext/standard/tests/strings/setlocale_variation2.phpt
+++ b/ext/standard/tests/strings/setlocale_variation2.phpt
@@ -20,9 +20,9 @@ echo "*** Testing setlocale() : usage variations ***\n";
function good_locale($locale) {
/**
- * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/show_bug.cgi?id=532487
+ * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/971416
**/
- return $locale !== 'tt_RU@iqtelif.UTF-8' && substr($locale, 0, 5) !== "no_NO";
+ return $locale !== 'tt_RU@iqtelif.UTF-8' && $locale !== 'no_NO.ISO-8859-1';
}
/* Prototype : array list_system_locales( void )