Commit Graph

7325 Commits

Author SHA1 Message Date
Xinchen Hui
4c6678d605 Fixed bug #63093 (Segfault while load extension failed in zts-build). 2012-09-15 11:50:16 +08:00
Dmitry Stogov
d4d82aac39 Merge branch 'PHP-5.4'
* PHP-5.4:
  - Fixed bug #61767 (Shutdown functions not called in certain error situation) - Fixed bug #60909 (custom error handler throwing Exception + fatal error = no shutdown function)

Conflicts:
	NEWS
2012-09-06 14:03:22 +04:00
Dmitry Stogov
6ba376f552 Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  - Fixed bug #61767 (Shutdown functions not called in certain error situation) - Fixed bug #60909 (custom error handler throwing Exception + fatal error = no shutdown function)

Conflicts:
	NEWS
	Zend/zend_object_handlers.c
2012-09-06 12:14:29 +04:00
Dmitry Stogov
b29dc146b9 - Fixed bug #61767 (Shutdown functions not called in certain error situation)
- Fixed bug #60909 (custom error handler throwing Exception + fatal error = no shutdown function)
2012-09-06 11:26:40 +04:00
Pierre Joye
2b7bddd82a Merge branch 'PHP-5.4'
* PHP-5.4:
  - fix build, there was no tsrm context there, doing a fetch but this is horribly slow, this fix needs improvement (or simply add a TSRM context in the signature in master
2012-09-05 13:00:41 +02:00
Pierre Joye
954e7a3b3c - fix build, there was no tsrm context there, doing a fetch but this is horribly slow, this fix needs improvement (or simply add a TSRM context in the signature in master 2012-09-05 13:00:04 +02:00
Pierre Joye
4a7d1b4ed8 - fix build, declarations must be 1st in a contextgit checkout -f master 2012-09-05 12:53:29 +02:00
Dmitry Stogov
bceec038c8 Merge branch 'PHP-5.4'
* PHP-5.4:
  Fixed bug #62907 (Double free when use traits)

Conflicts:
	NEWS
2012-09-05 10:01:04 +04:00
Dmitry Stogov
6c0508f8d5 Fixed bug #62907 (Double free when use traits) 2012-09-05 09:58:22 +04:00
Dmitry Stogov
72473962a9 Fixed bug #62991 (Segfault with generator and closure) 2012-09-05 09:50:55 +04:00
Xinchen Hui
32a97dfae6 Merge branch 'PHP-5.4' 2012-09-02 16:53:31 +08:00
Xinchen Hui
069c448623 folder 2012-09-02 16:52:53 +08:00
Nikita Popov
dffffdeb3d Fix leak when yielding array as key
The code was copy-pasted and I forgot to change OP1 to OP2 in that one
place.
2012-09-01 20:31:40 +02:00
Gustavo Lopes
53351d087d Merge branch 'generators'
* generators: (70 commits)
  Fix typos
  Fix segfault when traversing a by-ref generator twice
  Make sure that exception is thrown on rewind() after closing too
  Remove implementation stubs for yield delegation
  Fix several issues and allow rewind only at/before first yield
  Run finally if generator is closed before finishing
  Finally with return now works in generators too
  Add dedicated opcode for returns from a generator
  Disallow serialization and unserialization
  Fix zts build (typo)
  Drop Generator::close() method
  Forgot to add test
  Support trivial finally in generators (no yield, no return)
  Fix implementation of Iterator interface
  Add T_YIELD in tokenizer_data.c
  Throw error also for return occuring before yield
  Fix throwing of exceptions within a generator
  Remove reference restrictions from foreach
  Require parenthesis around yield expressions
  Add some more tests
  ...
2012-09-01 19:07:20 +02:00
Xinchen Hui
b5d2c3174f Merge branch 'PHP-5.4' 2012-08-31 11:25:21 +08:00
Xinchen Hui
66fad45724 Merge branch 'PHP-5.3' into PHP-5.4 2012-08-31 11:24:10 +08:00
Xinchen Hui
5dc2cef370 Fixed bug #62976 (Notice: could not be converted to int when comparing some builtin classes) 2012-08-31 11:22:43 +08:00
Nikita Popov
dbc7809b17 Fix typos 2012-08-29 20:49:14 +02:00
Nikita Popov
bef79588d5 Fix segfault when traversing a by-ref generator twice
If you try to traverse an already closed generator an exception will now be
thrown.

Furthermore this changes the error for traversing a by-val generator by-ref
from an E_ERROR to an Exception.
2012-08-29 20:46:56 +02:00
Nikita Popov
cc07038fa9 Make sure that exception is thrown on rewind() after closing too 2012-08-29 20:31:34 +02:00
Lars Strojny
6b1073a3a7 Bug #62956: fixing private method signature validation
In inheritance, if both methods are private, don not enforce the same
signature.
2012-08-28 14:10:25 +02:00
Lars Strojny
f82dd2c774 Bug #62956: fixing private method signature validation
In inheritance, if both methods are private, don not enforce the same
signature.
2012-08-28 14:06:18 +02:00
Xinchen Hui
cec1786911 Fixed bug #62938 (zend_do_bind_catch() used without declaration) 2012-08-27 10:23:23 +08:00
Lars Strojny
8788cddfb3 Prefix RESULT_CODE enum with ZEND_ 2012-08-26 20:06:47 +02:00
Gustavo Lopes
3d0857938d zend_binary_strncasecmp_l used w/out declaration 2012-08-26 19:44:05 +02:00
Stuart Langley
e3ef84c59b Strong types for the result codes SUCCESS & FAILURE. These are common
symbol names and using #defines can cause conflicts.
2012-08-26 17:15:27 +02:00
Nikita Popov
d60e3c6ef5 Merge remote-tracking branch 'php-src/master' into addGeneratorsSupport
Conflicts:
	Zend/zend_language_parser.y
	Zend/zend_vm_execute.skl
2012-08-26 13:03:55 +02:00
Xinchen Hui
14c88ff82c Merge branch 'PHP-5.4' 2012-08-26 18:28:58 +08:00
Xinchen Hui
e24194d157 Add test for #62907 2012-08-26 18:28:15 +08:00
Xinchen Hui
5ebbdecfea Fixed bug #62930, and more tests 2012-08-26 13:05:33 +08:00
Xinchen Hui
c6a5d192c8 tabs 2012-08-26 12:27:10 +08:00
Xinchen Hui
7c60aeef85 Fixed bug #62931 & #62932 2012-08-26 11:37:05 +08:00
Nikita Popov
bd70d15588 Remove implementation stubs for yield delegation
I decided to leave out yield delegation for an initial proposal, so remove
the stubs for it too.
2012-08-25 19:03:23 +02:00
Nikita Popov
f53225a99e Fix several issues and allow rewind only at/before first yield
* Trying to resume a generator while it is already running now throws a
   fatal error.
 * Trying to use yield in finally while the generator is being force-closed
   (by GC) throws a fatal error.
 * Rewinding after the first yield now throws an Exception
2012-08-25 17:40:08 +02:00
Xinchen Hui
35951d4be0 Support list in foreach
RFC: https://wiki.php.net/rfc/foreachlist
2012-08-25 22:23:57 +08:00
Xinchen Hui
e888d48d9b Merge branch 'PHP-5.4' 2012-08-25 21:55:36 +08:00
Xinchen Hui
383eafe482 Merge branch 'PHP-5.3' into PHP-5.4 2012-08-25 21:50:08 +08:00
Xinchen Hui
d92a89fe52 Fixed bug (segfault while build with zts and GOTO vm-kind) 2012-08-25 21:47:53 +08:00
Xinchen Hui
326aa08753 Prefer no finally block for most situations 2012-08-25 21:14:51 +08:00
Nikita Popov
4d8edda341 Run finally if generator is closed before finishing 2012-08-24 19:10:09 +02:00
Nikita Popov
7cdf6367a5 Finally with return now works in generators too 2012-08-24 13:52:16 +02:00
Nikita Popov
68c1e1cfe9 Add dedicated opcode for returns from a generator
Generators don't have a return value, so it doesn't make sense to have
a shared implementation here.
2012-08-24 13:51:39 +02:00
Nikita Popov
6517ed0215 Merge remote-tracking branch 'php-src/master' into addGeneratorsSupport
Conflicts:
	Zend/zend_vm_def.h
	Zend/zend_vm_execute.h
2012-08-24 13:29:40 +02:00
Xinchen Hui
3ef3b80cdd Merge branch 'PHP-5.4' 2012-08-23 16:13:57 +08:00
Xinchen Hui
87785c7d5a tabs 2012-08-23 16:13:34 +08:00
Xinchen Hui
9b2ca07223 Merge branch 'PHP-5.4' 2012-08-23 16:07:13 +08:00
Xinchen Hui
d39aa984ad Refix #62358, previous has side-affect 2012-08-23 16:06:17 +08:00
Xinchen Hui
b8800d1701 Merge branch 'PHP-5.4' 2012-08-23 15:45:06 +08:00
Xinchen Hui
6d1bebfcb0 Fixed bug #62358 (Segfault when using traits a lot) 2012-08-23 15:41:49 +08:00
Felipe Pena
596e855feb Merge branch 'PHP-5.4'
* PHP-5.4:
  - Fixed bug #62892 (ReflectionClass::getTraitAliases crashes on importing trait methods as private)
2012-08-22 10:51:06 -03:00
Felipe Pena
7a56ac00a0 - Fixed bug #62892 (ReflectionClass::getTraitAliases crashes on importing trait methods as private) 2012-08-22 10:50:50 -03:00
Xinchen Hui
3938e5d616 Merge branch 'finally' 2012-08-22 18:33:37 +08:00
Xinchen Hui
60a29791e4 Fixed bug that jmp in try block jmp over finally block
Refactor the implemention,  make codes clear
2012-08-22 18:32:03 +08:00
Xinchen Hui
3d4f91da4b Merge branch 'master' into finally 2012-08-22 18:12:11 +08:00
Anatoliy Belsky
dac25a0d50 Merge branch 'PHP-5.4'
* PHP-5.4:
  Fixed bug #62313 Zend\tests\errmsg_021.phpt fails
2012-08-22 11:45:32 +02:00
Anatoliy Belsky
22f55d5665 Fixed bug #62313 Zend\tests\errmsg_021.phpt fails 2012-08-22 11:43:12 +02:00
Xinchen Hui
703a4e390d stash 2012-08-22 13:51:44 +08:00
Sebastian Bergmann
0fa40bb999 Bump version. 2012-08-21 13:37:18 +02:00
Nikita Popov
f45a0f31c8 Disallow serialization and unserialization 2012-08-20 16:01:16 +02:00
Nikita Popov
1823b16fa1 Merge remote-tracking branch 'php-src/master' into addGeneratorsSupport
Merging master to fix Windows build

Conflicts:
	Zend/zend_language_scanner.c
	Zend/zend_language_scanner_defs.h
	Zend/zend_vm_def.h
2012-08-20 13:37:53 +02:00
Nikita Popov
9003cd1425 Fix zts build (typo) 2012-08-20 13:28:36 +02:00
Nikita Popov
05f10480c5 Drop Generator::close() method 2012-08-20 12:53:18 +02:00
Stanislav Malyshev
3336e1e78c Merge branch 'pull-request/31'
* pull-request/31:
  Fix lexing of nested heredoc strings in token_get_all()
2012-08-19 21:43:04 -07:00
Felipe Pena
a025abe388 Merge branch 'PHP-5.4'
* PHP-5.4:
  - Value stored to var is never used
2012-08-19 12:44:54 -03:00
Felipe Pena
7a72405171 Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  - Value stored to var is never used
2012-08-19 12:44:49 -03:00
Felipe Pena
001966c754 - Value stored to var is never used 2012-08-19 12:44:44 -03:00
Felipe Pena
b2a74b5bdb - Remove unused vars 2012-08-18 11:28:00 -03:00
Xinchen Hui
57e7c7bd49 tab 2012-08-18 11:57:53 +08:00
Xinchen Hui
72b9b8f380 Make the codes clearer, and also check continue statement 2012-08-18 11:44:09 +08:00
Xinchen Hui
f2a8912e61 Refactor examing of jumping out of finally block 2012-08-18 00:16:34 +08:00
Xinchen Hui
2449365238 Fixed context info in error message 2012-08-17 21:18:20 +08:00
Xinchen Hui
acd402d4e7 typo 2012-08-16 23:01:58 +08:00
Xinchen Hui
0312d0a262 Prevents goto out of a finally block 2012-08-16 18:17:26 +08:00
Xinchen Hui
154fe7486d typo 2012-08-14 14:17:27 +08:00
Xinchen Hui
f82be0550b add test for alone try block, and update test scripts summary 2012-08-14 14:08:38 +08:00
Xinchen Hui
c64f4e736c Add functions declarations, use tabs 2012-08-14 08:59:40 +08:00
Anatoliy Belsky
baea290b6c fix windows build 2012-08-13 19:44:45 +02:00
Nikita Popov
7195a5b376 Forgot to add test 2012-08-13 19:24:44 +02:00
Nikita Popov
ae716939eb Support trivial finally in generators (no yield, no return)
The finally clause is now properly run when an exception is thrown in the
try-block. It is not yet run on `return` and also not run when the generator
is claused within a try block.

I'll add those two things as soon as laruence refactored the finally code.
2012-08-13 17:22:21 +02:00
Nikita Popov
f4ce364628 Merge remote-tracking branch 'php-src/master' into addGeneratorsSupport
This is just an intial merge. It does not yet make generators and finally
work together.

Conflicts:
	Zend/zend_language_scanner.c
	Zend/zend_language_scanner_defs.h
	Zend/zend_vm_def.h
	Zend/zend_vm_execute.h
	Zend/zend_vm_execute.skl
	Zend/zend_vm_opcodes.h
2012-08-13 16:54:53 +02:00
Xinchen Hui
80d5ae3cea Implemented 'finally' keywords for php
RFC: https://wiki.php.net/rfc/finally
FR: https://bugs.php.net/bug.php?id=32100
and I have got some improvment ideas(performance), will implemented
later. thanks
2012-08-13 21:48:39 +08:00
Xinchen Hui
253760bb6b Merge branch 'PHP-5.4' 2012-08-12 21:00:01 +08:00
Xinchen Hui
dda0565b53 Merge branch 'PHP-5.3' into PHP-5.4 2012-08-12 20:58:45 +08:00
Xinchen Hui
4970926e45 Fixed bug #62763 (register_shutdown_function and extending class) 2012-08-12 20:58:09 +08:00
Xinchen Hui
9787e7af44 Merge branch 'PHP-5.4' 2012-08-12 12:02:17 +08:00
Xinchen Hui
75f6c8d42c Revert "zend_make_printable_zval choses cast_object over __toString"
This reverts commit a5dfd41494.
2012-08-12 12:02:06 +08:00
Xinchen Hui
32c1c5a19f Revert "Test for bug 62328"
This reverts commit 222ab9da1a.
2012-08-12 12:02:02 +08:00
Xinchen Hui
7b307fb930 Fixed bug #62328 (implementing __toString and a cast to string fails)
__toString should has a high priority
2012-08-12 11:50:28 +08:00
Xinchen Hui
d11fa44d62 Merge branch 'Bug-62328' of https://github.com/leight/php-src 2012-08-12 10:40:41 +08:00
Leigh
222ab9da1a Test for bug 62328 2012-08-10 11:43:53 +01:00
Leigh
a5dfd41494 zend_make_printable_zval choses cast_object over __toString
https://bugs.php.net/bug.php?id=62328

Added a check to see if the object implements a __toString magic
method. This should be called instead of the cast_object method of
built-in classes when defined.
2012-08-10 11:09:25 +01:00
Stanislav Malyshev
04ac5065e0 Merge branch 'PHP-5.4'
* PHP-5.4:
  Added Bison 2.5.1 to bison_version_list
2012-08-05 20:48:47 -07:00
Ryusuke SEKIYAMA
81c6a060a2 Added Bison 2.5.1 to bison_version_list 2012-08-05 20:48:42 -07:00
Xinchen Hui
ac88d108e6 Merge branch 'PHP-5.4' 2012-08-04 11:29:56 +08:00
Xinchen Hui
d289efb457 Merge branch 'PHP-5.3' into PHP-5.4
Conflicts:
	Zend/zend_API.h
2012-08-04 11:14:03 +08:00
Xinchen Hui
f4a315fce2 This becomes useless, since we have set that in the INIT macro 2012-08-04 11:03:21 +08:00
Xinchen Hui
03a1fcabf3 Fixed bug #62744 (dangling pointers made by zend_disable_class)
the test will be added while commit the fix for #62737
2012-08-04 10:41:26 +08:00
Nuno Lopes
aa8eabddd6 make default_exception_ce and error_exception_ce static 2012-08-02 06:53:09 -04:00
Nuno Lopes
81369bcc20 make default_exception_ce and error_exception_ce static 2012-08-02 11:44:15 +01:00
Xinchen Hui
6c7c2d0c03 Merge branch 'PHP-5.4' 2012-08-02 12:34:15 +08:00
Xinchen Hui
242658c053 Merge branch 'PHP-5.3' into PHP-5.4 2012-08-02 12:32:44 +08:00
Xinchen Hui
433089ccb4 Fixed bug #62716 (munmap() is called with the incorrect length) 2012-08-02 12:30:07 +08:00
Xinchen Hui
b412df1e67 Merge branch 'PHP-5.4' 2012-07-31 10:52:26 +08:00
Xinchen Hui
572d6437bc expect pass for 5.4 2012-07-31 10:51:18 +08:00
Xinchen Hui
c730329bb0 Merge branch 'PHP-5.3' into PHP-5.4 2012-07-31 10:51:04 +08:00
Xinchen Hui
645f84e41b Test for bug #62680 2012-07-31 10:49:13 +08:00
Xinchen Hui
32c05f772e Merge branch 'PHP-5.4'
* PHP-5.4:
  Skip test while zend_mm is disabled
2012-07-29 12:20:05 +08:00
Xinchen Hui
11e84180ef Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  Skip test while zend_mm is disabled
2012-07-29 12:19:28 +08:00
Xinchen Hui
015ee3b2c8 Skip test while zend_mm is disabled 2012-07-29 12:17:43 +08:00
Xinchen Hui
b477a84026 Fixed bug #60194 for eavl
same reason here
2012-07-28 17:00:05 +08:00
Xinchen Hui
ef7286a42f Fixed bug #60194 (--with-zend-multibyte and --enable-debug reports LEAK with run-test.php)
It's not a big deal, just because lexer will read the char after cursor before leaving
2012-07-28 00:50:45 +08:00
Gustavo André dos Santos Lopes
594397993d Fix bug #62651: source level BC break
Break for C++ extensions that don't wrap the includes of PHP libraries
in extern "C" {.
2012-07-27 01:39:06 +02:00
Gustavo André dos Santos Lopes
ccffec74d0 Fix bug #62651: source level BC break
Break for C++ extensions that don't wrap the includes of PHP libraries
in extern "C" {.
2012-07-26 23:37:02 +02:00
Nikita Popov
268740d984 Fix implementation of Iterator interface
It looks like you have to implement the Iterator interface *before*
assigning get_iterator. Otherwise the structure for user iterators isn't
correctly zeroed out.

Additionaly I'm setting class_entry->iterator_funcs.funcs now. Not sure if
this is strictly necessary, but better safe than sorry ;)
2012-07-26 17:13:25 +02:00
Xinchen Hui
80497ea7df Merge branch 'PHP-5.4' 2012-07-26 13:58:01 +08:00
Xinchen Hui
302ad0d648 Fix test, committed in wrong folder 2012-07-26 13:57:04 +08:00
Xinchen Hui
eae0610042 Fixed bug #62653: (unset($array[$float]) causes a crash)
the reason why jpauli and I can not reproduce is (it's silly):
I typo "USE_ZEND_ALLOC *&&* valgrind" at the first time, then I always ctrl+r
and jpauli copied my command from the pastbin :)

thanks
2012-07-26 13:53:06 +08:00
Xinchen Hui
07c61c2fdb Merge branch 'PHP-5.4' 2012-07-26 12:44:51 +08:00
Xinchen Hui
b4b3a65f55 Fixed bug #62661 (Interactive php-cli crashes if include() is used in auto_prepend_file) 2012-07-26 12:40:47 +08:00
Xinchen Hui
ba568aaebb Fixed invalid read in CONST_STRING dereference, reported by Nikic 2012-07-26 00:29:39 +08:00
Nikita Popov
134089372b Throw error also for return occuring before yield
Previously only an error was thrown when return occured after yield. Also
returns before the first yield would fail for by-ref generators.

Now the error message is handled in pass_two, so all returns are checked.
2012-07-22 20:11:09 +02:00
Nikita Popov
94b2ccae9c Fix throwing of exceptions within a generator
If a generator threw an exception and was iterated using foreach (i.e. not
manually) an infinite loop was triggered. The reason was that the exception
was not properly rethrown using zend_throw_exception_internal.
2012-07-22 17:46:46 +02:00
Nikita Popov
de80e3ce4b Remove reference restrictions from foreach
foreach only allowed variables to be traversed by reference. This never
really made sense because

    a) Expressions like array(&$a, &$b) can be meaningfully iterated by-ref
    b) Function calls can return by-ref (so they can also be meaningfully
       iterated)
    c) Iterators could at least in theory also be iterated by-ref (not
       sure if any iterator makes use of this)

