diff options
| author | Nikita Popov <nikic@php.net> | 2012-05-19 14:18:20 +0200 |
|---|---|---|
| committer | Nikita Popov <nikic@php.net> | 2012-05-19 14:18:20 +0200 |
| commit | 252f623464e7cf5cb794903ba07d652c9cea9a14 (patch) | |
| tree | ba041af75a3a1dca74cbe5a56709d10b5a5f1aa4 /Zend/zend_compile.c | |
| parent | 9b101ac8b364610c20f710b8c6c631db5e6230a5 (diff) | |
| download | php-git-252f623464e7cf5cb794903ba07d652c9cea9a14.tar.gz | |
Add flag for generator functions
Generator functions have to specify the * (asterix) modifier after the
function keyword. If they do so the ZEND_ACC_GENERATOR flag is added to
the fn_flags.
Diffstat (limited to 'Zend/zend_compile.c')
| -rw-r--r-- | Zend/zend_compile.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 2b2b58f9ac..399a37cc0d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1519,7 +1519,7 @@ int zend_do_verify_access_types(const znode *current_access_type, const znode *n } /* }}} */ -void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, znode *fn_flags_znode TSRMLS_DC) /* {{{ */ +void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int is_generator, int return_reference, znode *fn_flags_znode TSRMLS_DC) /* {{{ */ { zend_op_array op_array; char *name = function_name->u.constant.value.str.val; @@ -1553,6 +1553,9 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n CG(interactive) = orig_interactive; op_array.function_name = name; + if (is_generator) { + op_array.fn_flags |= ZEND_ACC_GENERATOR; + } if (return_reference) { op_array.fn_flags |= ZEND_ACC_RETURN_REFERENCE; } @@ -1751,7 +1754,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n } /* }}} */ -void zend_do_begin_lambda_function_declaration(znode *result, znode *function_token, int return_reference, int is_static TSRMLS_DC) /* {{{ */ +void zend_do_begin_lambda_function_declaration(znode *result, znode *function_token, int is_generator, int return_reference, int is_static TSRMLS_DC) /* {{{ */ { znode function_name; zend_op_array *current_op_array = CG(active_op_array); @@ -1761,7 +1764,7 @@ void zend_do_begin_lambda_function_declaration(znode *result, znode *function_to function_name.op_type = IS_CONST; ZVAL_STRINGL(&function_name.u.constant, "{closure}", sizeof("{closure}")-1, 1); - zend_do_begin_function_declaration(function_token, &function_name, 0, return_reference, NULL TSRMLS_CC); + zend_do_begin_function_declaration(function_token, &function_name, 0, is_generator, return_reference, NULL TSRMLS_CC); result->op_type = IS_TMP_VAR; result->u.op.var = get_temporary_variable(current_op_array); |
