/** @ignore */ private static function readValue() { self::$obj = array(); self::$parents = array(); self::$cur =& self::$obj; $key = null; $loc = self::LOC_IN_ARRAY; while (self::readToken()) { switch (self::$token) { case self::TOKEN_STR: case self::TOKEN_INT: case self::TOKEN_BOOL: case self::TOKEN_FLOAT: case self::TOKEN_NULL: switch (self::$location) { case self::LOC_IN_OBJECT: self::$cur->{$key} = self::$value; break; case self::LOC_IN_ARRAY: self::$cur[] = self::$value; break; default: return self::$value; } break; case self::TOKEN_KEY: $key = self::$value; break; case self::TOKEN_START_OBJ: if ($loc == self::LOC_IN_OBJECT) { self::addArray($key, true); } else { self::addArray(null, true); } $cur =& $obj; $loc = self::$location; break; case self::TOKEN_START_ARRAY: if ($loc == self::LOC_IN_OBJECT) { self::addArray($key, false); } else { self::addArray(null, false); } $cur =& $obj; $loc = self::$location; break; case self::TOKEN_END_OBJ: case self::TOKEN_END_ARRAY: $loc = self::$location; if (count(self::$parents) > 0) { self::$cur =& self::$parents[count(self::$parents) - 1]; array_pop(self::$parents); } break; } } return self::$obj[0]; }