With by-ref generators the restriction makes even less sense, so I removed
it altogether.
2012-07-22 14:33:25 +02:00
Nikita Popov
80748631aa Require parenthesis around yield expressions
If yield is used in an expression context parenthesis are now required.
This ensures that the code is unambiguos.

Yield statements can still be used without parenthesis (which should be
the most common case).

Also yield expressions without value can be used without parenthesis,
too (this should be the most common case for coroutines).

If the yield expression is used in a context where parenthesis are required
anyway, no additional parenthesis have to be inserted.

Examples:

    // Statements don't need parenthesis
    yield $foo;
    yield $foo => $bar;

    // Yield without value doesn't need parenthesis either
    $data = yield;

    // Parentheses don't have to be duplicated
    foo(yield $bar);
    if (yield $bar) { ... }

    // But we have to use parentheses here
    $foo = (yield $bar);

This commit also fixes an issue with by-ref passing of $foo[0] like
variables. They previously weren't properly fetched for write.

Additionally this fixes valgrind warnings which were caused by access to
uninitialized memory in zend_is_function_or_method_call().
2012-07-22 01:22:22 +02:00
Nikita Popov
1f70a4c5fe Add some more tests 2012-07-20 17:40:04 +02:00
Nikita Popov
612c2490b7 Move a variable 2012-07-20 17:38:39 +02:00
Nikita Popov
c9709bfbd7 Remove asterix modifier (*) for generators
Generators are now automatically detected by the presence of a `yield`
expression in their body.

