diff --git a/src/sly/lexer/TokenChannel.cs b/src/sly/lexer/TokenChannel.cs index db54f39e..4356fb17 100644 --- a/src/sly/lexer/TokenChannel.cs +++ b/src/sly/lexer/TokenChannel.cs @@ -9,9 +9,12 @@ public class TokenChannel where IN : struct { public readonly List> Tokens; - public List> NotNullTokens => Tokens.Where(x => x != null).ToList(); + private List> _notNullTokens = new List>(); + + public List> NotNullTokens => _notNullTokens; - public List> NotNullOrEosTokens => Tokens.Where(x => x != null && !x.IsEOS).ToList(); + private List> _notNullOrEosTokens; + public List> NotNullOrEosTokens => _notNullOrEosTokens; public int ChannelId; public int Count => Tokens.Count; @@ -19,11 +22,14 @@ public class TokenChannel where IN : struct public TokenChannel(List> tokens, int channelId) { Tokens = tokens; + _notNullTokens = tokens.Where(x => x != null).ToList(); + _notNullOrEosTokens = tokens.Where(x => x != null && !x.IsEOS).ToList(); ChannelId = channelId; } - public TokenChannel(int channelId) : this(new List>(),channelId) + public TokenChannel(int channelId) : this(new List>(), channelId) { + } private Token GetToken(int i) @@ -41,6 +47,8 @@ private void SetToken(int i, Token token) } } Tokens[i] = token; + _notNullTokens = Tokens.Where(x => x != null).ToList(); + _notNullOrEosTokens = Tokens.Where(x => x != null && !x.IsEOS).ToList(); } public Token this[int key] @@ -54,6 +62,8 @@ public void Add(Token token) Tokens.Add(token); if (token != null) token.PositionInTokenFlow = Tokens.Count; + _notNullTokens = Tokens.Where(x => x != null).ToList(); + _notNullOrEosTokens = Tokens.Where(x => x != null && !x.IsEOS).ToList(); } [ExcludeFromCodeCoverage]