Add functions for create str/long ast directly

This commit is contained in:
Nikita Popov 2014-07-26 19:01:14 +02:00
parent 9344a95ac9
commit a51e00a8cd
3 changed files with 15 additions and 8 deletions

View File

@ -309,7 +309,6 @@ void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((nore
#endif
#include "zend_object_handlers.h"
#include "zend_ast.h"
/* overloaded elements data types */
#define OE_IS_ARRAY (1<<0)
@ -401,6 +400,7 @@ void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((nore
#endif
#include "zend_string.h"
#include "zend_ast.h"
static zend_always_inline zend_uint zval_refcount_p(zval* pz) {
ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_IMMUTABLE_P(pz));

View File

@ -190,6 +190,16 @@ ZEND_API void zend_ast_destroy_and_free(zend_ast *ast);
static inline zend_ast *zend_ast_create_zval(zval *zv) {
return zend_ast_create_zval_ex(zv, 0);
}
static inline zend_ast *zend_ast_create_zval_from_str(zend_string *str) {
zval zv;
ZVAL_STR(&zv, str);
return zend_ast_create_zval(&zv);
}
static inline zend_ast *zend_ast_create_zval_from_long(long lval) {
zval zv;
ZVAL_LONG(&zv, lval);
return zend_ast_create_zval(&zv);
}
static inline zend_ast *zend_ast_create_unary(zend_ast_kind kind, zend_ast *op0) {
return zend_ast_create(1, kind, op0);

View File

@ -248,9 +248,8 @@ top_statement:
| function_declaration_statement { $$.u.ast = $1.u.ast; }
| class_declaration_statement { $$.u.ast = $1.u.ast; }
| T_HALT_COMPILER '(' ')' ';'
{ zval offset_zv; ZVAL_LONG(&offset_zv, zend_get_scanned_file_offset(TSRMLS_C));
$$.u.ast = zend_ast_create_unary(ZEND_AST_HALT_COMPILER,
zend_ast_create_zval(&offset_zv));
{ $$.u.ast = zend_ast_create_unary(ZEND_AST_HALT_COMPILER,
zend_ast_create_zval_from_long(zend_get_scanned_file_offset(TSRMLS_C)));
zend_stop_lexing(TSRMLS_C); }
| T_NAMESPACE namespace_name ';'
{ $$.u.ast = zend_ast_create_binary(ZEND_AST_NAMESPACE, AST_ZVAL(&$2), NULL);
@ -931,8 +930,7 @@ exit_expr:
backticks_expr:
/* empty */
{ zval empty_str; ZVAL_EMPTY_STRING(&empty_str);
$$.u.ast = zend_ast_create_zval(&empty_str); }
{ $$.u.ast = zend_ast_create_zval_from_str(STR_EMPTY_ALLOC()); }
| T_ENCAPSED_AND_WHITESPACE { $$.u.ast = AST_ZVAL(&$1); }
| encaps_list { $$.u.ast = $1.u.ast; }
;
@ -963,8 +961,7 @@ scalar:
| T_CLASS_C { $$.u.ast = zend_ast_create_ex(0, ZEND_AST_MAGIC_CONST, T_CLASS_C); }
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$.u.ast = AST_ZVAL(&$2); }
| T_START_HEREDOC T_END_HEREDOC
{ zval empty_str; ZVAL_EMPTY_STRING(&empty_str);
$$.u.ast = zend_ast_create_zval(&empty_str); }
{ $$.u.ast = zend_ast_create_zval_from_str(STR_EMPTY_ALLOC()); }
| '"' encaps_list '"' { $$.u.ast = $2.u.ast; }
| T_START_HEREDOC encaps_list T_END_HEREDOC { $$.u.ast = $2.u.ast; }
| dereferencable_scalar { $$.u.ast = $1.u.ast; }