summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2017-03-23 22:42:57 +0100
committerNikita Popov <nikita.ppv@gmail.com>2017-03-23 22:48:41 +0100
commitf5951cc81bb777e39dbfffb4db1c265f4e51308f (patch)
treefd3017d2f696e9f9b7b8e7bdb5a6d5d9b6089628
parent0fb640c71763ddb1b8017c87cec10fc76764feff (diff)
downloadphp-git-f5951cc81bb777e39dbfffb4db1c265f4e51308f.tar.gz
Fix lineno for AST_ZVAL nodes
-rw-r--r--Zend/zend_ast.c8
-rw-r--r--Zend/zend_ast.h1
-rw-r--r--Zend/zend_compile.c4
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;