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-15 14:27 UTC Return to Bug #54089 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions: 2011-09-15 14:27 UTC | 2011-09-13 15:50 UTC | 2011-09-13 07:51 UTCDeveloper: nikic@php.netLine 1 (now 1), was 29 lines, now 18 lines From 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) Index: ext/tokenizer/tests/bug54089.phpt =================================================================== --- ext/tokenizer/tests/bug54089.phpt (revision 316815) +++ ext/tokenizer/tests/bug54089.phpt (working copy) @@ -17,7 +17,7 @@ var_dump($code); ?> --EXPECTF-- -array(2) { +array(5) { [0]=> array(3) { [0]=> @@ -36,5 +36,11 @@ array(2) { @@ -36,5 +36,11 @@ [2]=> int(1) } + [2]=> + 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 Index: ext/tokenizer/tests/token_get_all_variation16.phpt =================================================================== --- ext/tokenizer/tests/token_get_all_variation16.phpt (revision 316815) +++ ext/tokenizer/tests/token_get_all_variation16.phpt (working copy) @@ -47,17 +47,17 @@ list($value1,$value2) = $c; if(empty($value1) && !isset($value1)) { - __halt_compiler(); +array(142) { [0]=> array(3) { [0]=> @@ -958,9 +958,46 @@ array(135) { @@ -958,9 +958,46 @@ [0]=> int(%d) [1]=> - string(15) "__halt_compiler" + string(10) "myFunction" + [2]=> + int(26) + } [2]=> int(26) } + [135]=> + string(1) "(" + [136]=> + string(1) ")" + int(%d) + [1]=> + string(1) " +" [2]=> int(26) } + [2]=> + int(26) + } + [139]=> + string(1) "}" + [140]=> + array(3) { + 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) Index: ext/tokenizer/tokenizer.c =================================================================== --- ext/tokenizer/tokenizer.c (revision 316815) +++ ext/tokenizer/tokenizer.c (working copy) @@ -106,6 +106,7 @@ 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) @@ -152,8 +153,16 @@ 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) { + if (token_type != T_WHITESPACE && token_type != T_OPEN_TAG + && token_type != T_COMMENT && token_type != T_DOC_COMMENT + && --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: Tue Apr 23 21:01:31 2024 UTC |