This removes the ZEND_SUSPEND_AND_RETURN_GENERATOR opcode. Instead
additional checks for ZEND_ACC_GENERATOR are added to the fcall_common
helper and zend_call_function.

This also adds a new function zend_generator_create_zval, which handles
the actual creation of the generator zval from an op array.

I feel like I should deglobalize the zend_create_execute_data_from_op_array
code a bit. It currently changes EG(current_execute_data) and
EG(opline_ptr) which is somewhat confusing (given the name).
2012-07-20 16:09:06 +02:00
Nikita Popov
85f077cea1 Add support by yielding by-reference 2012-07-17 13:29:56 +02:00
Stanislav Malyshev
efdb7ce4b0 improve code in zend_operators 2012-07-14 21:06:40 -07:00
Stanislav Malyshev
bd340b7296 add NEWS/UPGRADING 2012-07-14 15:03:51 -07:00
Stanislav Malyshev
c164e6b5a3 add test 2012-07-14 14:50:50 -07:00
Stanislav Malyshev
582514d4c7 fix for bug#18556 - use simple tolower() function for internal things 2012-07-14 14:50:50 -07:00
Nuno Lopes
b2b018d5f7 appease MSVC (doesnt like unary minus of unsigned ints) 2012-07-08 15:28:29 -04:00
Nuno Lopes
5910d8d4f4 appease MSVC (doesnt like unary minus of unsigned ints) 2012-07-08 15:21:18 -04:00
Nuno Lopes
e6d9cd983b appease MSVC (doesnt like unary minus of unsigned ints) 2012-07-08 15:19:41 -04:00
Nuno Lopes
91ce8041a3 fix (signed) integer overflow (part of bug #52550 2012-07-02 01:36:35 -04:00
Nuno Lopes
d80ff39189 fix (signed) integer overflow (part of bug #52550 2012-07-02 01:35:28 -04:00
Nuno Lopes
f2bf98a589 fix (signed) integer overflow (part of bug #52550 2012-07-02 01:31:40 -04:00
Stanislav Malyshev
a3322f8927 Merge branch 'PHP-5.4'
* PHP-5.4:
  Fixed the common misspelling of the word occurred (occured -> occurred)
2012-06-30 17:00:25 -07:00
Marc Easen
896ac689c9 Fixed the common misspelling of the word occurred (occured -> occurred) 2012-06-30 16:54:03 -07:00
Xinchen Hui
a027ba3afe Merge branch 'PHP-5.4'
* PHP-5.4:
  Fixed bug #62357 (compile failure: (S) Arguments missing for built-in function __memcmp).
2012-06-26 18:50:52 +08:00
Xinchen Hui
a44a1dc194 Fixed bug #62357 (compile failure: (S) Arguments missing for built-in function __memcmp).
Any C library function may be a macro, We should avoid using ZEND_STRS(L) as their arguments
2012-06-26 18:42:33 +08:00
Nikita Popov
5a9bddba66 Forgot to git add two tests 2012-06-25 21:41:50 +02:00
Nikita Popov
ab75ed6ba9 Disallow closing a generator during its execution
If a generator is closed while it is running an E_WARNING is thrown and the
call is ignored. Maybe a fatal error should be thrown instead?
2012-06-23 16:08:15 +02:00
Nikita Popov
14766e1417 Pass zend_generator directly to Zend VM
Previously the zval* of the generator was passed into the VM by misusing
EG(return_value_ptr_ptr). Now the zend_generator* itself is directly passed
in. This saves us from always having to pass the zval* around everywhere.
2012-06-23 14:43:52 +02:00
Nikita Popov
04e781f0e4 Implement get_iterator
This implements the get_iterator handler for Generator objects, thus making
direct foreach() iteration significantly faster.
2012-06-23 01:28:16 +02:00
Nikita Popov
1d3f37dded Fix segfault in method test
A ref has to be added to $this if the generator is called !nested (which
is the case when it is invoked via getIterator).
2012-06-23 00:03:28 +02:00
Johannes Schlüter
7d900356e9 Merge branch 'PHP-5.4'
* PHP-5.4:
  Remove unneeded and outdated ChangeLog file
2012-06-22 20:01:27 +02:00
Johannes Schlüter
2418791731 Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  Remove unneeded and outdated ChangeLog file
2012-06-22 20:01:06 +02:00
Johannes Schlüter
84b1c568f4 Remove unneeded and outdated ChangeLog file 2012-06-22 20:00:20 +02:00
Nikita Popov
6233408a2a Fix thread safe build 2012-06-20 21:31:23 +02:00
Nikita Popov
d939d2dee5 Add sceleton for yield* expression
This does not yet actually implement any delegation.
2012-06-19 00:37:31 +02:00
Nikita Popov
f169b26dd7 Fix backtraces and func_get_args()
To make the generator function show up in backtraces one has to insert an
additional execute_data into the chain, as prev_execute_data->function_state
is used to determine the called function.

Adding the additional stack frame is also required for func_get_args(), as
the arguments are fetched from there too. The arguments have to be copied
in order to keep them around. Due to the way they are saved doing so is
quite ugly, so I added another function zend_copy_arguments to zend_execute.c
which handles this.
2012-06-09 00:40:47 +02:00
Stanislav Malyshev
d1debecd90 typo 2012-06-08 12:24:40 -07:00
Stanislav Malyshev
ba8333cdb0 typo 2012-06-08 12:23:51 -07:00
Stanislav Malyshev
17c0ff1194 typo 2012-06-08 01:24:49 -07:00
Pierrick Charron
93b041e6c2 Regenerated files 2012-06-07 18:05:25 +02:00
Pierrick Charron
c975320eb9 Regenerated files 2012-06-07 18:04:15 +02:00
Pierrick Charron
4e6f27f4db Regenerated files 2012-06-07 18:02:27 +02:00
Pierrick Charron
5b10a65617 Merge branch 'PHP-5.4'
* PHP-5.4:
  Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon)
2012-06-07 17:51:56 +02:00
Pierrick Charron
494c170e6f Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon)
2012-06-07 17:45:43 +02:00
Pierrick Charron
fed5923dbc Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon)
Modify the scanner to check if the first char of the raw data is an opening " in which case we
need to find the closing one. Otherwise just search for the next end of value char [\r\n;\000]
2012-06-07 17:44:20 +02:00
Nikita Popov
40760ecb90 Fix cloning of generator methods
Forgot to add a reference to the this variable
2012-06-05 14:00:31 +02:00
Felipe Pena
913b2c700f Merge branch 'PHP-5.4'
* PHP-5.4:
  - Optimize comparison between same HashTable pointer
  - Fixed bug #62205 (php-fpm segfaults (null passed to strstr))
  - fix missing include for unix sockets
  - Comment unused function to avoid warnings
  - Fixed bug #62205 (php-fpm segfaults (null passed to strstr))
  - fix missing include for unix sockets
  - Comment unused function to avoid warnings
