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;
}
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) {
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;
}
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) */
};
typedef struct _zend_ast_zval {
zend_ast_kind kind;
zend_ast_attr attr;
+ zend_uint lineno;
zval val;
} zend_ast_zval;