diff --git a/setup/test/tests/class.php_analyze.php b/setup/test/tests/class.php_analyze.php index 9690c980afe51162da54164cc6c1d6b1b7fd08d2..153c9ad11fa99ac7a731a8b7492c6cbc4b9c6b92 100644 --- a/setup/test/tests/class.php_analyze.php +++ b/setup/test/tests/class.php_analyze.php @@ -26,6 +26,7 @@ class SourceAnalyzer extends Test { $class = array('line'=>$line); $token = false; $blocks = 0; + $func_options = array('allow_this'=>true); while (list($i,$token) = each($this->tokens)) { switch ($token[0]) { case '{': @@ -42,7 +43,14 @@ class SourceAnalyzer extends Test { case T_FUNCTION: $this->traverseFunction( array($token[2], $line[1]), - array('allow_this'=>true)); + $func_options); + // Continue to reset $func_options + case ';': + // Reset function options + $func_options = array('allow_this'=>true); + break; + case T_STATIC: + $func_options['allow_this'] = false; break; case T_VAR: // var $variable @@ -94,7 +102,7 @@ class SourceAnalyzer extends Test { break; case '}': if (--$blocks == 0) - return; + return $scope; break; case T_VARIABLE: // Look-ahead for assignment @@ -286,6 +294,24 @@ class SourceAnalyzer extends Test { } } break; + case T_CATCH: + // catch (Exception $var) { + while (list(,$token) = each($this->tokens)) { + if ($token == '{') + break; + elseif ($token[0] == T_VARIABLE) + $variable = $token[1]; + } + $scope[$variable] = 1; + $scope = $this->checkVariableUsage($function, $scope, 1, + $options); + // Variable is no longer in scope; however, other variables + // defined in the catch {} block remain in scope. + // (Technically, the variable is in scope, but we will + // consider it bad coding practice to deal with an exception + // outisde the catch block + unset($scope[$variable]); + break; case T_DOLLAR_OPEN_CURLY_BRACES: case T_CURLY_OPEN: // "{$a .. }" diff --git a/setup/test/tests/stubs.php b/setup/test/tests/stubs.php index 73afec7cd326565fe56d30f0690281a6dd565b7f..2161f52117d3ad4a948eae9e4f03acafaf5f6e9e 100644 --- a/setup/test/tests/stubs.php +++ b/setup/test/tests/stubs.php @@ -49,4 +49,36 @@ class Exception { function getTraceAsString() {} } +class DateTime { + function add() {} + static function createFromFormat () {} + static function getLastErrors() {} + function modify() {} + function setDate() {} + function setISODate() {} + function setTime() {} + function setTimestamp() {} + function setTimezone() {} + function sub() {} + function diff() {} + function format() {} + function getOffset() {} + function getTimestamp() {} + function getTimezone() {} +} + +class DateInterval { + static function createFromDateString() {} + function format() {} +} + +class DateTimeZone { + function getLocation() {} + function getName() {} + function getOffset() {} + function getTransitions() {} + static function listAbbreviations() {} + static function listIdentifiers() {} +} + ?>