| Index: src/IceRangeSpec.cpp
 | 
| diff --git a/src/IceRangeSpec.cpp b/src/IceRangeSpec.cpp
 | 
| index e12ce6d84cd4f0758f3dc61ec7a45b3f95502aa9..6a7d32943b7eb26e1e77dc2916668d473d5c9485 100644
 | 
| --- a/src/IceRangeSpec.cpp
 | 
| +++ b/src/IceRangeSpec.cpp
 | 
| @@ -36,24 +36,6 @@ bool RangeSpec::HasNames = false;
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| -/// Helper function to tokenize a string into a vector of string tokens, given a
 | 
| -/// single delimiter character.  An empty string produces an empty token vector.
 | 
| -/// Zero-length tokens are allowed, e.g. ",a,,,b," may tokenize to
 | 
| -/// {"","a","","","b",""}.
 | 
| -std::vector<std::string> tokenize(const std::string &Spec, char Delimiter) {
 | 
| -  std::vector<std::string> Tokens;
 | 
| -  if (!Spec.empty()) {
 | 
| -    std::string::size_type StartPos = 0;
 | 
| -    std::string::size_type DelimPos = 0;
 | 
| -    while (DelimPos != std::string::npos) {
 | 
| -      DelimPos = Spec.find(Delimiter, StartPos);
 | 
| -      Tokens.emplace_back(Spec.substr(StartPos, DelimPos - StartPos));
 | 
| -      StartPos = DelimPos + 1;
 | 
| -    }
 | 
| -  }
 | 
| -  return Tokens;
 | 
| -}
 | 
| -
 | 
|  /// Helper function to parse "X" or "X:Y" into First and Last.
 | 
|  /// - "X" is treated as "X:X+1".
 | 
|  /// - ":Y" is treated as "0:Y".
 | 
| @@ -66,7 +48,7 @@ std::vector<std::string> tokenize(const std::string &Spec, char Delimiter) {
 | 
|  /// report_fatal_error is called.
 | 
|  void getRange(const std::string &Token, uint32_t *First, uint32_t *Last) {
 | 
|    bool Error = false;
 | 
| -  auto Tokens = tokenize(Token, RangeSpec::DELIM_RANGE);
 | 
| +  auto Tokens = RangeSpec::tokenize(Token, RangeSpec::DELIM_RANGE);
 | 
|    if (Tokens.size() == 1) {
 | 
|      *First = std::stoul(Tokens[0]);
 | 
|      *Last = *First + 1;
 | 
| @@ -112,6 +94,21 @@ void record(const std::string &Token, RangeSpec::Desc *D) {
 | 
|  
 | 
|  } // end of anonymous namespace
 | 
|  
 | 
| +std::vector<std::string> RangeSpec::tokenize(const std::string &Spec,
 | 
| +                                             char Delimiter) {
 | 
| +  std::vector<std::string> Tokens;
 | 
| +  if (!Spec.empty()) {
 | 
| +    std::string::size_type StartPos = 0;
 | 
| +    std::string::size_type DelimPos = 0;
 | 
| +    while (DelimPos != std::string::npos) {
 | 
| +      DelimPos = Spec.find(Delimiter, StartPos);
 | 
| +      Tokens.emplace_back(Spec.substr(StartPos, DelimPos - StartPos));
 | 
| +      StartPos = DelimPos + 1;
 | 
| +    }
 | 
| +  }
 | 
| +  return Tokens;
 | 
| +}
 | 
| +
 | 
|  /// Initialize the RangeSpec with the given string.  Calling init multiple times
 | 
|  /// (e.g. init("A");init("B");) is equivalent to init("A,B"); .
 | 
|  void RangeSpec::init(const std::string &Spec) {
 | 
| 
 |