Skip to content

Commit 5656643

Browse files
committed
Fix Intl Calendar::roll() method
This code really needs to be review as it's convoluted for no good reason
1 parent 09409dc commit 5656643

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

ext/intl/calendar/calendar_methods.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ U_CFUNC PHP_FUNCTION(intlcal_roll)
431431
value;
432432
zval args_a[3] = {0},
433433
*args = args_a;
434-
zend_bool bool_variant_val = (zend_bool)-1;
434+
zend_bool bool_variant_val;
435435
CALENDAR_METHOD_INIT_VARS;
436436

437437
object = getThis();
@@ -451,7 +451,8 @@ U_CFUNC PHP_FUNCTION(intlcal_roll)
451451
== FAILURE) {
452452
RETURN_THROWS();
453453
}
454-
bool_variant_val = Z_TYPE(args[1]) == IS_TRUE? 1 : 0;
454+
/* false corresponds to rolling down, i.e. -1 */
455+
value = Z_TYPE(args[1]) == IS_TRUE? 1 : -1;
455456
} else if (zend_parse_method_parameters(ZEND_NUM_ARGS(), object,
456457
"Oll", &object, Calendar_ce_ptr, &field, &value) == FAILURE) {
457458
RETURN_THROWS();
@@ -462,22 +463,15 @@ U_CFUNC PHP_FUNCTION(intlcal_roll)
462463
"intlcal_roll: invalid field", 0);
463464
RETURN_FALSE;
464465
}
465-
if (bool_variant_val == (zend_bool)-1 &&
466-
(value < INT32_MIN || value > INT32_MAX)) {
466+
if (value < INT32_MIN || value > INT32_MAX) {
467467
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
468468
"intlcal_roll: value out of bounds", 0);
469469
RETURN_FALSE;
470470
}
471471

472472
CALENDAR_METHOD_FETCH_OBJECT;
473473

474-
if (bool_variant_val != (zend_bool)-1) {
475-
co->ucal->roll((UCalendarDateFields)field, (UBool)bool_variant_val,
476-
CALENDAR_ERROR_CODE(co));
477-
} else {
478-
co->ucal->roll((UCalendarDateFields)field, (int32_t)value,
479-
CALENDAR_ERROR_CODE(co));
480-
}
474+
co->ucal->roll((UCalendarDateFields)field, (int32_t)value, CALENDAR_ERROR_CODE(co));
481475
INTL_METHOD_CHECK_STATUS(co, "intlcal_roll: Error calling ICU Calendar::roll");
482476

483477
RETURN_TRUE;

0 commit comments

Comments
 (0)