2012-06-03 18:23:57 -03:00
Felipe Pena
60c5f9910f Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
  - Optimize comparison between same HashTable pointer
  - Fixed bug #62205 (php-fpm segfaults (null passed to strstr))
  - fix missing include for unix sockets
  - Comment unused function to avoid warnings
2012-06-03 18:20:26 -03:00
Felipe Pena
d57b278ad1 - Optimize comparison between same HashTable pointer 2012-06-03 18:16:57 -03:00
Nikita Popov
bf82f46ea9 Properly handle yield during method calls 2012-06-03 02:16:29 +02:00
Nikita Popov
7b3bfa5784 Improve backtraces from generators
The current situation is still not perfect, as the generator function itself
does not appear in the stack trace. This makes sense in some way, but it
would probably be more helpful if it would show up (with the bound arguments)
after the $generator->xyz() call. This could be misleading too though as the
function is not *really* called there.
2012-06-03 02:00:11 +02:00
Nikita Popov
6117f4c7c0 Add cloning support for generators
Generators can now be cloned. I'm pretty sure that my current code does not
yet cover all the edge cases of cloning the execution context, so there are
probably a few bugs in there :)
2012-06-02 20:40:58 +02:00
Nikita Popov
1477be9aa8 Make $generator->send() return the current value
This makes the API easier to use (and is consistent with Python and JS).
2012-05-31 20:03:18 +02:00
Nikita Popov
ee89e228f6 Allow yielding during function calls
During function calls arguments are pushed onto the stack. Now these are
backed up on yield and restored on resume. This requires memcpy'ing them,
but there doesn't seem to be any better way to do it.

