summaryrefslogtreecommitdiff
path: root/ext/tokenizer/tokenizer.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-05-18 13:12:05 +0000
committerDmitry Stogov <dmitry@php.net>2007-05-18 13:12:05 +0000
commit80d2409fd8fe382ea14d6b45c528a452fa796905 (patch)
tree44778367be88f63311c5877535370652e3d82946 /ext/tokenizer/tokenizer.c
parent6d41d020dfd2f84618357909232007c6ab3451f1 (diff)
downloadphp-git-80d2409fd8fe382ea14d6b45c528a452fa796905.tar.gz
Improved compilation of heredocs and interpolated strings. (Matt, Dmitry)
Diffstat (limited to 'ext/tokenizer/tokenizer.c')
-rw-r--r--ext/tokenizer/tokenizer.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index 7df3439b1e..4cd5242b62 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -280,14 +280,15 @@ static void tokenize(zval *return_value TSRMLS_DC)
while ((token_type = lex_scan(&token TSRMLS_CC))) {
destroy = 1;
switch (token_type) {
- case EOF:
- zendleng--; /* don't count EOF */
+ case T_CLOSE_TAG:
+ if (zendtext[zendleng - 1] != '>') {
+ CG(zend_lineno)++;
+ }
case T_OPEN_TAG:
case T_OPEN_TAG_WITH_ECHO:
case T_WHITESPACE:
case T_COMMENT:
case T_DOC_COMMENT:
- case T_CLOSE_TAG:
destroy = 0;
break;
}
@@ -297,6 +298,10 @@ static void tokenize(zval *return_value TSRMLS_DC)
array_init(keyword);
add_next_index_long(keyword, token_type);
if (token_type == T_END_HEREDOC) {
+ if (CG(increment_lineno)) {
+ token_line = ++CG(zend_lineno);
+ CG(increment_lineno) = 0;
+ }
add_next_index_stringl(keyword, Z_STRVAL(token), Z_STRLEN(token), 1);
efree(Z_STRVAL(token));
} else {
@@ -372,8 +377,6 @@ get_token_type_name(int token_type)
case T_VARIABLE: return "T_VARIABLE";
case T_NUM_STRING: return "T_NUM_STRING";
case T_INLINE_HTML: return "T_INLINE_HTML";
- case T_CHARACTER: return "T_CHARACTER";
- case T_BAD_CHARACTER: return "T_BAD_CHARACTER";
case T_ENCAPSED_AND_WHITESPACE: return "T_ENCAPSED_AND_WHITESPACE";
case T_CONSTANT_ENCAPSED_STRING: return "T_CONSTANT_ENCAPSED_STRING";
case T_ECHO: return "T_ECHO";