diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2017-03-22 22:38:07 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-03-22 22:38:07 +0100 |
commit | 0d834c6922413ff0e70e77863414c0accdaf0b78 (patch) | |
tree | 0efd9dd13d84a444c4c169291bef3ee28c6ec491 /ext/tokenizer/tokenizer.c | |
parent | fec708f518d6880d31bfcf6523ee7b165990b5e1 (diff) | |
download | php-git-0d834c6922413ff0e70e77863414c0accdaf0b78.tar.gz |
Use ZSTR_CHAR in token_get_all()
Diffstat (limited to 'ext/tokenizer/tokenizer.c')
-rw-r--r-- | ext/tokenizer/tokenizer.c | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index f530c555a9..bb5f30320f 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -106,12 +106,29 @@ PHP_MINFO_FUNCTION(tokenizer) } /* }}} */ +static void add_token(zval *return_value, int token_type, + unsigned char *text, size_t leng, int lineno) { + if (token_type >= 256) { + zval keyword; + array_init(&keyword); + add_next_index_long(&keyword, token_type); + add_next_index_stringl(&keyword, (char *) text, leng); + add_next_index_long(&keyword, lineno); + add_next_index_zval(return_value, &keyword); + } else { + if (leng == 1) { + add_next_index_str(return_value, ZSTR_CHAR(text[0])); + } else { + add_next_index_stringl(return_value, (char *) text, leng); + } + } +} + static zend_bool tokenize(zval *return_value, zend_string *source) { zval source_zval; zend_lex_state original_lex_state; zval token; - zval keyword; int token_type; int token_line = 1; int need_tokens = -1; /* for __halt_compiler lexing. -1 = disabled */ @@ -129,15 +146,7 @@ static zend_bool tokenize(zval *return_value, zend_string *source) ZVAL_UNDEF(&token); while ((token_type = lex_scan(&token))) { - if (token_type >= 256) { - array_init(&keyword); - add_next_index_long(&keyword, token_type); - add_next_index_stringl(&keyword, (char *)zendtext, zendleng); - add_next_index_long(&keyword, token_line); - add_next_index_zval(return_value, &keyword); - } else { - add_next_index_stringl(return_value, (char *)zendtext, zendleng); - } + add_token(return_value, token_type, zendtext, zendleng, token_line); if (Z_TYPE(token) != IS_UNDEF) { zval_dtor(&token); @@ -152,11 +161,8 @@ static zend_bool tokenize(zval *return_value, zend_string *source) ) { /* fetch the rest into a T_INLINE_HTML */ if (zendcursor != zendlimit) { - array_init(&keyword); - add_next_index_long(&keyword, T_INLINE_HTML); - add_next_index_stringl(&keyword, (char *)zendcursor, zendlimit - zendcursor); - add_next_index_long(&keyword, token_line); - add_next_index_zval(return_value, &keyword); + add_token(return_value, T_INLINE_HTML, + zendcursor, zendlimit - zendcursor, token_line); } break; } @@ -181,22 +187,13 @@ static zend_bool tokenize(zval *return_value, zend_string *source) void on_event(zend_php_scanner_event event, int token, int line, void *context) { zval *token_stream = (zval *) context; - zval keyword; HashTable *tokens_ht; zval *token_zv; switch (event) { case ON_TOKEN: if (token == END) break; - if (token >= 256) { - array_init(&keyword); - add_next_index_long(&keyword, token); - add_next_index_stringl(&keyword, (char *)LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); - add_next_index_long(&keyword, line); - add_next_index_zval(token_stream, &keyword); - } else { - add_next_index_stringl(token_stream, (char *)LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); - } + add_token(token_stream, token, LANG_SCNG(yy_text), LANG_SCNG(yy_leng), line); break; case ON_FEEDBACK: tokens_ht = Z_ARRVAL_P(token_stream); @@ -207,12 +204,8 @@ void on_event(zend_php_scanner_event event, int token, int line, void *context) break; case ON_STOP: if (LANG_SCNG(yy_cursor) != LANG_SCNG(yy_limit)) { - array_init(&keyword); - add_next_index_long(&keyword, T_INLINE_HTML); - add_next_index_stringl(&keyword, - (char *)LANG_SCNG(yy_cursor), LANG_SCNG(yy_limit) - LANG_SCNG(yy_cursor)); - add_next_index_long(&keyword, CG(zend_lineno)); - add_next_index_zval(token_stream, &keyword); + add_token(token_stream, T_INLINE_HTML, LANG_SCNG(yy_cursor), + LANG_SCNG(yy_limit) - LANG_SCNG(yy_cursor), CG(zend_lineno)); } break; } |