1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
--TEST--
Property types in inference
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
opcache.opt_debug_level=0x200000
opcache.preload=
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
class Test {
public bool $public;
protected int $protected;
private float $private;
public function inTest() {
var_dump($this->public, $this->protected, $this->private);
}
public function inTestWithTest2(Test2 $test2) {
var_dump($test2->public, $test2->protected, $test2->private);
}
}
class Test2 extends Test {
private array $private;
public function inTest2() {
var_dump($this->public, $this->protected, $this->private);
}
}
function noScope(Test $test) {
var_dump($test->public, $test->protected, $test->private);
}
?>
--EXPECTF--
$_main: ; (lines=1, args=0, vars=0, tmps=0, ssa_vars=0, no_loops)
; (before dfa pass)
; %s
; return [long] RANGE[1..1]
BB0: start exit lines=[0-0]
; level=0
RETURN int(1)
noScope: ; (lines=10, args=1, vars=1, tmps=1, ssa_vars=5, no_loops)
; (before dfa pass)
; %s
; return [null] RANGE[0..0]
; #0.CV0($test) NOVAL [undef]
BB0: start exit lines=[0-9]
; level=0
#1.CV0($test) [object (instanceof Test)] = RECV 1
INIT_FCALL 3 %d string("var_dump")
#2.T1 [bool] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("public")
SEND_VAL #2.T1 [bool] 1
#3.T1 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("protected")
SEND_VAL #3.T1 [any] 2
#4.T1 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("private")
SEND_VAL #4.T1 [any] 3
DO_ICALL
RETURN null
Test::inTest: ; (lines=9, args=0, vars=0, tmps=1, ssa_vars=3, no_loops)
; (before dfa pass)
; %s
; return [null] RANGE[0..0]
BB0: start exit lines=[0-8]
; level=0
INIT_FCALL 3 %d string("var_dump")
#0.T0 [bool] = FETCH_OBJ_R THIS string("public")
SEND_VAL #0.T0 [bool] 1
#1.T0 [long] = FETCH_OBJ_R THIS string("protected")
SEND_VAL #1.T0 [long] 2
#2.T0 [double] = FETCH_OBJ_R THIS string("private")
SEND_VAL #2.T0 [double] 3
DO_ICALL
RETURN null
Test::inTestWithTest2: ; (lines=10, args=1, vars=1, tmps=1, ssa_vars=5, no_loops)
; (before dfa pass)
; %s
; return [null] RANGE[0..0]
; #0.CV0($test2) NOVAL [undef]
BB0: start exit lines=[0-9]
; level=0
#1.CV0($test2) [object (instanceof Test2)] = RECV 1
INIT_FCALL 3 %d string("var_dump")
#2.T1 [bool] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("public")
SEND_VAL #2.T1 [bool] 1
#3.T1 [long] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("protected")
SEND_VAL #3.T1 [long] 2
#4.T1 [double] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("private")
SEND_VAL #4.T1 [double] 3
DO_ICALL
RETURN null
Test2::inTest2: ; (lines=9, args=0, vars=0, tmps=1, ssa_vars=3, no_loops)
; (before dfa pass)
; %s
; return [null] RANGE[0..0]
BB0: start exit lines=[0-8]
; level=0
INIT_FCALL 3 %d string("var_dump")
#0.T0 [bool] = FETCH_OBJ_R THIS string("public")
SEND_VAL #0.T0 [bool] 1
#1.T0 [long] = FETCH_OBJ_R THIS string("protected")
SEND_VAL #1.T0 [long] 2
#2.T0 [array of [any, ref]] = FETCH_OBJ_R THIS string("private")
SEND_VAL #2.T0 [array of [any, ref]] 3
DO_ICALL
RETURN null
|