Also this fixes the issue with exceptions thrown during function calls.
2012-05-31 00:00:30 +02:00
Nikita Popov
0033a52521 Allow throwing exceptions from generators
The missing piece is how one can find the next stack frame, which is
required for dtor'ing arguments pushed to the stack. As the generator
execute_data does not live on the stack one can't use it to figure out the
start of the next stack frame. So there must be some other method.
2012-05-30 16:28:33 +02:00
Stanislav Malyshev
ec2029a894 Merge branch 'PHP-5.4'
* PHP-5.4:
  fix test
  fix test
2012-05-29 23:53:01 -07:00
Stanislav Malyshev
abe6362716 fix test 2012-05-29 23:52:47 -07:00
Nikita Popov
8790160235 Add auto-increment keys
When no key is explicitely yielded PHP will used auto-incrementing keys
as a fallback. They behave the same as with arrays, i.e. the key is the
successor of the largest previously used integer key.
2012-05-30 05:05:49 +02:00
Nikita Popov
bc08c2cf94 Add support for yielding keys
Keys are yielded using the

    yield $key => $value

syntax. Currently this is implemented as a statement only and not as an
expression, because conflicts arise considering nesting and use in arrays:

    yield yield $a => $b;
    // could be either
    yield (yield $a) => $b;
    // or
    yield (yield $a => $b);

