diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2017-03-23 22:42:57 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-03-23 22:48:41 +0100 |
commit | f5951cc81bb777e39dbfffb4db1c265f4e51308f (patch) | |
tree | fd3017d2f696e9f9b7b8e7bdb5a6d5d9b6089628 /Zend | |
parent | 0fb640c71763ddb1b8017c87cec10fc76764feff (diff) | |
download | php-git-f5951cc81bb777e39dbfffb4db1c265f4e51308f.tar.gz |
Fix lineno for AST_ZVAL nodes
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/zend_ast.c | 8 | ||||
-rw-r--r-- | Zend/zend_ast.h | 1 | ||||
-rw-r--r-- | Zend/zend_compile.c | 4 |
3 files changed, 10 insertions, 3 deletions
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index b55d0e8a3b..1d4ad3ac8a 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -57,17 +57,21 @@ ZEND_API zend_ast *zend_ast_create_znode(znode *node) { return (zend_ast *) ast; } -ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr) { +ZEND_API zend_ast *zend_ast_create_zval_with_lineno(zval *zv, zend_ast_attr attr, uint32_t lineno) { zend_ast_zval *ast; ast = zend_ast_alloc(sizeof(zend_ast_zval)); ast->kind = ZEND_AST_ZVAL; ast->attr = attr; ZVAL_COPY_VALUE(&ast->val, zv); - ast->val.u2.lineno = CG(zend_lineno); + ast->val.u2.lineno = lineno; return (zend_ast *) ast; } +ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr) { + return zend_ast_create_zval_with_lineno(zv, attr, CG(zend_lineno)); +} + ZEND_API zend_ast *zend_ast_create_decl( zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment, zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3 diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h index c5e99fe05a..9e3ab67ce1 100644 --- a/Zend/zend_ast.h +++ b/Zend/zend_ast.h @@ -190,6 +190,7 @@ typedef struct _zend_ast_decl { typedef void (*zend_ast_process_t)(zend_ast *ast); extern ZEND_API zend_ast_process_t zend_ast_process; +ZEND_API zend_ast *zend_ast_create_zval_with_lineno(zval *zv, zend_ast_attr attr, uint32_t lineno); ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr); ZEND_API zend_ast *zend_ast_create_ex(zend_ast_kind kind, zend_ast_attr attr, ...); diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c4e95c1d67..f3c04b9d1c 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1574,6 +1574,7 @@ int zendlex(zend_parser_stack_elem *elem) /* {{{ */ { zval zv; int retval; + uint32_t start_lineno; if (CG(increment_lineno)) { CG(zend_lineno)++; @@ -1582,6 +1583,7 @@ int zendlex(zend_parser_stack_elem *elem) /* {{{ */ again: ZVAL_UNDEF(&zv); + start_lineno = CG(zend_lineno); retval = lex_scan(&zv); if (EG(exception)) { return T_ERROR; @@ -1605,7 +1607,7 @@ again: break; } if (Z_TYPE(zv) != IS_UNDEF) { - elem->ast = zend_ast_create_zval(&zv); + elem->ast = zend_ast_create_zval_with_lineno(&zv, 0, start_lineno); } return retval; |