Removed HashTable->arHash (reduced memory consumption). Now hash slots may be accessed using HT_HASH() macro.
Hash slotas are allocated together with Buckets (before them) and lay in reverse order from HashTable->arData base address (see comments in Zend/zend_types.h)
Indexes in hash table and conflict resolution chains (Z_NEXT) may be stored as indeces or offsets in bytes, depending on system (32 or 64-bit).
HashTable data filelds are reordered to keep the most useful for zend_hash_find() data in the same CPU cache line.
This is disabled by default yet, but may be enabled compiling zend_execute.c with -DHAVE_GCC_GLOBAL_REGS.
Only tested on Linux x86 and x86_64 with GCC 4.9.2.
See https://wiki.php.net/rfc/expectations
Squashed commit of the following:
commit 3f3651a787
Author: Dmitry Stogov <dmitry@zend.com>
Date: Mon Mar 2 11:56:33 2015 +0300
opcode 137 is used for ZEND_OP_DATA and con't be reused for ZEND_ASSERT_CHECK
commit ca8ecabf2a
Merge: 24328ac9dac923
Author: Dmitry Stogov <dmitry@zend.com>
Date: Mon Mar 2 10:49:23 2015 +0300
Merge branch 'master' into assert
* master:
Update NEWS
Fixed bug #69139 (Crash in gc_zval_possible_root on unserialize)
windows only test
Align entries format
Align entries format for 5.6.7
Align entries format for 5.5.23
Bump header year
Fixed bug #69144 (strtr not replacing with partly matching replace pairs)
Fixed test?
Revert mktime()/gmmktime()'s arginfo
Update NEWS
Fixed bug #69141 Missing arguments in reflection info for some builtin functions
Add NEWS entry
Remove useless date warning
Fix ARG_INFO for levenshtein
Fix ARG_INFO for levenshtein
fix dir separator in tests
Update NEWS
Fixed bug #69085 (SoapClient's __call() type confusion through unserialize()).
commit 24328ac03f
Merge: 021fd941cdee9a
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Feb 27 15:57:13 2015 +0300
Merge branch 'master' into assert
* master:
Fixed C++ support
Fixed bug #69115 crash in mail
Reorder
Update NEWs
Fixed bug #69121 (Segfault in get_current_user when script owner is not in passwd with ZTS build)
Update News
Fixed bug #69125 (Array numeric string as key)
fix bug#68942's patch
Fixed ability to build unspecialized executor
Fixed bug #69124 (method name could not be used when by ref)
Fixed a bug that header value is not terminated by '\0' when accessed through getenv().
Fixed a bug that header value is not terminated by '\0' when accessed through getenv().
commit 021fd94ed1
Merge: 49963ebace1f82
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Feb 26 11:26:03 2015 +0300
Merge branch 'master' into assert
* master: (59 commits)
Improved ASSIGN_DIM handler
Don't inline slow path
Revert a part committted by mistake
Fixed compilation warnings
Fixed a bug that header value is not terminated by '\0' when accessed through getenv().
better name
Improve fix for #69038
Update NEWs
Fixed bug #69108 ("Segmentation fault" when (de)serializing SplObjectStorage)
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)
Use cache_slot offsets instead of indexes (simplify run-time instructions)
Split INIT_FCALL_BY_NAME inti INIT_FCALL_BY_NAME(CONST+STRING) and INIT_DYNAMIC_CALL(CONST-STRING|TMPVAR|CV)
Support list($a, $b) = $a
Avoid unnecassary check
Make zend_array_destroy() to free the corresponding zend_array
Eliminate check on the fast path
Make current() and key() receive argument by value.
Use Firebird default home folder, replace Interbase with Firebird
Updated NEWS
updated NEWS
...
Conflicts:
Zend/zend_vm_execute.h
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h
commit 49963ebf9d
Merge: 07b1f926b77959
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Feb 19 11:13:08 2015 +0300
Merge branch 'master' into assert
* master:
Implemented AST pretty-printer
update NEWS to match the actual stuff in 5.6.6
update NEWS to match the actual stuff in 5.5.22
update NEWS(add missing entry for the enchant fix, and reorder the entries a bit)
fix typo in bug#
update NEWS
fix email format
update NEWS
update 5.6.6 release date in NEWS
Fix bug #69033 (Request may get env. variables from previous requests if PHP works as FastCGI)
BFN
fix test
fix test
fix test
Fixed bug #65593 (Segfault when calling ob_start from output buffering callback)
Updated NEWS
add CVE
5.4.39 next
Fix associativity to match Perl
Blast off to space.
Conflicts:
Zend/zend_ast.c
commit 07b1f92ed6
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Feb 18 23:06:32 2015 +0300
fixed pretty-printer (support for "elseif")
commit 5a976c8d85
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Feb 18 19:50:08 2015 +0300
Fixed vaeious ptetty-printer issues
commit 69491e8e8e
Merge: 84731573ddc246
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Feb 18 10:18:32 2015 +0300
Merge branch 'master' into assert
* master:
Set PHP_JSON_VERSION to 1.4.0
Remove unnecessary resource checks in openssl ext
JSON is now maintained
commit 8473157fbb
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Feb 18 10:17:26 2015 +0300
Fixed typo and white spaces
commit 96de5ffc8d
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Feb 18 00:28:39 2015 +0300
Fixed assert() in namesapaces
commit 5eba069c28
Merge: 4a2d9c0d428bf2
Author: Dmitry Stogov <dmitry@zend.com>
Date: Tue Feb 17 22:45:55 2015 +0300
Merge branch 'master' into assert
* master: (25 commits)
improve debugability in TS debug builds
More UPGRADING, in particular on foreach
Fixed bug #69038 (switch(SOMECONSTANT) misbehaves) for master
Replace var is introduced
abstain from using xmlCleanupParser
fix TS build
Fix bug #68942 (Use after free vulnerability in unserialize() with DateTimeZone)
update news
Fix bug #68942 (Use after free vulnerability in unserialize() with DateTimeZone)
Port for for bug #68552
Fix bug #68942 (Use after free vulnerability in unserialize() with DateTimeZone)
Update NEWS
Fixed bug #69038 (switch(SOMECONSTANT) misbehaves)
- BFN
Don't read the local php.ini when Generating Phar When building phar shared, you can end up loading a previous phar.so that isn't compatible with the php cli being used to generate Phar here.
- Fixed bug #67827 (broken detection of system crypt sha256/sha512 support)
Delete json outdated package.xml
made ZEND_TSRMLS_CACHE_* macros look like function calls
- Fix merge
- Fixed bug #67427 (SoapServer cannot handle large messages) patch by: brandt at docoloc dot de
...
commit 4a2d9c0953
Author: Dmitry Stogov <dmitry@zend.com>
Date: Tue Feb 17 22:45:10 2015 +0300
Implemented AST pretty-printer to capture expression passed to assert()
commit 7a059b66d5
Merge: 9973df73892eba
Author: Dmitry Stogov <dmitry@zend.com>
Date: Mon Feb 16 18:42:28 2015 +0300
Merge branch 'expect' of github.com:krakjoe/php-src into assert
* 'expect' of github.com:krakjoe/php-src:
import expect
Conflicts:
Zend/zend_compile.c
Zend/zend_execute_API.c
Zend/zend_globals.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h
ext/opcache/Optimizer/block_pass.c
ext/opcache/Optimizer/pass1_5.c
ext/standard/assert.c
ext/standard/tests/assert/assert_error3.phpt
commit 3892eba2bf
Author: krakjoe <joe.watkins@live.co.uk>
Date: Sun Feb 2 12:49:35 2014 +0000
import expect
Now each HashTable is also zend_array, so it's refcounted and may be a subject for Copy on Write
zend_array_dup() was changed to allocate and return HashTable, instead of taking preallocated HashTable as argument.
Squashed commit of the following:
commit 1e41295097
Author: Dmitry Stogov <dmitry@zend.com>
Date: Sat Jan 31 07:28:58 2015 +0300
Generalize HashTableIterator API to allows its usage without involvement of HashTable.nInternalPonter
commit 5406f21b11
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 18:08:43 2015 +0300
Reduced alghorithms complexity
commit b37f1d58d2
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 18:08:30 2015 +0300
Fixed test name
commit fb2d079645
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 18:08:05 2015 +0300
API cleanup
commit 08302c0d6d
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 14:20:46 2015 +0300
Make array_splice() to preserve foreach hash position
commit cc4b7be41e
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 12:24:31 2015 +0300
Make internal function, operation on array passed by reference, to preserve foreach hash position
commit 5aa9712b0a
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 09:49:35 2015 +0300
Implement consistent behavior for foreach by value over plain object
commit 4c5b385ff5
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Jan 30 07:56:37 2015 +0300
More careful iterators update.
commit 721fc9e80d
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Jan 29 21:43:28 2015 +0300
Added new test
commit 15a23b1218
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Jan 29 21:05:02 2015 +0300
Reimplement iteration magic with HashTableIterators (see https://wiki.php.net/rfc/php7_foreach#implementation_details)
commit 10a3260b1f
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Jan 29 21:04:44 2015 +0300
New test
commit eef80c5837
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jan 28 16:52:21 2015 +0300
Fixed foreach by reference iteration over constant array
commit 61e7391873
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jan 28 14:59:54 2015 +0300
Fixed temporary variable re-allocation pass
commit 92e90c09f0
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jan 28 12:44:57 2015 +0300
Fixed operand destruction in case of exceptions in iterator
commit dd2a36a207
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jan 28 10:02:34 2015 +0300
Use GET_OP1_ZVAL_PTR_DEREF() (IS_TMP_VAR and IS_CONST can't be IS_REFERENCE)
commit 4638f7b914
Author: Dmitry Stogov <dmitry@zend.com>
Date: Wed Jan 28 07:43:28 2015 +0300
Change "foreach" statement behavior (this is just a PoC yet)
- "foreach by value" don't relay on internal array/object pointer and doesnt perform array duplication. It just locks it incrementing reference counter. If the original array is modified by some code, the copy on write is performed and "foreach" still work with the old copy.
- it makes no difference if array given to "foreach by value" is reference itself
- "foreach by reference" still use internal array/object pointer and should work similar to PHP-5. (This id not completely implemented)
* 'internal-function-return-types' of github.com:reeze/php-src:
Add load time return type checking to match user land logic
Add test function arguments
Implemented internal function return types