function parseUseDeclaration(Source $s, $pos, array &$aliases, $prefix = '', $type = 'class')
{
$lastPart = null;
$whole = $prefix;
while (true) {
switch ($s->tokens[$pos][Source::TYPE_OFFSET]) {
case T_FUNCTION:
$type = 'function';
break;
case T_CONST:
$type = 'const';
break;
case T_NS_SEPARATOR:
if (!empty($whole)) {
$whole .= '\\';
}
break;
case T_STRING:
$lastPart = $s->tokens[$pos][Source::STRING_OFFSET];
$whole .= $lastPart;
break;
case T_AS:
$pos = $s->skip(Source::junk(), $pos);
$aliases[$type][$s->tokens[$pos][Source::STRING_OFFSET]] = $whole;
$lastPart = null;
$whole = $prefix;
break;
case ',':
if ($lastPart !== null) {
$aliases[$type][$lastPart] = $whole;
}
$lastPart = null;
$whole = $prefix;
$type = 'class';
break;
case Generic\LEFT_CURLY:
parseUseDeclaration($s, $pos, $aliases, $prefix . '\\', $type);
break;
case T_WHITESPACE:
case T_COMMENT:
case T_DOC_COMMENT:
break;
default:
if ($lastPart !== null) {
$aliases[$type][$whole] = $lastPart;
}
return;
}
$pos++;
}
}