Commit graph

1956 commits

Author SHA1 Message Date
Nikita Popov
9325ada725 Embed break/continue depth into opline
Previously a separate lval literal was used - this is probably a
leftover from the time where the break level could still be
specified dynamically.
2015-05-23 10:51:33 +02:00
Nikita Popov
3cbe3903fa Move loop var stack management into begin/end loop
Also set start to -1 in begin_loop already, so the info that a
loop variable is not used is already available at compile-time.
2015-05-23 10:51:33 +02:00
Nikita Popov
d0e265392f Drop FREE_ON_RETURN flag, check brk_cont->start instead
Start >= 0 already tells us whether or not the loop has a loop
variable, no need to add extra flags to opcodes.

Also added a test for a case where FREE_ON_RETURN is relevant,
we didn't seem to have any coverage for this.
2015-05-23 10:51:33 +02:00
Nikita Popov
3dba00bc31 Fix scope_is_known() for class constants
Here the active_op_array is still the surrounding file, but we
do know the scope.
2015-05-21 21:07:05 +02:00
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
Nikita Popov
6ef8ae65a2 Allow self etc in eval / file scope
This fixes a regression from 16a9bc1ec2.
Together with the recent closure related changes this should allow
all usages of self etc, while previously (in PHP 5) some things like
self::class did not work.
2015-05-07 15:38:16 +02:00
Nikita Popov
ab97606b8a Fix compiler assumptions about self/etc wrt closures
* Don't throw an error if self/parent/static are used in a closure
  (outside a class).
* Don't propagate self:: constants into closures
* Use runtime fetch for self::class in closures

Fixes bug #66811.
2015-05-06 18:13:19 +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
John Boehr
56fdae9018 Fix uninitialized value with extension traits 2015-05-04 10:33:26 +08:00
Márcio Almada
110759386e ext tokenizer port + cleanup unused lexer states
we basically added a mechanism to store the token stream during parsing
and exposed the entire parser stack on the tokenizer extension through
an opt in flag: token_get_all($src, TOKEN_PARSE).

this change allows easy future language enhancements regarding context
aware parsing & scanning without further maintance on the tokenizer
extension while solves known inconsistencies "parseless" tokenizer
extension has when it handles `__halt_compiler()` presence.
2015-04-30 03:03:29 -03:00
Nikita Popov
16a9bc1ec2 Disallow self etc outside classes at compile-time
Also fix a bug with return types where "self" was rejected inside
a class, but not on a method.

Fallout: A couple of tests changed to more generic error messages.
2015-04-29 20:51:08 +02:00
Xinchen Hui
33e32cbe5b Make it inline 2015-04-28 11:30:25 +08:00
Nikita Popov
422de8a7a7 Drop compile_class_decl return value
Was introduced for anon classes, but no longer needed.
2015-04-27 22:54:02 +02:00
Dmitry Stogov
8acd7f49da Pass class_entry through IS_VAR to avoid hash lookup in ZEND_NEW. 2015-04-27 14:16:29 +03:00
Dmitry Stogov
2a1b0b1121 Use "safe" anonymous class names. Don't show the mangled names through var_dump(). 2015-04-27 13:08:22 +03:00
Dmitry Stogov
94245bc14c Refactored using specialized opcodes 2015-04-27 12:24:39 +03:00
Nikita Popov
8361893444 Fix implementing_class handling 2015-04-26 16:03:58 +02:00
Nikita Popov
f2f890a256 More cleanup (mainly retab) 2015-04-26 15:54:30 +02:00
Nikita Popov
03d7042d5c Don't issue FETCH_CLASS for anon classes 2015-04-26 15:44:48 +02:00
Nikita Popov
929fdc1c1a More retab 2015-04-26 15:28:55 +02:00
Nikita Popov
4a7061b0e3 Simply anon class name generation
Drop dead "parent" code
2015-04-26 15:24:13 +02:00
Nikita Popov
f16eca58a2 Retab 2015-04-26 15:17:53 +02:00
Nikita Popov
9a1797d48e Revert unrelated changes / rebase fixup 2015-04-26 15:13:49 +02:00
krakjoe
49608e0608 Rebase Joe's anon classes implementation 2015-04-26 15:04:22 +02:00
Nikita Popov
75b4fa079f Fix bug #69532
Partial revert of ea2fc7f935.
2015-04-25 18:47:26 +02:00
Dmitry Stogov
000d5d7ec9 Dont't use DO_ICALL for internal functions returned by reference 2015-04-24 00:34:11 +03:00
Xinchen Hui
ea2fc7f935 Slight improvement 2015-04-23 21:50:38 +08:00
Kalle Sommer Nielsen
f2435bd252 Fixed compiler warning 2015-04-23 12:31:02 +02: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
d2607a0110 Move more stuff to file_context
Introduce helper macro FC(x) for CG(file_context).x.

