]> granicus.if.org Git - php/commitdiff
Store (bad) estimate of lineno with ast
authorNikita Popov <nikic@php.net>
Sat, 12 Jul 2014 12:03:42 +0000 (14:03 +0200)
committerNikita Popov <nikic@php.net>
Sat, 12 Jul 2014 12:03:42 +0000 (14:03 +0200)
Currently not used yet

Zend/zend_ast.c
Zend/zend_ast.h
Zend/zend_compile.c
Zend/zend_compile.h

index c07d4355295dad96e11e6b5e77a2c926c3c39f9f..a1ebf7727d43d979cd96b1562c26ce8b63a40c6a 100644 (file)
 
 ZEND_API zend_ast *zend_ast_create_znode(znode *node)
 {
+       TSRMLS_FETCH();
        zend_ast_znode *ast = emalloc(sizeof(zend_ast_znode));
        ast->kind = ZEND_AST_ZNODE;
        ast->attr = 0;
+       ast->lineno = CG(zend_lineno);
        ast->node = *node;
        return (zend_ast *) ast;
 }
 
 ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr)
 {
+       TSRMLS_FETCH();
        zend_ast_zval *ast = emalloc(sizeof(zend_ast_zval));
        ast->kind = ZEND_AST_ZVAL;
        ast->attr = attr;
+       ast->lineno = CG(zend_lineno);
        ZVAL_COPY_VALUE(&ast->val, zv);
        return (zend_ast *) ast;
 }
@@ -44,11 +48,13 @@ ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr)
 static zend_ast *zend_ast_create_from_va_list(
        zend_uint children, zend_ast_kind kind, zend_ast_attr attr, va_list va
 ) {
+       TSRMLS_FETCH();
        zend_uint i;
 
        zend_ast *ast = emalloc(sizeof(zend_ast) + (children - 1) * sizeof(zend_ast *));
        ast->kind = kind;
        ast->attr = attr;
+       ast->lineno = CG(zend_lineno);
        ast->children = children;
 
        for (i = 0; i < children; ++i) {
@@ -87,9 +93,11 @@ ZEND_API zend_ast *zend_ast_create(
 ZEND_API zend_ast *zend_ast_create_dynamic(zend_ast_kind kind)
 {
        /* use 4 children as default */
+       TSRMLS_FETCH();
        zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast *) * 3);
        ast->kind = kind;
        ast->attr = 0;
+       ast->lineno = CG(zend_lineno);
        ast->children = 0;
        return ast;
 }
index 410fce578ab6ee727dc04bdc06b86ebafcc2d02a..59d383a64eed1397c0d914c6c7e67b0a619b165f 100644 (file)
@@ -100,6 +100,7 @@ typedef unsigned short zend_ast_attr;
 struct _zend_ast {
        zend_ast_kind kind; /* Type of the node (either opcode or ZEND_AST_* constant) */
        zend_ast_attr attr; /* Additional attribute, use depending on node type */
+       zend_uint lineno;   /* Line number */
        zend_uint children; /* Number of children */
        zend_ast *child[1]; /* Array of children (using struct hack) */
 };
@@ -107,6 +108,7 @@ struct _zend_ast {
 typedef struct _zend_ast_zval {
        zend_ast_kind kind;
        zend_ast_attr attr;
+       zend_uint lineno;
        zval val;
 } zend_ast_zval;
 
index ccddfd616c06dfe6e36f891bc34b2b716668bc01..7e36b9701866549e4cded76c1af0ceaca80f0e5f 100644 (file)
@@ -8251,6 +8251,9 @@ void zend_compile_stmt(zend_ast *ast TSRMLS_DC) {
                return;
        }
 
+       // TODO.AST
+       //CG(zend_lineno) = ast->lineno;
+
        switch (ast->kind) {
                case ZEND_AST_STMT_LIST:
                        zend_compile_stmt_list(ast TSRMLS_CC);
index c7d3e06a8346dfc7ad897e42785abe00d884f014..268a793ec5ee5bda66786c4806ab16f4e95e1576 100644 (file)
@@ -91,6 +91,7 @@ typedef struct _znode { /* used only during compilation */
 typedef struct _zend_ast_znode {
        zend_ast_kind kind;
        zend_ast_attr attr;
+       zend_uint lineno;
        znode node;
 } zend_ast_znode;
 ZEND_API zend_ast *zend_ast_create_znode(znode *node);