mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Add functions for create str/long ast directly
This commit is contained in:
parent
9344a95ac9
commit
a51e00a8cd
@ -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));
|
||||
|
@ -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);
|
||||
|
@ -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; }
|
||||
|
Loading…
Reference in New Issue
Block a user