Commit Graph

1908 Commits

Author SHA1 Message Date
Dmitry Stogov
b009f84ec0 Removed incorrect "return" statement 2015-10-28 21:26:52 +03: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
Nikita Popov
36cd300693 Merge branch 'PHP-7.0' 2015-10-24 23:19:36 +02:00
Nikita Popov
b9cc3176eb Fix bug #70782 2015-10-24 23:19:02 +02:00
Levi Morrison
43a4336820 Refactor zend_mark_function_as_generator 2015-10-19 06:57:21 -07:00
Márcio Almada
ddb6d7801e Fix bug #70650 2015-10-07 16:25:59 +02:00
Dmitry Stogov
e0b3b3c752 Revert "Fixed bug #70630 (Closure::call/bind() crash with ReflectionFunction->getClosure())"
This reverts commit 517b553625.
2015-10-06 23:59:36 +03:00
Dmitry Stogov
3c0348056a Revert "Speed up self::method() calls (no ZEND_FETCH_CLASS)"
This reverts commit 8c33bdb976.
2015-10-06 23:48:08 +03:00
Dmitry Stogov
5a49ac77aa Revert "Speed up self::$property access by 20%"
This reverts commit 0fbd3e5fe7.
2015-10-06 23:48:04 +03:00
Bob Weinand
0fbd3e5fe7 Speed up self::$property access by 20% 2015-10-05 21:52:09 +02:00
Bob Weinand
8c33bdb976 Speed up self::method() calls (no ZEND_FETCH_CLASS) 2015-10-05 21:16:52 +02:00
Bob Weinand
517b553625 Fixed bug #70630 (Closure::call/bind() crash with ReflectionFunction->getClosure())
This additionally removes support for binding to an unknown (not in parent hierarchy) scope.
Removing support for cross-scope is necessary for certain compile-time assumptions (like class constants) to prevent unexpected results
2015-10-04 01:38:59 +02:00
Bob Weinand
6c61286da4 Do not include zend_verify_return_type in executable ops (phpdbg) 2015-10-02 12:37:39 +02:00
Xinchen Hui
45cb42f49f Simply use 0/1 instead as dmitry suggested 2015-09-30 10:41:27 +08:00
Xinchen Hui
df2ff75116 Make ZEND_ECHO and removed ZEND_PRINT distinguishable 2015-09-29 21:50:15 +08:00
Anatol Belski
29bf529d88 fix warning 2015-09-24 16:33:53 +02:00
Joe Watkins
1a5d6acff6 ZEND_COMPILE_GUARDS compiler option 2015-09-23 15:33:57 +02:00
Xinchen Hui
4ddeeb49a5 Remove free_string_zval 2015-09-11 10:58:24 +08:00
Joe Watkins
784dd715e4 Fix mangled property names on anon classes 2015-08-18 16:37:38 +01:00
Bob Weinand
34834c58fa Fixed bug #70293 (Crash with specific assertions and zend.assertions=-1) 2015-08-18 15:01:24 +02:00
Xinchen Hui
121409865b use efree_size here 2015-08-12 11:15:09 +08:00
Bob Weinand
dbd8edbbd0 Fixed bug #70241 (Skipped assertions affect Generator returns) 2015-08-11 22:12:06 +02:00
Steven Hilder
7ecb761818 Allow property names from anonymous classes to be unmangled 2015-08-06 15:18:14 +00:00
Dmitry Stogov
58596897e9 Get rid of ZEND_FAST_CALL_UNBOUND 2015-08-04 08:35:40 +03:00
Dmitry Stogov
a16aa4c42c Move most "finally" related code-generation from pass_two() to compiler. 2015-08-04 07:42:28 +03:00
Nikita Popov
743801054d Try to fix finally issue 2015-08-04 07:42:28 +03:00
Hugh Davenport
2a1a8f9ea7 Fixed bug #70183 null pointer deref (segfault) in zend_eval_const_expr 2015-08-02 16:51:23 +02:00
Bob Weinand
ac87657d42 Implicit return should be always on the last line of a function 2015-07-31 02:44:42 +02:00
Bob Weinand
d45d5271f7 Fix bug #70164 (__COMPILER_HALT_OFFSET__ under namespace is not defined) 2015-07-29 19:18:29 +02:00
Julien Pauli
a28115ccdb Fix for #70159 - Better magic constants substitution 2015-07-28 16:30:08 +02:00
Bob Weinand
33a91f57e9 Set CG(zend_lineno) to beginning for final class errors/ops 2015-07-28 00:57:49 +02:00
Bob Weinand
7ca85d8875 Fully fix typed generator returns 2015-07-24 22:04:05 +02:00
Nikita Popov
cff6cbc01f Emit EXT_STMT for each statement
I'm excluding unticked statements for this (in 5.x they were included)
as this would just result in two consecutive EXT_STMTs.

