Revision tags: php-7.4.0RC6, php-7.3.12RC1, php-7.2.25RC1, php-7.4.0RC5, php-7.1.33, php-7.2.24, php-7.3.11, php-7.4.0RC4, php-7.3.11RC1, php-7.2.24RC1, php-7.4.0RC3 |
|
#
999e32b6 |
| 25-Sep-2019 |
Nikita Popov |
Implement union types According to RFC: https://wiki.php.net/rfc/union_types_v2 The type representation now makes use of both the pointer payload and the type mask at the same t
Implement union types According to RFC: https://wiki.php.net/rfc/union_types_v2 The type representation now makes use of both the pointer payload and the type mask at the same time. Additionall, zend_type_list is introduced as a new kind of pointer payload, which is used to store multiple class types. Each of the class types is a tagged pointer, which may be either a class name or class entry. The latter is only used for typed properties, while arguments/returns will instead use cache slots. A type list can contain a mix of both names and CEs at the same time, as not all classes may be resolvable. One thing this is missing is support for union types in arginfo and stubs, which I want to handle separately. I've also dropped the special object code from the JIT implementation for now -- I plan to add this back in a different form at a later time. For now I did not want to include non-trivial JIT changes together with large functional changes. Another possible piece of follow-up work is to implement "iterable" as an internal alias for "array|Traversable". I believe this will eliminate quite a few special-cases that had to be implemented. Closes GH-4838.
show more ...
|
Revision tags: php-7.2.23, php-7.3.10 |
|
#
ac4e0f08 |
| 20-Sep-2019 |
Nikita Popov |
Make zend_type a 2-field struct We now store the pointer payload and the type mask separately. This is in preparation for union types, where we will be using both at the same time.
Make zend_type a 2-field struct We now store the pointer payload and the type mask separately. This is in preparation for union types, where we will be using both at the same time. To avoid increasing the size of arginfo structures, the pass_by_reference and is_variadic fields are now stored as part of the type_mask (8-bit are reserved for custom use). Different types of pointer payloads are distinguished based on bits in the type_mask.
show more ...
|
#
c46b2ed6 |
| 04-Nov-2019 |
Nikita Popov |
Remove support for array_key_exists() with objects
|
Revision tags: php-7.4.0RC2, php-7.2.23RC1, php-7.3.10RC1, php-7.4.0RC1, php-7.1.32, php-7.2.22, php-7.3.9, php-7.4.0beta4, php-7.2.22RC1, php-7.3.9RC1, php-7.4.0beta2, php-7.1.31, php-7.2.21, php-7.3.8, php-7.4.0beta1, php-7.2.21RC1, php-7.3.8RC1, php-7.4.0alpha3, php-7.3.7, php-7.2.20, php-7.4.0alpha2, php-7.3.7RC3, php-7.3.7RC2, php-7.2.20RC2, php-7.4.0alpha1, php-7.3.7RC1, php-7.2.20RC1, php-7.2.19, php-7.3.6, php-7.1.30, php-7.2.19RC1, php-7.3.6RC1, php-7.1.29, php-7.2.18, php-7.3.5, php-7.2.18RC1, php-7.3.5RC1, php-7.2.17, php-7.3.4, php-7.1.28, php-7.3.4RC1, php-7.2.17RC1, php-7.1.27, php-7.3.3, php-7.2.16, php-7.3.3RC1, php-7.2.16RC1 |
|
#
aef88361 |
| 13-Feb-2019 |
Nikita Popov |
Don't check $this existence in object opcodes We are now guaranteed that $this always exists inside methods, as well as insides closures (if they use $this at all). This removes
Don't check $this existence in object opcodes We are now guaranteed that $this always exists inside methods, as well as insides closures (if they use $this at all). This removes checks for $this existence from the individual object opcodes. Instead ZEND_FETCH_THIS is used in the cases where $this is not guaranteed to exist, which is mainly the pseudo-main scope. Closes GH-3822.
show more ...
|
#
c858d17f |
| 25-Oct-2019 |
Nikita Popov |
Optimize instanceof_function Split out the simple equality check into an inline function -- this is one of the common cases. Replace instanceof_function_ex with zend_class_imple
Optimize instanceof_function Split out the simple equality check into an inline function -- this is one of the common cases. Replace instanceof_function_ex with zend_class_implements_interface. There are a few more places where it may be used.
show more ...
|
#
96c84b7b |
| 10-Oct-2019 |
Nikita Popov |
Fix leak on static method call on non-existent class
|
#
b093abcd |
| 10-Oct-2019 |
Nikita Popov |
Fix exception handling for call_user_func_array() with invalid type Now that this throws an exception, the call frame cleanup will be handled by exception handling -- remove it here to a
Fix exception handling for call_user_func_array() with invalid type Now that this throws an exception, the call frame cleanup will be handled by exception handling -- remove it here to avoid double frees.
show more ...
|
#
9c9a833f |
| 09-Oct-2019 |
Nikita Popov |
Actually remove the YIELD key specialization I only adjusted the code before, without switching to TMPVAR.
|
#
165a065a |
| 09-Oct-2019 |
Nikita Popov |
Reduce YIELD key specialization Keeping the value specialization for now, which is more commonly applicable.
|
#
da3b2457 |
| 09-Oct-2019 |
Nikita Popov |
Reduce YIELD_FROM specialization Generator delegation is a complex compound operation, it does not make a lot of sense to optimize refcounting here to this degree.
|
#
2aba10be |
| 09-Oct-2019 |
Nikita Popov |
Reduce ZEND_THROW specialization Throwing is very expensive due to the need of gathering the backtrace, so it makes little sense to optimize refcounting to this degree.
|
#
f6f32f2c |
| 09-Oct-2019 |
Dmitry Stogov |
SAMRT BRANCH improvement. Avoid need of insertion NOP opcoes between unrelated SMART BRANCH instruction and following JMPZ/JMPNZ. Now instead of checking the opcode of following instruct
SAMRT BRANCH improvement. Avoid need of insertion NOP opcoes between unrelated SMART BRANCH instruction and following JMPZ/JMPNZ. Now instead of checking the opcode of following instruction, the same information is encoded into SMART BRANH result_type.
show more ...
|
#
bea832cb |
| 08-Oct-2019 |
Nikita Popov |
Don't check type of simple parameter default values After fixing the int->double coercion case, this is already verified at compile-time, so there is no need to redo this type check on
Don't check type of simple parameter default values After fixing the int->double coercion case, this is already verified at compile-time, so there is no need to redo this type check on every call. Only perform the type check every time for the case of AST default values.
show more ...
|
#
21148679 |
| 08-Oct-2019 |
Nikita Popov |
Handle "non well formed" exception during ZPP Previously if the "non well formed" notice was converted into an exception we'd still end up executing the function. Also drop the
Handle "non well formed" exception during ZPP Previously if the "non well formed" notice was converted into an exception we'd still end up executing the function. Also drop the now unnecessary EG(exception) checks in the engine. Additionally remote a bogus exception in zend_is_callable: It should only be writing to error, but not directly throwing.
show more ...
|
#
eec04f6b |
| 08-Oct-2019 |
Dmitry Stogov |
Encapsulate all SMART BRANCH related logic inside macros. Result of SMART BRANCH may be uninitialized (on exception).
|
#
b02b8129 |
| 07-Oct-2019 |
Dmitry Stogov |
Comparison cleanup: - introduce zend_compare() that returns -1,0,1 dirctly (without intermediate zval) - remove compare_objects() object handler, and keep only compare() handler
|
#
57670c67 |
| 07-Oct-2019 |
Nikita Popov |
Check num required args is correct in debug builds Also replace the assertion failure with an E_CORE_ERROR that includes the function name, so these are easier to debug.
|
#
2f92957f |
| 01-Oct-2019 |
Nikita Popov |
Convert some notices to warnings Part of https://wiki.php.net/rfc/engine_warnings.
|
#
01fc1a30 |
| 27-Sep-2019 |
Nikita Popov |
Remove most uses of the ERROR type It is now only used to signal exceptions for property reads. ERROR zvals are never returned back to the VM anymore, so there's no need to check for
Remove most uses of the ERROR type It is now only used to signal exceptions for property reads. ERROR zvals are never returned back to the VM anymore, so there's no need to check for them when receiving a VAR. Also return MAY_BE_ERROR, as ERROR is now no longer relevant for inference.
show more ...
|
#
9372b687 |
| 30-Sep-2019 |
Dmitry Stogov |
Restore "avoid exception check" optimization and add EG(exception) check only on slow path.
|
#
38b19d47 |
| 27-Sep-2019 |
Nikita Popov |
Convert "Only arrays and Traversables can be unpacked" into Error
|
#
2354aa96 |
| 26-Sep-2019 |
Nikita Popov |
Add test for illegal unset/isset offset Weirdly these warnings had zero coverage previously... Remove an incorrect exception checking optimization: The key lookup may throw (it
Add test for illegal unset/isset offset Weirdly these warnings had zero coverage previously... Remove an incorrect exception checking optimization: The key lookup may throw (it could also throw previously, though only through a custom error handler).
show more ...
|
#
0ebf2bdb |
| 26-Sep-2019 |
Nikita Popov |
Convert "Illegal offset type" warnings to exceptions
|
#
a6c9c7c2 |
| 27-Sep-2019 |
Nikita Popov |
Handle resources used as array keys consistently Resources used as array keys are generally handled by throwing a notice and converting the resource to the resource handle. The only
Handle resources used as array keys consistently Resources used as array keys are generally handled by throwing a notice and converting the resource to the resource handle. The only exception is the [$resource => null] syntax, where this was treated as an illegal offset type instead. However, this also only happened for VM evaluations, the AST evaluator did handle resources correctly.
show more ...
|
#
a66c60cc |
| 26-Sep-2019 |
Nikita Popov |
Throw Error when writing property of non-object This removes object auto-vivification support. This also means that we can remove the corresponding special handling for typed pr
Throw Error when writing property of non-object This removes object auto-vivification support. This also means that we can remove the corresponding special handling for typed properites: We no longer need to check that a property is convertible to stdClass if such a conversion might take place indirectly due to a nested property write. Additionally OBJ_W style operations now no longer modify the object operand, and as such we no longer need to treat op1 as a def in SSA form. The next step would be to actually compile the whole LHS of OBJ_W operations in R rather than W mode, but that causes issues with SimpleXML, whose object handlers depend on the current compilation structure. Part of https://wiki.php.net/rfc/engine_warnings.
show more ...
|