Commit Graph

320 Commits

Author SHA1 Message Date
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
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
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
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
Nikita Popov
5e763d9420 Allocate execute_data using malloc for generators
Generators need to switch the execute_data very often. If the execute_data
is allocated on the VM stack this operation would require to always copy
the structure (which is quite large). That's why the execution context is
allocated on the heap instead (only for generators obviously).
2012-05-22 23:17:59 +02:00
Nikita Popov
46fa26ab85 Make generator functions return a Generator object
Right now generator functions simply immediately return a new Generator
object (no suspension yet).
2012-05-20 14:45:01 +02:00
Nikita Popov
1cec3f12cc Add ZEND_SUSPEND_AND_RETURN_GENERATOR opcode
If the function is a generator this opcode will be invoked right after
receiving the function arguments.

The current implementation is just a dummy.
2012-05-19 23:19:21 +02:00
Xinchen Hui
565892d4c0 Implement const array/string dereference
RFC:https://wiki.php.net/rfc/constdereference
2012-04-17 10:06:17 +08:00
Xinchen Hui
229e55632d Fixed bug #61011 (Crash when an exception is thrown by __autoload accessing a static property) 2012-02-25 13:56:59 +00:00
Dmitry Stogov
c95937e902 Fixed (disabled) inline-caching for ZEND_OVERLOADED_FUNCTION methods 2012-01-30 10:51:02 +00:00
Xinchen Hui
3a8a5bc843 WS, merged from trunk cause this issue, sorry 2012-01-26 01:28:37 +00:00
Xinchen Hui
a222954a45 Re-fixed bug #60825 (Segfault when running symfony 2 tests) 2012-01-24 14:39:45 +00:00
Xinchen Hui
cf54cc736b Fixed bug #60825 (Segfault when running symfony 2 tests) 2012-01-21 17:13:53 +00:00
Felipe Pena
8775a37559 - Year++ 2012-01-01 13:15:04 +00:00
Stanislav Malyshev
327a5828cd Fix warning on non-numeric offsets 2011-12-22 03:22:42 +00:00
Stanislav Malyshev
1f4f33afcf implement the solution for isset/string offsets, fix bug #60362 2011-12-19 02:05:03 +00:00
Dmitry Stogov
e86830273b Fixed bug #60104 (Segmentation Fault in pdo_sqlite when using sqliteCreateFunction()) 2011-11-08 10:11:25 +00:00
Xinchen Hui
a9dbbf6dea Fix bug #60169 Conjunction of ternary and list crashes PHP 2011-11-03 03:59:41 +00:00
Arnaud Le Blanc
ea5a61e39b Improved ternary operator performance when returning arrays 2011-10-18 19:42:42 +00:00
Dmitry Stogov
e43ff1359e Fixed ZE specific compile warnings (Bug #55629) 2011-09-13 13:29:35 +00:00
Dmitry Stogov
d4a80cfa8d Fixed bug #55305 (ref lost: 1st ref instantiated in class def, 2nd ref made w/o instantiating) 2011-08-01 15:23:16 +00:00
Dmitry Stogov
0f3e70fe01 Fixed bug #54305 (Crash in gc_remove_zval_from_buffer) 2011-07-11 10:31:49 +00:00
Dmitry Stogov
3931078e7f Fixed bug #55135 (Array keys are no longer type casted in unset()) 2011-07-06 12:04:02 +00:00
Felipe Pena
be3889456b - Added indirect method call through array variable (FR Bug #47160) 2011-06-06 21:42:05 +00:00
Felipe Pena
4737910b69 - Added new parameter parsing option (p - for valid path (string without null byte in the middle))
# The tests will be fixed in the next commits
2011-06-06 21:28:16 +00:00
Dmitry Stogov
b7eb3c1c5a Arithmetic speedup. Inlined most probable code-paths for arithmetic operations directly into executor. 2011-05-23 08:05:44 +00:00
Dmitry Stogov
6eedfb9b3a Fixed direct threaded executor (php zend_vm_gen.php --with-vm-kind=GOTO) 2011-05-05 16:02:11 +00:00
Dmitry Stogov
9fb4cd1a91 Fixed bug #54585 (track_errors causes segfault) 2011-04-25 07:50:07 +00:00
Dmitry Stogov
821d7169d9 Fixed bug #54367 (Use of closure causes problem in ArrayAccess). 2011-04-20 12:59:18 +00:00
Dmitry Stogov
8c06867e11 Fixed bug #54262 (Crash when assigning value to a dimension in a non-array) 2011-03-16 11:14:33 +00:00
Stanislav Malyshev
8efa208e0b fix UMR when variable name is an object and __toString is used
# zend_call_function checks IS_REF on This
2011-03-16 05:25:02 +00:00
Felipe Pena
0203cc3d44 - Year++ 2011-01-01 02:17:06 +00:00
Dmitry Stogov
c35fc78890 Fixed bug #53511 (Exceptions are lost in case an exception is thrown in catch operator) 2010-12-09 16:38:37 +00:00
Dmitry Stogov
7628da98c4 Removed support for break/continue $var syntax 2010-11-24 12:19:56 +00:00
Dmitry Stogov
68e154b1bf reduced size of temp_variariable 2010-10-22 14:51:07 +00:00
Dmitry Stogov
968bdc576c Simplified foreach() handling, we don't have to inctrement/decrement refcount twice 2010-10-22 13:59:23 +00:00
Dmitry Stogov
d12098eeec Fixed crash on attempt to insert reference to string offset into an array 2010-10-22 11:05:22 +00:00
Dmitry Stogov
635f3aff75 Removed redundant check 2010-10-22 09:56:39 +00:00
Dmitry Stogov
fa3f0bb63f Fixed bug #51008 (Zend/tests/bug45877.phpt fails) 2010-10-05 11:28:56 +00:00
Dmitry Stogov
f2df6a4a3e - Improved memory usage
. zend_function.pass_rest_by_reference is replaced by
    ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags
  . zend_function.return_reference is replaced by ZEND_ACC_RETURN_REFERENCE
    in zend_function.fn_flags
  . zend_arg_info.required_num_args removed. it was needed only for internal
    functions. Now the first arg_info for internal function (which has special
    meaning) is represented by zend_internal_function_info structure.
  . zend_op_array.size, size_var, size_literal, current_brk_cont,
    backpatch_count moved into CG(context), because they are used only during
    compilation.
  . zend_op_array.start_op is moved into EG(start_op), because it's used
    only for 'interactive' execution of single top-level op-array.
  . zend_op_array.done_pass_two is replaced by ZEND_ACC_DONE_PASS_TWO in
    zend_op_array.fn_flags.
  . op_array.vars array is trimmed (reallocated) during pass_two.
  . zend_class_entry.constants_updated is replaced by
     ZEND_ACC_CONSTANTS_UPDATED in zend_class_entry.ce_flags
  . the size of zend_class_entry is reduced by sharing the same memory space
    by different information for internal and user classes.
    See zend_class_inttry.info union.
2010-09-15 07:38:52 +00:00
Dmitry Stogov
2188f26c45 Fixed bug #52614 (Memory leak when writing on uninitialized variable returned from method call) 2010-08-25 09:14:36 +00:00
Dmitry Stogov
8a6d73b084 improved performance of @ (silence) operator 2010-08-18 13:58:13 +00:00
Dmitry Stogov
f48999ca3b Optimization of ASSIGN instruction 2010-08-11 15:34:06 +00:00
Dmitry Stogov
e0b728597b Optimization (IS_TMP_VARs don't need reference counting) 2010-08-10 15:24:19 +00:00