Also add all class statements to unticked statements, these would
generate superfluous EXT_STMT/TICKS in the parent op_array.
2015-07-22 13:38:42 +02:00
Bob Weinand
2141ab9be5 Fix bug #70106 (Inheritance by anonymous class) 2015-07-21 20:34:06 +02:00
Bob Weinand
81a2c43d5e Add an option to not generate INIT_FCALL ops for user functions too 2015-07-21 16:39:49 +02:00
Nikita Popov
c568ffe517 Ignore getcwd return in zend_compile
To do this move the php_ignore_value macro to ZEND_IGNORE_VALUE.
2015-07-16 22:48:56 +02:00
Xinchen Hui
4064ee3061 Fixed bug #70240 (Segfault when doing unset($var());) 2015-08-11 21:42:11 +08:00
Xinchen Hui
87a5f2c486 Fixed no return statement in function returning non-void 2015-08-10 21:48:17 +08:00
Bob Weinand
1003d01f3a Fix __METHOD__ in functions nested into methods 2015-07-14 02:37:35 +02:00
Xinchen Hui
e63c756c09 Better implementation 2015-07-11 18:59:09 +08:00
Bob Weinand
0584df0ad9 hmm, we do not need the nop after compilation, so does not matter for opcache... 2015-07-10 23:35:05 +02:00
Bob Weinand
56800e470b a: try { ... } ≠ try { a: ... } 2015-07-10 23:29:07 +02:00
Dmitry Stogov
ef1b588f6a Resolve GOTO at compile time and replace it with sequnce of FREE/FE_FREE and JMP. 2015-07-10 04:44:21 +03:00
Dmitry Stogov
44f7348caa Exception thrown by "return" statement (from TMP destructors) shouldn't be caught in the same function 2015-07-10 04:13:34 +03:00
Dmitry Stogov
549e8c4959 Squashed commit of the following:
commit 03cf871f1576f08b2348c141b209894a7bf17a86
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:31 2015 +0300

    Revert "Fixed bug #62210 (Exceptions can leak temporary variables. As a part of the fix serious refactoring was done. op_array->brk_cont_array was removed, and replaced with more general and speed efficient op_array->T_liveliness. ZEND_GOTO opcode is always replaced by ZEND_JMP at compile time). (Bob, Dmitry, Laruence)"

    This reverts commit 5ee8413259.

commit 285a68227ce3d380e821a24fa389aa5239bd3fe1
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:26 2015 +0300

    Revert "Tuned off dubugging of live ranges"

    This reverts commit 404dc93d35.

commit 93d9d11157301ee2ec99afb6f5744b126d17f637
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:17 2015 +0300

    Revert "Remove loop_var_stack"

    This reverts commit b3a4c05071.

commit ede68ebbc284aec79e3f719f2c8dbf9da6907752
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:12 2015 +0300

    Revert "ZEND_SEPARATE reuses temporaries"

    This reverts commit 1852f538b9.

commit 96d8995dc1f517fb01b481736273767509f76c47
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:10 2015 +0300

    Revert "Add assertion in liveliness computation"

    This reverts commit ed14019e8c.

commit 0649d7bfef152e6cc8e67b922534e9946c634d9c
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:07 2015 +0300

    Revert "Fixed invalid live-range detection"

    This reverts commit 54f367ee2a.

commit dfe8f3851f6b04595eb089323e3492115a59363e
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:04 2015 +0300

    Revert "Add test guaranteeing that loop vars are only freed after potential return type exceptions"

    This reverts commit f5db5a558d.

commit 52a94aad6f48a199358cc07f7e4f56bb73050504
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:45:01 2015 +0300

    Revert "Fixed exception habdling on "return" statement."

    This reverts commit 17c5315bdf.

commit 6e90ad7331901711e89c2ceb2bcab5023e5cee60
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:44:58 2015 +0300

    Revert "Fix too early terminated temporary range with break/cont/goto"

    This reverts commit cc876c04b4.

commit 7b766e44b1970e4031f75109c302c07ead2c05cb
Author: Dmitry Stogov <dmitry@zend.com>
Date:   Fri Jul 10 02:44:55 2015 +0300

    Revert "Fixed exception catching on break/continue"

    This reverts commit 8c3f701eeb.
2015-07-10 03:31:52 +03:00
Nikita Popov
a49ce7bb91 Don't return T_ERROR from token_get_all()
This turned out to be rather inconvenient after all. Instead just
return the same output we did on PHP 5. If people want to have an
error, use TOKEN_PARSE.
2015-07-09 23:02:21 +02:00
Dmitry Stogov
8c3f701eeb Fixed exception catching on break/continue
Fixed "finaly" handling on exception in "return" statement
2015-07-09 23:20:50 +03:00
Bob Weinand
cc876c04b4 Fix too early terminated temporary range with break/cont/goto
I have no crashing or leaking reproduce script, only valgrind invalid reads for that one; hence no phpt here
2015-07-09 20:07:57 +02:00
Dmitry Stogov
54f367ee2a Fixed invalid live-range detection 2015-07-09 17:38:29 +03:00
Dmitry Stogov
301ee26568 Fixed situation, when CHECH_EXCEPTION() might change value of "opline" variable and the following "opline" useages would access elements of different opcode. That might lead to unpredictable behavior. (Only PHP-7 with GCC global register variables was affected).
CHECK_EXCEPTION() macro is removed. ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTIO() should be used instead. It's equivalent to old CHECK_EXCEPTION() + ZEND_VM_NEXT_OPCODE().
As a side effect, this also slightly improved performnce of builds with GCC >= 4.8.
2015-07-08 18:33:58 +03:00