join<T> static method
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);
}