end_compilation() now handled by file_context_end().

While at it, dropped zval wrapper for ticcks.
2015-04-21 17:39:07 +02:00
Xinchen Hui
29c449ce98 Merge branch 'PHP-5.5' into PHP-5.6 2015-04-21 22:44:45 +08:00
Xinchen Hui
a508693874 Remove tail blank which is committed by accident 2015-04-21 22:44:22 +08:00
Xinchen Hui
9d9ba493a2 Merge branch 'PHP-5.5' into PHP-5.6 2015-04-21 22:37:00 +08:00
Xinchen Hui
c667c26f61 Fixed Bug #69467 (Wrong checked for the interface by using Trait) 2015-04-21 22:36:32 +08:00
Nikita Popov
0381c1b79e Fixed bug #69388
Renamed compiler_context to oparray_context. Introduced per-file
file_context. Moved import tables into the file_context.

context_stack no longer exists, instead keeping backups of contexts
on C stack. Same for file contexts.

TODO: Move more things out of CG into file_context. There should be
a number of other things that we should not try to reuse in nested
compilations.
2015-04-20 18:18:52 +02:00
Bob Weinand
f3e124d58d Merge branch 'coroutineDelegation' of https://github.com/bwoebi/php-src 2015-04-14 17:58:58 +02:00
Xinchen Hui
fa0608077b Merge branch 'PHP-5.5' into PHP-5.6 2015-04-10 22:48:36 +08:00
Xinchen Hui
429f411eb3 Fixed bug #69420 (Invalid read in zend_std_get_method) 2015-04-10 22:47:06 +08:00
Nikita Popov
7e9a1c1e3f Merge branch 'PHP-5.5' into PHP-5.6
Conflicts:
	Zend/zend_compile.c
	Zend/zend_compile.h
2015-04-06 22:06:48 +02:00
Nikita Popov
cc70a46525 Fix bug #60022 2015-04-06 22:03:04 +02: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
Dmitry Stogov
ec760d8fff Convert fatal errors into EngineExceptions 2015-04-01 20:01:57 +03:00
Dmitry Stogov
8c031a3f95 Handle incorrect break/continue statements at compile-time 2015-04-01 15:52:26 +03:00
Dmitry Stogov
acfc31c0f8 Use zend_error_noreturn() for fatal errors 2015-04-01 13:32:23 +03:00
Nikita Popov
8d00385871 Reclassify E_STRICT notices
Per RFC https://wiki.php.net/rfc/reclassify_e_strict

While reviewing this, found that there are still three E_STRICTs
left in libraries - need to discuss those.
2015-04-01 11:17:55 +02:00
Nikita Popov
6ef9216269 Finish PHP 4 constructor deprecation 2015-03-31 17:55:27 +02:00
Andrea Faulds
db76b708cf Deprecate PHP 4 constructors 2015-03-31 17:55:27 +02:00
Nikita Popov
53a40386bc Implement additional type reservations
* The class names false, true and null are now reserved.
 * The code dealing with reserved class names is now decoupled
   from scalar type hint handling. It also includes self, parent,
   and static, which are class names which were already reserved
   previously.
 * Reuse existing messages for reserved class names.

Fallout: class_alias() can no longer alias self, parent and static.
However this never really worked in the first place, as the test
which was testing this shows.
2015-03-30 22:59:06 +02:00
Xinchen Hui
e60b380c55 Merge branch 'bug69315' of https://github.com/laruence/php-src 2015-03-28 14:10:41 +08:00
Nikita Popov
c64f5e3332 Disallow direct incdec of function return value
Matching PHP 5 behavior.

We may want to support this for by-reference returns, but that
requires implementing further checks.
2015-03-27 16:40:04 +01:00