Skip to content

Commit 06473b1

Browse files
committed
Zend: reengineer how __debugInfo() magic method is handed
The primary motivation is to get rid of the bailout by using a type error, but also properly abort the output when an exception is thrown or the deprecation notice is promoted to an exception. This is effectively an internal API change as extensions are no longer allowed to return NULL to fast path an empty array.
1 parent 7d42145 commit 06473b1

24 files changed

+469
-372
lines changed

Zend/tests/debug_info/debug_info-error-0.0.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(0.0);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-0.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(0);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-1.0.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(1.0);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-1.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(1);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-debug_zval_dump-basic.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ debug_zval_dump($c);
1818

1919
?>
2020
--EXPECTF--
21-
Fatal error: __debuginfo() must return an array in %s on line %d
21+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
22+
Stack trace:
23+
#0 %s(%d): debug_zval_dump(Object(C))
24+
#1 {main}
25+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-debug_zval_dump-within-array.phpt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ $a = [
2121
debug_zval_dump($a);
2222
?>
2323
--EXPECTF--
24-
array(3) packed refcount(2){
25-
[0]=>
26-
string(3) "foo" interned
27-
[1]=>
28-
29-
Fatal error: __debuginfo() must return an array in %s on line %d
24+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
25+
Stack trace:
26+
#0 %s(%d): debug_zval_dump(Array)
27+
#1 {main}
28+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-debug_zval_dump-within-object.phpt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ $o->bar = 'bar';
2020
debug_zval_dump($o);
2121
?>
2222
--EXPECTF--
23-
object(stdClass)#1 (3) refcount(2){
24-
["foo"]=>
25-
string(3) "foo" interned
26-
["c"]=>
27-
28-
Fatal error: __debuginfo() must return an array in %s on line %d
23+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
24+
Stack trace:
25+
#0 %s(%d): debug_zval_dump(Object(stdClass))
26+
#1 {main}
27+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-empty_str.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C("");
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-false.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(false);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

Zend/tests/debug_info/debug_info-error-object.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ $c = new C(new stdClass);
1717
var_dump($c);
1818
?>
1919
--EXPECTF--
20-
Fatal error: __debuginfo() must return an array in %s on line %d
20+
Fatal error: Uncaught TypeError: __debuginfo() must return an array in %s:%d
21+
Stack trace:
22+
#0 %s(%d): var_dump(Object(C))
23+
#1 {main}
24+
thrown in %s on line %d

0 commit comments

Comments
 (0)