join<T> static method

Token<List<T>> join<T>(
  1. Iterable<Token<T>> token
)

Combines multiple tokens into a single token with the list of its values.

final t1 = Token('a', 'abc', 0, 1);
final t2 = Token('b', 'abc', 1, 2);
final t3 = Token.join([t1, t2]);

print(t3.value);  // ['a', 'b']
print(t3.start);  // 0
print(t3.stop);   // 2

Implementation

static Token<List<T>> join<T>(Iterable<Token<T>> token) {
  final iterator = token.iterator;
  if (!iterator.moveNext()) {
    throw ArgumentError.value(token, 'token', 'Require at least one token');
  }
  final value = <T>[iterator.current.value];
  final buffer = iterator.current.buffer;
  var start = iterator.current.start;
  var stop = iterator.current.stop;
  while (iterator.moveNext()) {
    if (buffer != iterator.current.buffer) {
      throw ArgumentError.value(
        token,
        'token',
        'Tokens do not use the same buffer',
      );
    }
    value.add(iterator.current.value);
    start = math.min(start, iterator.current.start);
    stop = math.max(stop, iterator.current.stop);
  }
  return Token(value, buffer, start, stop);
}