php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | |
Patch tokenizer_patch.txt for Unknown/Other Function Bug #54089Patch version 2011-09-13 07:51 UTC Return to Bug #54089 | Download this patchThis patch is obsolete Obsoleted by patches: Patch Revisions:
Developer: nicolas.grekas+php@gmail.comFrom d6941fad8c0d91a2ffacb0c965b654d1711753b4 Mon Sep 17 00:00:00 2001 From: Nikita Popov <nikic@chicken.(none)> Date: Tue, 13 Sep 2011 09:07:21 +0200 Subject: [PATCH] Make token_get_all return next three tokens after __halt_compiler --- ext/tokenizer/tests/bug54089.phpt | 10 ++++- ext/tokenizer/tests/token_get_all_variation16.phpt | 45 ++++++++++++++++++-- ext/tokenizer/tokenizer.c | 10 ++++- 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/ext/tokenizer/tests/bug54089.phpt b/ext/tokenizer/tests/bug54089.phpt index e1f6d79..2f40510 100644 --- a/ext/tokenizer/tests/bug54089.phpt +++ b/ext/tokenizer/tests/bug54089.phpt @@ -17,7 +17,7 @@ foreach ($tokens as $t) var_dump($code); ?> --EXPECTF-- -array(2) { +array(5) { [0]=> array(3) { [0]=> @@ -36,5 +36,11 @@ array(2) { [2]=> int(1) } + [2]=> + string(1) "(" + [3]=> + string(1) ")" + [4]=> + string(1) ";" } -string(21) "<?php __halt_compiler" +string(24) "<?php __halt_compiler();" diff --git a/ext/tokenizer/tests/token_get_all_variation16.phpt b/ext/tokenizer/tests/token_get_all_variation16.phpt index 39550bd..db9bde1 100644 --- a/ext/tokenizer/tests/token_get_all_variation16.phpt +++ b/ext/tokenizer/tests/token_get_all_variation16.phpt @@ -47,17 +47,17 @@ else list($value1,$value2) = $c; if(empty($value1) && !isset($value1)) { - __halt_compiler(); + myFunction(); } ?>'; $tokens = token_get_all($source); var_dump($tokens); -echo "Done" +echo "Done"; ?> --EXPECTF-- *** Testing token_get_all() : with different function constructs *** -array(135) { +array(142) { [0]=> array(3) { [0]=> @@ -958,9 +958,46 @@ array(135) { [0]=> int(%d) [1]=> - string(15) "__halt_compiler" + string(10) "myFunction" + [2]=> + int(26) + } + [135]=> + string(1) "(" + [136]=> + string(1) ")" + [137]=> + string(1) ";" + [138]=> + array(3) { + [0]=> + int(%d) + [1]=> + string(1) " +" [2]=> int(26) } + [139]=> + string(1) "}" + [140]=> + array(3) { + [0]=> + int(%d) + [1]=> + string(1) " +" + [2]=> + int(27) + } + [141]=> + array(3) { + [0]=> + int(%d) + [1]=> + string(2) "?>" + [2]=> + int(28) + } } Done diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index c6c901f..d502f9a 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -106,6 +106,7 @@ static void tokenize(zval *return_value TSRMLS_DC) int token_type; zend_bool destroy; int token_line = 1; + int need_tokens = -1; // for __halt_compiler lexing. -1 = disabled array_init(return_value); @@ -152,8 +153,13 @@ static void tokenize(zval *return_value TSRMLS_DC) token_line = CG(zend_lineno); - if (token_type == T_HALT_COMPILER) { - break; + // after T_HALT_COMPILER collect the next three non-dropped tokens + if (need_tokens != -1) { + if (destroy && --need_tokens == 0) { + break; + } + } else if (token_type == T_HALT_COMPILER) { + need_tokens = 3; } } } -- 1.7.4.1 |
Copyright © 2001-2024 The PHP Group All rights reserved. |
Last updated: Thu Nov 21 15:01:30 2024 UTC |