Once I find some way to resolve these conflicts this should be available
as an expression too.

Also the key yielding code is rather copy-and-past-y for the value yielding
code, so that should be factored out.
2012-05-30 02:44:06 +02:00
Nikita Popov
72a91d08e7 Add $generator->close() method
Calling $generator->close() is equivalent to executing a return statement
at the current position in the generator.
2012-05-29 18:11:18 +02:00
Nikita Popov
12e928314f Fix segfault when send()ing to a closed generator 2012-05-29 18:01:08 +02:00
Nikita Popov
ad525c288a Allow to use yield without value
If the generator is used as a coroutine it often doesn't make sense to yield
anything. In this case one can simply receive values using

    $value = yield;

The yield here will simply yield NULL.
2012-05-29 17:53:11 +02:00
Nikita Popov
3600914ced Add support for $generator->send()
Yield now is an expression and the return value is the value passed to
$generator->send(). By default (i.e. if ->next() is called) the value is
NULL.

Unlike in Python ->send() can be run without priming the generator with a
->next() call first.
2012-05-29 17:34:33 +02:00
Nikita Popov
b770b221e0 Make the GOTO and SWITCH VMs work again 2012-05-29 02:31:56 +02:00
Nikita Popov
4aab08b64c Properly free resources when generator return value not used
To keep things clean two new functions are introduced:

