Dmitry Stogov
d72a94468e
Merged FE_FETCH_R[W] with the following ASSIGN[_REF] when assigne to CV.
2015-05-13 12:55:42 +03:00
Dmitry Stogov
0586702d32
Mark first call frames of stack segment with ZEND_CALL_ALLOCATED flag to simplify checks on stack deallocation.
2015-05-12 15:56:42 +03:00
Aaron Piotrowski
071111ecfc
Add support for $callable() sytnax with 'Class::method'
...
Using the $callable() syntax when used with a string of
the form 'Class::method' would error as an undefined
function, even if the string passed is_callable() or the
callable type-hint. The fix adds support for the $callable()
syntax for any string accepted by is_callable() or the
callable type-hint.
Fix bug 68475 test with deprecated notice
Reduced scope of unit test.
Added tests with arguments.
2015-05-12 13:33:28 +02:00
Nikita Popov
8f9f21e8d2
Fix static closure error in call_user_func opcode
...
I'm assuming this is the only error that is_callable() can generate
with retval=1.
This problem manifested after making closures in static methods
not implicitly static, but would also occur when binding any non-static
closure to a scope without a $this.
2015-05-08 15:17:15 +02:00
Dmitry Stogov
a989c0a1a9
Improved fast path locality
2015-05-07 17:26:35 +03:00
Dmitry Stogov
ab4ccffc4c
Avoid unnecessary reference counter incrementation on $this when call methods
2015-05-07 16:28:23 +03:00
Nikita Popov
d9c2959c27
Fix LSB handling for closures
...
Closures will now use the called_scope from their instantiation
site. If they are rebound either the class of $this is used or if
no $this is provided the bound scope is used.
With this change the scope for static closures can be changed back
to use EG(scope) rather than EX(called_scope), thus fixing
bug #69568 .
2015-05-05 21:14:03 +02:00
Nikita Popov
dc546bdc4d
Throw exception from FETCH_CLASS_NAME
...
Instead of empty strings.
This does not affect the existing case of __CLASS__ in traits as
a scope will always exists in that case.
2015-05-05 21:14:03 +02:00
Nikita Popov
dd1fdfb17c
Use ZEND_FETCH_CLASS_NAME for dynamic self::class etc
...
Extend the opcode to support getting the parent and static name and
then use it for dynamic ::class resolution.
2015-05-05 21:14:03 +02:00
Dmitry Stogov
a8172353ba
Micro optimization
2015-05-05 18:50:47 +03:00
Xinchen Hui
ce9248b6ef
Merge branch 'PHP-5.6'
2015-05-04 19:26:07 +08:00
Xinchen Hui
7289981c61
Merge branch 'PHP-5.5' into PHP-5.6
2015-05-04 19:22:22 +08:00
Xinchen Hui
7af9ba23a7
Saving the latter checking in most cases
2015-05-04 19:21:54 +08:00
Dmitry Stogov
d880ead8a7
Improve fast_is_[not_]identical() functions to teturn value instead of takeing additional arguments.
...
Pair INSTANCEOF with the following JMPZ/JMPNZ.
2015-04-29 16:43:23 +03:00
Dmitry Stogov
762a774c40
Fixed repeatable opcodes on CALL VM without global registers
2015-04-29 14:20:44 +03:00
Dmitry Stogov
690440771a
Paired instuctions frequientiy used together (e.g. comparisons + conditional jumps)
2015-04-29 04:17:59 +03:00
Dmitry Stogov
d271d2cf7b
Make ZEND_RECV_INIT and ZEND_BIND_GLOBALS opcodes to be "repeatabe" with inner-loop instead of main interpreter loop.
2015-04-29 00:40:43 +03:00
Dmitry Stogov
3057034608
Optimize opcodes for fast path
2015-04-28 23:57:21 +03:00
Dmitry Stogov
612de5214f
Simplified code
2015-04-28 19:11:23 +03:00
Dmitry Stogov
89be15c56d
Micro optimizations
2015-04-28 12:41:39 +03:00
Dmitry Stogov
94245bc14c
Refactored using specialized opcodes
2015-04-27 12:24:39 +03:00
Nikita Popov
03d7042d5c
Don't issue FETCH_CLASS for anon classes
2015-04-26 15:44:48 +02:00
krakjoe
49608e0608
Rebase Joe's anon classes implementation
2015-04-26 15:04:22 +02:00
Dmitry Stogov
000d5d7ec9
Dont't use DO_ICALL for internal functions returned by reference
2015-04-24 00:34:11 +03:00
Dmitry Stogov
49cf7c5d12
Don't propogate "fake" EX(called_scope) and EX(This) into each internal function.
...
They need quite seldom and it's cheaper to get them from corresponfing upper stack frame.
2015-04-23 12:16:37 +03:00
Dmitry Stogov
6d4da2db8a
Make internal non-static methods to be executed in context of class. Set EG(scope) accordingly.
2015-04-23 03:41:50 +03:00
Dmitry Stogov
15a5f61cf4
Use fast method to check if first arguments should be passed by reference (not tested onbig endian).
2015-04-22 21:46:13 +03:00
Nikita Popov
62aabf5d9f
Fix "invalid opcode" error
...
Method call can happen on CONST, it'll just throw an error.
Not forbidding this at compile-time, so this can be overridden in
an extension.
2015-04-22 17:46:25 +02:00
Xinchen Hui
1c3b99c4ff
Throw exception will override EX(opline)
2015-04-20 11:58:23 +08:00
Xinchen Hui
a819404e9e
Refix opline usage
2015-04-20 10:53:58 +08:00
Bob Weinand
b1bd6f502f
Properly define ZEND_OP_DATA in zend_vm_def.h
...
This allows zend_vm_gen.php to define them in zend_vm_opcodes.{c,h} without further hacks.
2015-04-19 23:21:57 +02:00
Nikita Popov
9f0f93b00f
Fix CALL_TRAMPOLINE without global regs
...
The opline needs to be loaded here in any case. However
LOAD_OPLINE() is a no-op if global VM registers are not used.
2015-04-18 15:44:04 +02:00
Nikita Popov
38da85f313
Initialize VAR_FLAGS for generators
2015-04-17 21:51:49 +02:00
Dmitry Stogov
a759967dd1
Mark call frames to closures with ZEND_CALL_CLOSURE flag to avoid expensive check at zend_leave_helper()
2015-04-16 12:16:03 +03:00
Bob Weinand
7c2fbdf58d
Remove some redundant exception checking/continuing VM instructions
2015-04-15 22:18:05 +02:00
Bob Weinand
3dcad2eea2
Fix bug #69458
2015-04-15 21:56:11 +02:00
Bob Weinand
27033f9818
Forgot to transform some errors to engine exceptions
2015-04-15 21:42:26 +02:00
Dmitry Stogov
d5d2032898
eliminate unnecessary EX(opline) <-> opline reloading
2015-04-15 20:53:27 +03:00
Dmitry Stogov
6aee1ee4a1
Optimization of stack-frame construction
2015-04-15 17:02:21 +03:00
Nikita Popov
108ae7961e
Fix leak when calling ->get() on tmp property
2015-04-14 22:16:18 +02:00
Bob Weinand
f3e124d58d
Merge branch 'coroutineDelegation' of https://github.com/bwoebi/php-src
2015-04-14 17:58:58 +02:00
Nikita Popov
ed7e6d4758
Merge branch 'PHP-5.5' into PHP-5.6
2015-04-14 16:36:36 +02:00
Nikita Popov
95650d0942
Fixed bug #69419
2015-04-14 16:35:23 +02:00
Dmitry Stogov
0d18aa8610
Use Z_TYPE_INFO_P() instead Z_TYPE_P() when we check for few scalar types. This allow C compiler to generate the better code.
2015-04-14 13:09:31 +03:00
Dmitry Stogov
5e8133f453
Squashed commit of the following:
...
commit 2399fc84c5
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 12:38:08 2015 +0300
Removed useless assignment
commit 796b633817
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 12:35:31 2015 +0300
Fixed execution with overriden zend_execute_ex()
commit 4a9fb125aa
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 02:02:58 2015 +0300
Fixed executor without global registers
commit d456c30e00
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 01:30:35 2015 +0300
Restored original behavior for tests/classes/__call_004.phpt
commit 479646d37f
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 00:32:17 2015 +0300
Fixed test. We don't keep stack frame for fake function anymore.
commit 9ae61e33e2
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 00:30:09 2015 +0300
Use ZEND_ACC_CALL_VIA_TRAMPOLINE instead of ZEND_ACC_CALL_VIA_HANDLER. Keep ZEND_ACC_CALL_VIA_HANDLER for compatibility.
commit 0a8403a2a0
Author: Dmitry Stogov <dmitry@zend.com>
Date: Fri Apr 10 00:05:43 2015 +0300
Rename PROXY_CALL into CALL_TRAMPLINE.
Generalize API to allow reuse EG(trampline) for other purposes.
commit 4ea0525c10
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 23:22:25 2015 +0300
Reuse EG(proxy_call_op) for all proxy. Move proxy related functions from zend_objects_API to zend_object_handlers.
commit 529bf737ca
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 21:42:23 2015 +0300
Accurate use of proxy_call
commit 5d62837d5b
Merge: 83e749f
690843f
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 19:40:00 2015 +0300
Merge branch 'master' into opcodefy-call
* master:
Fixed GOTO executor
Fixed typo
Changed ArrayIterator implementation using zend_hash_iterator_... API. Allowed modification of itterated ArrayObject using the same behavior as proposed in `Fix "foreach" behavior`. Removed "Array was modified outside object and internal position is no longer valid" hack.
commit 83e749ff3b
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 19:39:10 2015 +0300
Improved ZEND_PROXY_CALL
commit 0c829afc53
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 15:14:49 2015 +0300
Reverted white-space changes
commit df65144488
Merge: 5fd2f97
97756d9
Author: Dmitry Stogov <dmitry@zend.com>
Date: Thu Apr 9 14:37:07 2015 +0300
Merge branch 'opcodefy-call' of github.com:laruence/php-src into opcodefy-call
* 'opcodefy-call' of github.com:laruence/php-src:
Ready for PR
Fixed static call
Improve performance by using prealloated op_arrray
Respect called_scope
Support internal magical __call/__callStatic
opcode-fy magical __callStatic
Opcode-fy magical __call
commit 97756d9190
Author: Xinchen Hui <laruence@gmail.com>
Date: Thu Apr 9 19:07:59 2015 +0800
Ready for PR
commit 74f9930846
Author: Xinchen Hui <laruence@gmail.com>
Date: Thu Apr 9 19:03:00 2015 +0800
Fixed static call
commit ec1d9eb592
Author: Xinchen Hui <laruence@gmail.com>
Date: Thu Apr 9 18:23:17 2015 +0800
Improve performance by using prealloated op_arrray
commit df7fbbf949
Author: Xinchen Hui <laruence@gmail.com>
Date: Thu Apr 9 15:10:02 2015 +0800
Respect called_scope
commit 769d1d59fb
Author: Xinchen Hui <laruence@gmail.com>
Date: Thu Apr 9 12:19:23 2015 +0800
Support internal magical __call/__callStatic
commit a980fedd5b
Author: Xinchen Hui <laruence@gmail.com>
Date: Wed Apr 8 18:35:41 2015 +0800
opcode-fy magical __callStatic
commit 73855f7d53
Author: Xinchen Hui <laruence@gmail.com>
Date: Wed Apr 8 14:21:55 2015 +0800
Opcode-fy magical __call
2015-04-10 23:01:00 +03:00
Dmitry Stogov
a62896783f
Removed wrong error messages
2015-04-06 18:10:45 +03:00
Dmitry Stogov
9e2c14c121
Fixed error messages
2015-04-06 17:24:32 +03:00
Dmitry Stogov
cae0147ed3
Fixed weird operators behavior. Division by zero now emits warning and returns +/-INF, modulo by zero and intdid() throws an exception, shifts by negative offset throw exceptions. Compile-time evaluation of division by zero is disabled.
2015-04-06 14:30:05 +03:00
Nikita Popov
86906d6a7b
Fix typo
2015-04-04 10:38:00 +02:00
Dmitry Stogov
dcaa79546b
Don't relay on reference-counter when parameter expected to be a reference, but value given.
2015-04-03 16:35:06 +03:00