@@ -313,16 +313,23 @@ ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMP|VAR|CV, ANY)
313
313
ZEND_VM_NEXT_OPCODE ();
314
314
}
315
315
316
- ZEND_VM_HANDLER (13 , ZEND_BOOL_NOT , CONST |TMP | VAR |CV , ANY )
316
+ ZEND_VM_HANDLER (13 , ZEND_BOOL_NOT , CONST |TMPVAR |CV , ANY )
317
317
{
318
318
USE_OPLINE
319
+ zval * val ;
319
320
zend_free_op free_op1 ;
320
321
321
322
SAVE_OPLINE ();
322
- boolean_not_function (EX_VAR (opline -> result .var ),
323
- GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R ) TSRMLS_CC );
324
- FREE_OP1 ();
325
- CHECK_EXCEPTION ();
323
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
324
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
325
+ ZVAL_FALSE (EX_VAR (opline -> result .var ));
326
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
327
+ ZVAL_TRUE (EX_VAR (opline -> result .var ));
328
+ } else {
329
+ ZVAL_BOOL (EX_VAR (opline -> result .var ), !i_zend_is_true (val TSRMLS_CC ));
330
+ FREE_OP1 ();
331
+ CHECK_EXCEPTION ();
332
+ }
326
333
ZEND_VM_NEXT_OPCODE ();
327
334
}
328
335
@@ -441,7 +448,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMP|VAR
441
448
}
442
449
ZEND_VM_DISPATCH_TO_HELPER_EX (zend_binary_assign_op_obj_helper , binary_op , binary_op );
443
450
} else {
444
- zval * dim = GET_OP2_ZVAL_PTR_DEREF (BP_VAR_R );
451
+ zval * dim = GET_OP2_ZVAL_PTR (BP_VAR_R );
445
452
446
453
zend_fetch_dimension_address_RW (& rv , container , dim , OP2_TYPE TSRMLS_CC );
447
454
value = get_zval_ptr_deref ((opline + 1 )-> op1_type , & (opline + 1 )-> op1 , execute_data , & free_op_data1 , BP_VAR_R );
@@ -1844,20 +1851,22 @@ ZEND_VM_HANDLER(42, ZEND_JMP, ANY, ANY)
1844
1851
ZEND_VM_CONTINUE ();
1845
1852
}
1846
1853
1847
- ZEND_VM_HANDLER (43 , ZEND_JMPZ , CONST |TMP | VAR |CV , ANY )
1854
+ ZEND_VM_HANDLER (43 , ZEND_JMPZ , CONST |TMPVAR |CV , ANY )
1848
1855
{
1849
1856
USE_OPLINE
1850
1857
zend_free_op free_op1 ;
1851
1858
zval * val ;
1852
1859
1853
1860
SAVE_OPLINE ();
1854
- val = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
1861
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
1855
1862
1856
- if (OP1_TYPE == IS_TMP_VAR ) {
1857
- if (Z_TYPE_P (val ) == IS_TRUE ) {
1858
- ZEND_VM_SET_OPCODE (opline + 1 );
1859
- ZEND_VM_CONTINUE ();
1860
- } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1863
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
1864
+ ZEND_VM_SET_OPCODE (opline + 1 );
1865
+ ZEND_VM_CONTINUE ();
1866
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1867
+ if (OP1_TYPE == IS_CV ) {
1868
+ ZEND_VM_JMP (opline -> op2 .jmp_addr );
1869
+ } else {
1861
1870
ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1862
1871
ZEND_VM_CONTINUE ();
1863
1872
}
@@ -1875,20 +1884,22 @@ ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMP|VAR|CV, ANY)
1875
1884
ZEND_VM_JMP (opline );
1876
1885
}
1877
1886
1878
- ZEND_VM_HANDLER (44 , ZEND_JMPNZ , CONST |TMP | VAR |CV , ANY )
1887
+ ZEND_VM_HANDLER (44 , ZEND_JMPNZ , CONST |TMPVAR |CV , ANY )
1879
1888
{
1880
1889
USE_OPLINE
1881
1890
zend_free_op free_op1 ;
1882
1891
zval * val ;
1883
1892
1884
1893
SAVE_OPLINE ();
1885
- val = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
1894
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
1886
1895
1887
- if (OP1_TYPE == IS_TMP_VAR ) {
1888
- if (Z_TYPE_P (val ) == IS_TRUE ) {
1889
- ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1890
- ZEND_VM_CONTINUE ();
1891
- } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1896
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
1897
+ ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1898
+ ZEND_VM_CONTINUE ();
1899
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1900
+ if (OP1_TYPE == IS_CV ) {
1901
+ ZEND_VM_NEXT_OPCODE ();
1902
+ } else {
1892
1903
ZEND_VM_SET_OPCODE (opline + 1 );
1893
1904
ZEND_VM_CONTINUE ();
1894
1905
}
@@ -1906,20 +1917,22 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMP|VAR|CV, ANY)
1906
1917
ZEND_VM_JMP (opline );
1907
1918
}
1908
1919
1909
- ZEND_VM_HANDLER (45 , ZEND_JMPZNZ , CONST |TMP | VAR |CV , ANY )
1920
+ ZEND_VM_HANDLER (45 , ZEND_JMPZNZ , CONST |TMPVAR |CV , ANY )
1910
1921
{
1911
1922
USE_OPLINE
1912
1923
zend_free_op free_op1 ;
1913
1924
zval * val ;
1914
1925
1915
1926
SAVE_OPLINE ();
1916
- val = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
1927
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
1917
1928
1918
- if (OP1_TYPE == IS_TMP_VAR ) {
1919
- if (EXPECTED (Z_TYPE_P (val ) == IS_TRUE )) {
1920
- ZEND_VM_SET_RELATIVE_OPCODE (opline , opline -> extended_value );
1921
- ZEND_VM_CONTINUE ();
1922
- } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1929
+ if (EXPECTED (Z_TYPE_P (val ) == IS_TRUE )) {
1930
+ ZEND_VM_SET_RELATIVE_OPCODE (opline , opline -> extended_value );
1931
+ ZEND_VM_CONTINUE ();
1932
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1933
+ if (OP1_TYPE == IS_CV ) {
1934
+ ZEND_VM_JMP (opline -> op2 .jmp_addr );
1935
+ } else {
1923
1936
ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1924
1937
ZEND_VM_CONTINUE ();
1925
1938
}
@@ -1937,22 +1950,24 @@ ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMP|VAR|CV, ANY)
1937
1950
ZEND_VM_JMP (opline );
1938
1951
}
1939
1952
1940
- ZEND_VM_HANDLER (46 , ZEND_JMPZ_EX , CONST |TMP | VAR |CV , ANY )
1953
+ ZEND_VM_HANDLER (46 , ZEND_JMPZ_EX , CONST |TMPVAR |CV , ANY )
1941
1954
{
1942
1955
USE_OPLINE
1943
1956
zend_free_op free_op1 ;
1944
1957
zval * val ;
1945
1958
1946
1959
SAVE_OPLINE ();
1947
- val = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
1960
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
1948
1961
1949
- if (OP1_TYPE == IS_TMP_VAR ) {
1950
- if (Z_TYPE_P (val ) == IS_TRUE ) {
1951
- ZVAL_TRUE (EX_VAR (opline -> result .var ));
1952
- ZEND_VM_SET_OPCODE (opline + 1 );
1953
- ZEND_VM_CONTINUE ();
1954
- } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1955
- ZVAL_FALSE (EX_VAR (opline -> result .var ));
1962
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
1963
+ ZVAL_TRUE (EX_VAR (opline -> result .var ));
1964
+ ZEND_VM_SET_OPCODE (opline + 1 );
1965
+ ZEND_VM_CONTINUE ();
1966
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1967
+ ZVAL_FALSE (EX_VAR (opline -> result .var ));
1968
+ if (OP1_TYPE == IS_CV ) {
1969
+ ZEND_VM_JMP (opline -> op2 .jmp_addr );
1970
+ } else {
1956
1971
ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1957
1972
ZEND_VM_CONTINUE ();
1958
1973
}
@@ -1973,22 +1988,24 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMP|VAR|CV, ANY)
1973
1988
ZEND_VM_JMP (opline );
1974
1989
}
1975
1990
1976
- ZEND_VM_HANDLER (47 , ZEND_JMPNZ_EX , CONST |TMP | VAR |CV , ANY )
1991
+ ZEND_VM_HANDLER (47 , ZEND_JMPNZ_EX , CONST |TMPVAR |CV , ANY )
1977
1992
{
1978
1993
USE_OPLINE
1979
1994
zend_free_op free_op1 ;
1980
1995
zval * val ;
1981
1996
1982
1997
SAVE_OPLINE ();
1983
- val = GET_OP1_ZVAL_PTR_DEREF (BP_VAR_R );
1998
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
1984
1999
1985
- if (OP1_TYPE == IS_TMP_VAR ) {
1986
- if (Z_TYPE_P (val ) == IS_TRUE ) {
1987
- ZVAL_TRUE (EX_VAR (opline -> result .var ));
1988
- ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
1989
- ZEND_VM_CONTINUE ();
1990
- } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
1991
- ZVAL_FALSE (EX_VAR (opline -> result .var ));
2000
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
2001
+ ZVAL_TRUE (EX_VAR (opline -> result .var ));
2002
+ ZEND_VM_SET_OPCODE (opline -> op2 .jmp_addr );
2003
+ ZEND_VM_CONTINUE ();
2004
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
2005
+ ZVAL_FALSE (EX_VAR (opline -> result .var ));
2006
+ if (OP1_TYPE == IS_CV ) {
2007
+ ZEND_VM_NEXT_OPCODE ();
2008
+ } else {
1992
2009
ZEND_VM_SET_OPCODE (opline + 1 );
1993
2010
ZEND_VM_CONTINUE ();
1994
2011
}
@@ -2512,11 +2529,11 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV)
2512
2529
}
2513
2530
}
2514
2531
2515
- ZEND_VM_HANDLER (118 , ZEND_INIT_USER_CALL , CONST , CONST |TMP | VAR |CV )
2532
+ ZEND_VM_HANDLER (118 , ZEND_INIT_USER_CALL , CONST , CONST |TMPVAR |CV )
2516
2533
{
2517
2534
USE_OPLINE
2518
2535
zend_free_op free_op2 ;
2519
- zval * function_name = GET_OP2_ZVAL_PTR_DEREF (BP_VAR_R );
2536
+ zval * function_name = GET_OP2_ZVAL_PTR (BP_VAR_R );
2520
2537
zend_fcall_info_cache fcc ;
2521
2538
char * error = NULL ;
2522
2539
zend_function * func ;
@@ -3599,15 +3616,20 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
3599
3616
ZEND_VM_HANDLER (52 , ZEND_BOOL , CONST |TMPVAR |CV , ANY )
3600
3617
{
3601
3618
USE_OPLINE
3619
+ zval * val ;
3602
3620
zend_free_op free_op1 ;
3603
- zval * retval = EX_VAR (opline -> result .var );
3604
3621
3605
3622
SAVE_OPLINE ();
3606
- /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
3607
- ZVAL_BOOL (retval , i_zend_is_true (GET_OP1_ZVAL_PTR (BP_VAR_R ) TSRMLS_CC ));
3608
- FREE_OP1 ();
3609
-
3610
- CHECK_EXCEPTION ();
3623
+ val = GET_OP1_ZVAL_PTR (BP_VAR_R );
3624
+ if (Z_TYPE_P (val ) == IS_TRUE ) {
3625
+ ZVAL_TRUE (EX_VAR (opline -> result .var ));
3626
+ } else if (EXPECTED (Z_TYPE_P (val ) <= IS_TRUE )) {
3627
+ ZVAL_FALSE (EX_VAR (opline -> result .var ));
3628
+ } else {
3629
+ ZVAL_BOOL (EX_VAR (opline -> result .var ), i_zend_is_true (val TSRMLS_CC ));
3630
+ FREE_OP1 ();
3631
+ CHECK_EXCEPTION ();
3632
+ }
3611
3633
ZEND_VM_NEXT_OPCODE ();
3612
3634
}
3613
3635
0 commit comments