diff options
author | Christian Schneider | 2007-10-23 14:16:59 +0000 |
---|---|---|
committer | Christian Schneider | 2007-10-23 14:16:59 +0000 |
commit | 3f7ccc902a91aac2ff6ac2fe8947f07f989fbf03 (patch) | |
tree | 088ff5d66338588860c2c807847467e7f22f2cad /it_debug.class | |
parent | d5c62dfa887a4ac72fdc9fdb60cbc9d9056f7125 (diff) | |
download | itools-3f7ccc902a91aac2ff6ac2fe8947f07f989fbf03.tar.gz itools-3f7ccc902a91aac2ff6ac2fe8947f07f989fbf03.tar.bz2 itools-3f7ccc902a91aac2ff6ac2fe8947f07f989fbf03.zip |
Properly parse ED parameters using the PHP tokenizer to handle function calls
Diffstat (limited to 'it_debug.class')
-rw-r--r-- | it_debug.class | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/it_debug.class b/it_debug.class index 92753b2..bd81720 100644 --- a/it_debug.class +++ b/it_debug.class @@ -87,10 +87,33 @@ function dump($args) $src = $GLOBALS['it_debug::dump source'][$file][$line-1]; - $paramlist = preg_match('/(D|ED|EDC|EDX)\s*\(\s*([^)]+)/i', $src, $parts) ? $parts[2] : ""; - $argnames = preg_split('/\s*,\s*/', $paramlist); + list($function, $paramlist) = it::match('\b(D|ED|EDC|EDX)\s*\((.*)', $src); + $paramtokens = token_get_all("<?php $paramlist"); + array_shift($paramtokens); + $param = ""; + foreach ($paramtokens as $token) + { + if ($token == "(") + $paramnesting++; + else if ($token == ")") + { + if (!$paramnesting--) # Found closing parens + { + $argnames[] = trim($param); + break; + } + } + + if (($token == ",") && !$paramnesting) + { + $argnames[] = trim($param); + $param = ""; + } + else + $param .= is_array($token) ? $token[1] : $token; + } - if ($parts[1] == "EDC") # First argument was stripped by EDC + if (it::match('^EDC$', $function)) # First argument was removed by EDC array_shift($argnames); foreach ($args as $arg) |