zend_clean_and_cache_symbol_table(HashTable *symbol_table)
zend_free_compiled_variables(zval ***CVs, int num)
2012-05-28 06:43:18 +02:00
Nikita Popov
bcc7d976f3 Set EG(current_execute_data)
This fixes several issues. In particular it makes method generators work
properly and also allows generators using a symbol table.
2012-05-28 06:06:30 +02:00
Nikita Popov
9f52c5c226 Fix generator creation when execute_data is not nested
This happens primarily when the generator is invoked from some internal
place like a dynamic function call.
2012-05-27 22:48:21 +02:00
Nikita Popov
64a643a4e3 Free loop variables
If the generator is closed before it has finished running, it may happen
that some FREE or SWITCH_FREE opcodes haven't been executed and memory is
leaked.

This fixes it by walking the brk_cont_array and manually freeing the
variables.
2012-05-27 17:14:20 +02:00
Nikita Popov
247bb737d5 Add support for generator methods 2012-05-27 03:50:31 +02:00
Nikita Popov
39d3d5ec13 Add first real generator test
The test implements an xrange() function (the generator version of range()).
2012-05-27 00:50:27 +02:00
Nikita Popov
cbfa96cad5 Remove wrong dtor call 2012-05-27 00:25:12 +02:00
Nikita Popov
d49d3971e6 Close generator on return 2012-05-26 23:59:22 +02:00
Nikita Popov
5bb3a995c2 Implement return for generators
For generators ZEND_RETURN directly calls ZEND_VM_RETURN(), thus passing
execution back to the caller (zend_generator_resume).

