Dmitry Stogov
ba99aa133c
Fixed issues related to optimization and persitence of classes linked with interfaces, traits or internal classes.
2018-11-14 16:32:07 +03:00
Zeev Suraski
67e0138c0d
Future-proof email addresses...
2018-11-01 18:30:28 +02:00
Gabriel Caruso
2d48d734a2
Fix some misspellings
2018-02-06 16:59:00 +01:00
Dmitry Stogov
ca035f26aa
Moved "zval.u2.cache_slot" into free room of "zend_op"
2018-02-05 19:41:47 +03:00
Dmitry Stogov
3a794d39f0
Avoid repeatable ARG_SHOULD_BE_SENT_BY_REF() checks in FETCH_*FUNC_ARG and following SEND_VAR_EX. Perform the check once in a new CHECK_FUNC_ARG opcode and reuse in the following FETCH_*FUNC_ARG and SEND_FUNC_ARG (SEND_VAR_EX replacement).
2018-02-05 19:40:06 +03:00
Dmitry Stogov
bf7176c70f
Use reference-counting instead of duplication and separation, if really necessary.
2018-01-19 01:03:24 +03:00
Xinchen Hui
a6519d0514
year++
2018-01-02 12:57:58 +08:00
Dmitry Stogov
ef5ea48741
Always use IS_CONSTANT_AST (IS_CONSTANT is removed).
2017-10-10 10:11:05 +03:00
Dmitry Stogov
e70618aff6
Changed the way VM accesses constant operands in 64-bit builds.
2017-10-04 16:53:01 +03:00
Dmitry Stogov
b685991b44
Get rid of old compatibility macros
2017-07-04 09:50:57 +03:00
Sammy Kaye Powers
9e29f841ce
Update copyright headers to 2017
2017-01-02 09:30:12 -06:00
Nikita Popov
5f4f83220a
Don't inline if function has ref arguments
...
Otherwise we end up leaving opcodes like FETCH_DIM_W behind. The
test case demonstrates a leak in particular.
2016-11-12 18:49:41 +01:00
Nikita Popov
3c8beb16c4
Allow early-binding of ZEND_NEW args
2016-11-10 22:52:15 +01:00
Nikita Popov
62af7e0db8
Merge branch 'PHP-7.0' into PHP-7.1
2016-11-10 22:19:48 +01:00
Nikita Popov
bb3d0c0e17
Fcall optimization: Avoid FETCH_DIM_R with UNUSED op2
2016-11-10 21:36:46 +01:00
Dmitry Stogov
acdafc0a27
Prevent inlining through call_user_func() and call_user_func_array()
2016-07-01 00:16:54 +03:00
Dmitry Stogov
1a14533806
Introduce new CHECK_VAR instruction to keep warnings about undefined variables.
2016-06-30 21:40:34 +03:00
Dmitry Stogov
3a45242669
Disable inlining for $this->foo(), because $this may be not in object context
2016-06-30 21:05:48 +03:00
Dmitry Stogov
c3667a5eed
Disable inlining for $this->foo(), because $this may be used not in object context
2016-06-30 21:03:08 +03:00
Nikita Popov
6f8273e3bf
Fix RT_CONSTANT_EX typo
2016-06-30 17:42:57 +02:00
Dmitry Stogov
d898344663
Inline simple constant functions
2016-06-30 17:04:25 +03:00
Dmitry Stogov
b111da96d9
Split ZEND_SEND_VAR_NO_REF into ZEND_SEND_VAR_NO_REF and ZEND_SEND_VAR_NO_REF_EX (similar to ZEND_SEND_VAL) and remove ZEND_ARG_* flags.
2016-05-31 04:06:00 +03:00
Nikita Popov
d94b9545d6
Support known static/method calls in call graph
...
For this purpose extract the function lookup call into a helper
zend_optimizer_get_called_func().
2016-04-27 17:10:45 +02:00
Nikita Popov
4f54c15cb1
Ct bind private/final $this method call args
...
The test covers two edge-cases wrt opcache support.
2016-04-27 17:10:44 +02:00
Dmitry Stogov
b73517c1a1
Use DO_FCALL_BY_NAME instead of DO_FCALL, if possible
2016-04-14 16:07:28 +03:00
Nikita Popov
3ad0e1d6ca
Fix static method arg binding in traits
2016-04-08 01:48:21 +02:00
Nikita Popov
b867bd1c8d
Fix FETCH_CLASS_SELF comparisons
...
Turns out those don't form a bitfield.
2016-03-26 22:45:23 +01:00
Nikita Popov
64dae1ea76
Statically bind static method call arguments
...
If we know what method will be called, use ct-bound send opcodes.
The intl test is changed because a runtime error changed to a
compile-time error.
2016-03-14 17:50:56 +01:00
Xinchen Hui
63fb2b7118
Improve the names
2016-01-25 16:00:10 +08:00
Lior Kaplan
3d5438bf7b
Merge branch 'PHP-7.0'
...
* PHP-7.0:
Update header to PHP Version 7
Happy new year (Update copyright to 2016)
Happy new year (Update copyright to 2016)
2016-01-01 20:04:31 +02:00
Lior Kaplan
2eb1f38d24
Happy new year (Update copyright to 2016)
2016-01-01 20:03:16 +02:00
Dmitry Stogov
eb7be5379d
Speed up fetching of class entries for self:: parent:: and static::
...
This is generalized solution for Bob's idea of speed up self::method() calls without ZEND_FETCH_CLASS.
At first, it adds few new opcodes to separate class related behaviour:
FETCH_STATIC_PROP_R
FETCH_STATIC_PROP_W
FETCH_STATIC_PROP_RW
FETCH_STATIC_PROP_FUNC_ARG
FETCH_STATIC_PROP_UNSET
FETCH_STATIC_PROP_IS
UNSET_STATIC_PROP
ISSET_ISEMPTY_STATIC_PROP
FETCH_CLASS_CONSTANT
At seconds, it enables IS_UNUSED operand to fetch (self, parent or static without separate FETCH_CLASS) for new opcodes and the following ones:
INIT_STATIC_METHOD_CALL
NEW
END_INSTANCEOF
Finaly, opcache optimizer had to be fixed to support new opcodes.
2015-10-28 21:26:52 +03:00
Xinchen Hui
ec00a4de4e
Merge branch 'PHP-5.6'
2015-03-04 14:49:03 +08:00
Xinchen Hui
a29b64fc10
Fixed bug #69159 (Opcache causes problem when passing a variable variable to a function)
2015-03-04 14:48:41 +08:00
Dmitry Stogov
c2c78dc963
Added specialized versions of DO_FCALL handler:
...
DO_ICALL - for internal functions
DO_UCALL - for user functions
DO_FCALL_BY_NAME - plain, most probably user, funcstions (not methods)
2015-02-25 10:37:21 +03:00
Dmitry Stogov
dcb96c2e03
Split INIT_FCALL_BY_NAME inti INIT_FCALL_BY_NAME(CONST+STRING) and INIT_DYNAMIC_CALL(CONST-STRING|TMPVAR|CV)
2015-02-24 22:29:47 +03:00
Xinchen Hui
fc33f52d8c
bump year
2015-01-15 23:27:30 +08:00
Stanislav Malyshev
b7a7b1a624
trailing whitespace removal
2015-01-10 15:07:38 -08:00
Anatol Belski
bdeb220f48
first shot remove TSRMLS_* things
2014-12-13 23:06:14 +01:00
Dmitry Stogov
9ea35a37b9
Make ZEND_INIT_FCALL keep predcalculted size of necessary stack space in opline->op1.num to avoid its recalculation on each execution.
2014-12-12 09:01:42 +03:00
Dmitry Stogov
e20a727430
SEND_VAR_NO_REF optimization
2014-11-18 14:37:36 +03:00
Dmitry Stogov
234af84c04
Refactored optimizer (compile different opimizer passes separately, instead of including *.c file)
2014-08-28 17:23:12 +04:00
Dmitry Stogov
614bc31635
Fixed incorrect ZEND_INIT_FCALL_BY_NAME -> ZEND_INIT_FCALL conversion
2014-08-27 01:39:39 +04:00
Nikita Popov
904a83a137
Merge remote-tracking branch 'php-src/master' into ast
...
Conflicts:
ext/opcache/Optimizer/optimize_func_calls.c
2014-08-16 22:31:13 +02:00
Nikita Popov
f72d6f97ec
ZEND_INIT_FCALL_BY_NAME can have non-string literal
2014-08-15 22:55:15 +02:00
Xinchen Hui
101c055396
Add copyright header
2014-08-15 16:47:54 +08:00
Xinchen Hui
e2522b4f1d
Remove old version PHP supports
2014-08-15 16:40:07 +08:00
Dmitry Stogov
de306e7088
Implement call_user_func() and call_user_func_array() using special opcodes.
...
In some rare cases it leads to insignificant changes in error messages.
2014-07-11 00:32:18 +04:00
Dmitry Stogov
b36aaea6ed
ZEND_SEND_VAR and ZEND_SEND_VAL specialization
2014-07-08 02:13:53 +04:00
Dmitry Stogov
b7715c7e8a
Refactored parameter passing mechanism.
...
In PHP-5.6 and below each argument passed to user function was copies on VM stack twice.
Now we always have ZEND_INIT_FCALL (or simular) opcode that pushes "call frame" on top of VM stack.
"Call frame" is actually the same zend_execute_data structure.
All the following ZEND_SEND instructions push arguments on top of the stack in a way that they directly comes into corresponding CV variables of the called frame. Extra arguments are copied at the end of stack frame (after all CV and TMP variables) on function enterance.
There are two minor incompatibilities:
1) It's not allowed to decalre functions redefining arguments e.g. "function foo($a,$a) {}".
2) func_get_arg() and func_get args() return the current value of argument and not the original value that was sent.
2014-06-30 15:43:45 +04:00