summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/aggregation.c49
-rw-r--r--ext/standard/basic_functions.c4
2 files changed, 37 insertions, 16 deletions
diff --git a/ext/standard/aggregation.c b/ext/standard/aggregation.c
index 0ec41c7f45..0bed0a50c8 100644
--- a/ext/standard/aggregation.c
+++ b/ext/standard/aggregation.c
@@ -86,20 +86,25 @@ static void aggregate_methods(zend_class_entry *ce, zend_class_entry *from_ce, i
uint func_name_len;
ulong num_key;
zval *list_hash = NULL;
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
pcre *re = NULL;
pcre_extra *re_extra = NULL;
int re_options = 0;
+#endif
/*
* Flip the array for easy lookup, or compile the regexp.
*/
if (aggr_type == AGGREGATE_BY_LIST) {
list_hash = array_to_hash(aggr_filter);
- } else if (aggr_type == AGGREGATE_BY_REGEXP) {
+ }
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+ else if (aggr_type == AGGREGATE_BY_REGEXP) {
if ((re = pcre_get_compiled_regex(Z_STRVAL_P(aggr_filter), &re_extra, &re_options)) == NULL) {
return;
}
}
+#endif
/*
* "Just because it's not nice doesn't mean it's not miraculous."
@@ -122,9 +127,13 @@ static void aggregate_methods(zend_class_entry *ce, zend_class_entry *from_ce, i
/* 2. private methods (heh, like we really have them) */
func_name[0] == '_' ||
/* 3. explicitly excluded methods */
- (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), func_name, func_name_len)) ||
+ (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), func_name, func_name_len))
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+ ||
/* 4. methods matching regexp as modified by the exclusion flag */
- (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, func_name, func_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1) {
+ (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, func_name, func_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1
+#endif
+ ) {
zend_hash_move_forward_ex(&from_ce->function_table, &pos);
continue;
}
@@ -178,9 +187,11 @@ static void aggregate_properties(zval *obj, zend_class_entry *from_ce, int aggr_
uint prop_name_len;
ulong num_key;
zval *list_hash = NULL;
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
pcre *re = NULL;
pcre_extra *re_extra = NULL;
int re_options = 0;
+#endif
if (!from_ce->constants_updated) {
zend_hash_apply_with_argument(&from_ce->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
@@ -192,11 +203,14 @@ static void aggregate_properties(zval *obj, zend_class_entry *from_ce, int aggr_
*/
if (aggr_type == AGGREGATE_BY_LIST) {
list_hash = array_to_hash(aggr_filter);
- } else if (aggr_type == AGGREGATE_BY_REGEXP) {
+ }
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+ else if (aggr_type == AGGREGATE_BY_REGEXP) {
if ((re = pcre_get_compiled_regex(Z_STRVAL_P(aggr_filter), &re_extra, &re_options)) == NULL) {
return;
}
}
+#endif
/*
* "Just because it's not nice doesn't mean it's not miraculous."
@@ -217,9 +231,13 @@ static void aggregate_properties(zval *obj, zend_class_entry *from_ce, int aggr_
* 1. private properties (heh, like we really have them) */
if (prop_name[0] == '_' ||
/* 2. explicitly excluded properties */
- (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), prop_name, prop_name_len)) ||
+ (aggr_type == AGGREGATE_BY_LIST && zend_hash_exists(Z_ARRVAL_P(list_hash), prop_name, prop_name_len))
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+ ||
/* 3. properties matching regexp as modified by the exclusion flag */
- (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, prop_name, prop_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1) {
+ (aggr_type == AGGREGATE_BY_REGEXP && (pcre_exec(re, re_extra, prop_name, prop_name_len-1, 0, 0, NULL, 0) < 0) ^ exclude) == 1
+#endif
+ ) {
zend_hash_move_forward_ex(&from_ce->default_properties, &pos);
continue;
}
@@ -478,15 +496,6 @@ PHP_FUNCTION(aggregate_methods_by_list)
/* }}} */
-/* {{{ proto void aggregate_methods_by_regexp(object obj, string class, string regexp [, bool exclude])
- */
-PHP_FUNCTION(aggregate_methods_by_regexp)
-{
- aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_METHODS, AGGREGATE_BY_REGEXP);
-}
-/* }}} */
-
-
/* {{{ proto void aggregate_properties(object obj, string class)
*/
PHP_FUNCTION(aggregate_properties)
@@ -504,6 +513,15 @@ PHP_FUNCTION(aggregate_properties_by_list)
}
/* }}} */
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+/* {{{ proto void aggregate_methods_by_regexp(object obj, string class, string regexp [, bool exclude])
+ */
+PHP_FUNCTION(aggregate_methods_by_regexp)
+{
+ aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_METHODS, AGGREGATE_BY_REGEXP);
+}
+/* }}} */
+
/* {{{ proto void aggregate_properties_by_regexp(object obj, string class, string regexp [, bool exclude])
*/
@@ -512,6 +530,7 @@ PHP_FUNCTION(aggregate_properties_by_regexp)
aggregate(INTERNAL_FUNCTION_PARAM_PASSTHRU, AGGREGATE_PROPERTIES, AGGREGATE_BY_REGEXP);
}
/* }}} */
+#endif
/* {{{ proto array aggregation_info(object obj)
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 5dbc1a1a02..69d224392d 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -819,10 +819,12 @@ function_entry basic_functions[] = {
PHP_FE(aggregate, first_arg_force_ref)
PHP_FE(aggregate_methods, first_arg_force_ref)
PHP_FE(aggregate_methods_by_list, first_arg_force_ref)
- PHP_FE(aggregate_methods_by_regexp, first_arg_force_ref)
PHP_FE(aggregate_properties, first_arg_force_ref)
PHP_FE(aggregate_properties_by_list, first_arg_force_ref)
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
+ PHP_FE(aggregate_methods_by_regexp, first_arg_force_ref)
PHP_FE(aggregate_properties_by_regexp, first_arg_force_ref)
+#endif
PHP_FE(deaggregate, first_arg_force_ref)
PHP_FE(aggregation_info, first_arg_force_ref)
{NULL, NULL, NULL}