This commit also adds a check that only return; is used in generators and
not return $value;.
2012-05-26 23:07:40 +02:00
Nikita Popov
fafce58683 Add YIELD opcode implementation 2012-05-26 22:44:53 +02:00
Nikita Popov
1a99d1c887 Add way to pass generator object to opcode handlers
The generator zval is put into the return_value_ptr_ptr.
2012-05-26 19:40:29 +02:00
Nikita Popov
f627be5254 Add support for executing a zend_execute_data
This adds another function execute_ex(), which accepts a zend_execute_data
struct to run (contrary to execute(), which accepts a zend_op_array from
which it initialized the execute_data).

This needs a bit more cleanup.
2012-05-26 17:53:13 +02:00
Stanislav Malyshev
b187c35f23 Merge branch 'pull-request/54'
* pull-request/54:
  Allow arbitrary expressions for empty()

    This change is as per RFC https://wiki.php.net/rfc/empty_isset_exprs.

    The change allows passing the result of function calls and other
    expressions to the empty() language construct. This is accomplished by
    simply rewriting empty(expr) to !expr.

    The change does not affect the suppression of errors when using empty()
    on variables. empty($undefinedVar) will continue not to throw errors.
    When an expression is used inside empty() on the other hand, errors will
    not be suppressed. Thus empty($undefinedVar + $somethingElse) *will*
    throw a notice.

    The change also does not make empty() into a real function, so using
    'empty' as a callback is still not possible.

    In addition to the empty() changes the commit adds nicer error messages
    when isset() is used on function call results or other expressions.
2012-05-24 14:18:12 -05:00
Gustavo André dos Santos Lopes
d4fd95e292 Merge branch '5.4' 2012-05-24 11:09:18 +02:00
Nuno Lopes
58d2203317 add support for the alloc_size __attribute__ (through ZEND_ATTRIBUTE_ALLOC_SIZE and ZEND_ATTRIBUTE_ALLOC_SIZE2
requires GCC >= 4.3 or clang >= 3.2 to perform anything useful
2012-05-23 22:18:01 -04:00
Gustavo André dos Santos Lopes
acd711685a Fixed bug #62097
This fixes the fix for bug #54547 in 32-bit machines by accepting
float comparisons in 32-bit machines as long as the integer is
not larger than the mantissa.
2012-05-23 18:55:36 -05:00
Nikita Popov
ececcbce0e Allow calling zend_vm_gen from everywhere
Before one could only call it with cwd=Zend.
2012-05-23 20:40:21 +02:00
Nikita Popov
2c5ecb4fea Add dummy Iterator implementation
This simply adds dummy rewind/valid/current/key/next methods to Generator.
2012-05-23 16:44:58 +02:00
Nikita Popov
9ce9a7e639 Add initial code for suspending execution
This is just some initial code, which is still quite broken (and needs to be
moved so it can be reused.)
2012-05-23 14:20:25 +02:00