Dmitry Stogov
ee45dbab37
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Addirional fix for bug #78918
2019-12-11 12:29:10 +03:00
Dmitry Stogov
3280209c03
Addirional fix for bug #78918
2019-12-11 12:21:49 +03:00
Nikita Popov
5cdea8d5e8
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Add support for class_alias to preloading
Fixed bug #78935 : Check that all linked classes can be preloaded
2019-12-10 13:12:29 +01:00
Nikita Popov
baf3a9133b
Add support for class_alias to preloading
...
Related to bug #78918 .
2019-12-10 13:06:36 +01:00
Nikita Popov
999e32b65a
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.
2019-11-08 15:15:48 +01:00
Nikita Popov
ac4e0f0852
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.
2019-11-08 15:15:48 +01:00
Nikita Popov
c858d17f06
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.
2019-10-25 10:51:17 +02:00
Nikita Popov
f16ad678f7
Merge branch 'PHP-7.4'
2019-09-09 11:37:36 +02:00
Nikita Popov
36a8cf5182
Fixed bug #78514
...
The property class may have already been translated as part of
some other class. Only translate if xlat returns non-null.
2019-09-09 11:36:50 +02:00
Dmitry Stogov
5ac3580b9b
Merge branch 'PHP-7.4'
...
* PHP-7.4:
ZEND_DECLARE_ANON_CLASS doesn't need to skip anything now. It's immediatelly followed by ZEND_NEW.
2019-07-19 10:10:50 +03:00
Dmitry Stogov
b065fbde19
ZEND_DECLARE_ANON_CLASS doesn't need to skip anything now. It's immediatelly followed by ZEND_NEW.
2019-07-19 10:09:26 +03:00
Dmitry Stogov
ca68570609
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Provide type info
2019-07-16 22:56:47 +03:00
Dmitry Stogov
a6812c0c84
Provide type info
2019-07-16 22:56:20 +03:00
Dmitry Stogov
e18c60cd8d
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Fixed bug 78175 (Preloading must store default values of static variables and properties)
2019-06-24 20:34:05 +03:00
Dmitry Stogov
0f29fb5cd8
Fixed bug 78175 (Preloading must store default values of static variables and properties)
2019-06-24 20:32:27 +03:00
Dmitry Stogov
1707f6645a
Additional fix for bug #78185 (File cache no longer works)
2019-06-21 10:06:35 +03:00
Nikita Popov
e4fae9c061
Merge branch 'PHP-7.4'
2019-06-11 13:16:38 +02:00
Nikita Popov
89b2d88659
Register class before fetching parent
...
We want the class declaration to be available while compiling the
parent class.
2019-06-11 13:09:33 +02:00
Dmitry Stogov
fc42ac2d78
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Use ZEND_HASH_FOREACH with direct callback, instead of callbacks
2019-04-30 14:50:38 +03:00
Dmitry Stogov
ec5f7df732
Use ZEND_HASH_FOREACH with direct callback, instead of callbacks
2019-04-30 14:50:01 +03:00
Dmitry Stogov
faf24142f3
Fixed JIT for preloaded functions and classes
2019-04-30 00:23:57 +03:00
Dmitry Stogov
9a06876072
Added JIT compiler for x86 and x86_64
2019-04-01 10:27:11 +03:00
Nikita Popov
e6e9bea257
Avoid uninitialized entries in properties_info_table
...
Also don't place it into xlat, there's only ever one user.
2019-02-15 14:43:37 +01:00
Nikita Popov
c15007956d
Add preloading support for typed properties
...
During preloading, try to resolve all property types to CEs. Add a
flag that tracks this. If not all property types can be resolved,
then the class is not eligible for preloading.
2019-02-15 12:41:45 +01:00
Nikita Popov
ffc7e953ea
properties_info_table may be in arena or shm
...
For immutable classes it should be shm instead of in arena.
Related to bug #77615 .
2019-02-15 10:27:30 +01:00
Nikita Popov
c32da66e12
Remove --disable-opcache-filecache option
...
This is no longer an experimental feature, and we have the ability
to control this at runtime via an ini setting.
2019-02-07 12:07:25 +01:00
Dmitry Stogov
da919a8b65
Remove copyright years.
2019-02-05 10:33:28 +03:00
Nikita Popov
e219ec144e
Implement typed properties
...
RFC: https://wiki.php.net/rfc/typed_properties_v2
This is a squash of PR #3734 , which is a squash of PR #3313 .
Co-authored-by: Bob Weinand <bobwei9@hotmail.com>
Co-authored-by: Joe Watkins <krakjoe@php.net>
Co-authored-by: Dmitry Stogov <dmitry@zend.com>
2019-01-11 15:49:06 +01:00
jvoisin
fbdaabba62
Fix some sign-related issues in comparisons
2019-01-09 10:01:12 +01:00
Dmitry Stogov
76d8f3923e
Revert HASH_FLAG_INITIALIZED into HASH_FLAG_UNINITIALIZED.
2018-12-28 11:22:18 +03:00
Dmitry Stogov
cec091176c
Replace zend_hash_apply... with ZEND_HASH_FOREACH...
2018-12-19 02:49:56 +03:00
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
Dmitry Stogov
f200298075
Avoid double copying
2018-11-07 14:23:34 +03:00
Zeev Suraski
67e0138c0d
Future-proof email addresses...
2018-11-01 18:30:28 +02:00
Dmitry Stogov
d57cd36e47
Immutable clases and op_arrays.
...
Squashed commit of the following:
commit cd0c36c3f9
Merge: 4740dabb84
ad6738e886
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 14:43:38 2018 +0300
Merge branch 'master' into immutable
* master:
Remove the "auto" encoding
Fixed bug #77025
Add vtbls for EUC-TW encoding
commit 4740dabb84
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 14:12:28 2018 +0300
Reverted back ce->iterator_funcs_ptr. Initialize ce->iterator_funcs_ptr fields in immutable classes.
commit ad7a78b253
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:46:30 2018 +0300
Added comment
commit 0276ea5187
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:42:43 2018 +0300
Added type cast
commit c63fc5d5f1
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:36:51 2018 +0300
Moved static class members initialization into the proper place.
commit b945548e93
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:21:03 2018 +0300
Removed redundand assertion
commit d5a4108840
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:19:13 2018 +0300
Removed duplicate code
commit 8dadca8864
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 11:05:43 2018 +0300
Hide offset encoding magic in ZEND_MAP_PTR_IS_OFFSET(), ZEND_MAP_PTR_OFFSET2PTR() and ZEND_MAP_PTR_PTR2OFFSET() macros.
commit 9ef07c88bd
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 10:48:29 2018 +0300
typo
commit a06f0f3d3a
Merge: 94099586ec
3412345ffe
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Oct 17 10:47:07 2018 +0300
Merge branch 'master' into immutable
* master:
Remove unused variable makefile_am_files
Classify object handlers are required/optional
Add support for getting SKIP_TAGSTART and SKIP_WHITE options
Remove some obsolete config_vars.mk occurrences
Remove bsd_converted from .gitignore
Remove configuration parser and scanners ignores
Remove obsolete buildconf.stamp from .gitignore
[ci skip] Add magicdata.patch exception to .gitignore
Remove outdated ext/spl/examples items from .gitignore
Remove unused test.inc in ext/iconv/tests
commit 94099586ec
Author: Dmitry Stogov <dmitry@zend.com>
Date: Mon Oct 15 23:34:01 2018 +0300
Immutable clases and op_arrays
2018-10-17 15:52:50 +03:00
Dmitry Stogov
3a3840a847
Avoid useless store and checks in xlat_table.
2018-09-26 17:05:49 +03:00
Dmitry Stogov
f5e1868601
Improved hash copying
2018-09-19 17:53:10 +03:00
Dmitry Stogov
689c6fb188
Replace ZEND_ACC_ANON_BOUND, ZEND_ACC_UNRESOLVED_PARENT and ZEND_ACC_UNRESOLVED_INTERFACES with single ZEND_ACC_LINKED.
2018-09-18 11:41:40 +03:00
Dmitry Stogov
684354be72
Removed incorrect efree() (run_time_cache(s) are usually allocated in CG(arena)).
2018-08-28 17:46:26 +03:00
Dmitry Stogov
8050f4a334
Keep information about unresolved parent class in zend_class_entry->parent_name
2018-08-24 00:20:57 +03:00
Dmitry Stogov
d140df58e6
Keep information about unresolved interfaces in zend_class_entry->interface_names.
...
Move interface implementation code into ZEND_DECLARE_*CLASS opcodes.
Remove ZEND_ADD_INTERFACE and ZEND_VERIFY_ABSTRACT_CLASS opcodes.
2018-08-23 17:16:28 +03:00
Dmitry Stogov
67397970b2
Replace zend_class_entry->traits by persistent zend_class_entry->trait_names.
...
Move trait binding code into ZEND_DECLARE_*CLASS opcodes.
Remove ZEND_ADD_TRIAIT and ZEND_BIND_TRAITS opcodes.
2018-08-23 02:02:26 +03:00
Dmitry Stogov
93f9ee7217
Use zend_class_entry/zend_function type names instead of _zend_class_entry/_zend_function tags.
2018-08-22 14:01:14 +03:00
Dmitry Stogov
85ee47eda0
Changed structure of zend_class_entry.trait_aliases and zend_class_entry.trait_precedences to avoid keeping "intermediate" trait references, that are used only during inheritance.
2018-07-11 18:56:10 +03:00
Dmitry Stogov
004a0568f4
Eliminated REFCOUNTED checks on persistent constant operands in SEND_VAL[_EX] and QM_ASSIGN.
2018-07-03 13:10:22 +03:00
Dmitry Stogov
7f67513ca3
Lazy function copying from op_cache SHM into process memory
2018-06-25 19:53:58 +03:00
Nikita Popov
2543e61aed
Fixed bug #76509
...
In PHP static properties are shared between inheriting classes,
unless they are explicitly overwritten. However, because this
functionality was implemented using reference, it was possible
to break the implementation by reassigning the static property
reference.
This is fixed by switching the implementation from using references
to using INDIRECTs, which cannot be affected by userland code.
2018-06-25 15:04:09 +02:00
Dmitry Stogov
44be0fa67b
Fixed HashTable load factor
2018-05-29 10:16:02 +03:00
Dmitry Stogov
5eb1f92f31
Use zend_string_release_ex() instread of zend_string_release() in places, where we sure about string persistence.
2018-05-28 16:27:12 +03:00
Dmitry Stogov
34ed8e53fe
Changed worst HashTable load factor from 1.0 to 0.5
2018-05-04 02:41:35 +03:00