From bc3e8eeaed267fb509479e831a2cc8a74a946742 Mon Sep 17 00:00:00 2001 From: Tyson Andre Date: Sat, 28 Sep 2019 09:54:43 -0400 Subject: [PATCH] Reduce memory used by token_get_all() Around a quarter of all strings in array tokens would have a string that's one character long (e.g. ` `, `\`, `1`) For parsing a large number of php files, The memory increase dropped from 378374248 to 369535688 (2.5%) --- ext/tokenizer/tokenizer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index 91ace6f701770..3d343fec4d687 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -110,7 +110,11 @@ static void add_token(zval *return_value, int token_type, zval keyword; array_init(&keyword); add_next_index_long(&keyword, token_type); - add_next_index_stringl(&keyword, (char *) text, leng); + if (leng == 1) { + add_next_index_str(&keyword, ZSTR_CHAR(text[0])); + } else { + add_next_index_stringl(&keyword, (char *) text, leng); + } add_next_index_long(&keyword, lineno); add_next_index_zval(return_value, &keyword); } else {