Skip to content

Commit ca49894

Browse files
authored
Merge pull request #500 from bdke/dev
2 parents 3e5eed2 + 47639d4 commit ca49894

File tree

4 files changed

+41
-7
lines changed

4 files changed

+41
-7
lines changed

src/sly/lexer/LexerBuilder.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,7 @@ private static BuildResult<ILexer<IN>> BuildRegexLexer<IN>(
267267
{
268268
foreach (var lexeme in lexemes.lexemes)
269269
{
270-
var channel = lexeme.Channel.HasValue ? lexeme.Channel.Value : 0;
271-
lexer.AddDefinition(new TokenDefinition<IN>(tokenID, lexeme.Pattern, channel,
270+
lexer.AddDefinition(new TokenDefinition<IN>(tokenID, lexeme.Pattern, lexeme.Channel,
272271
lexeme.IsSkippable,
273272
lexeme.IsLineEnding));
274273
}

src/sly/lexer/attributes/LexemeAttribute.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ public LexemeAttribute(string pattern, bool isSkippable = false, bool isLineEndi
2121
IsLineEnding = isLineEnding;
2222
}
2323

24-
25-
public LexemeAttribute(GenericToken generic, params string[] parameters)
24+
public LexemeAttribute(GenericToken generic, params string[] parameters)
2625
{
27-
Channel = 0;
2826
GenericToken = generic;
2927
GenericTokenParameters = parameters;
3028
}
@@ -62,8 +60,9 @@ public LexemeAttribute(GenericToken generic, IdentifierType idType, string start
6260
public bool IsSkippable { get; set; }
6361

6462
public bool IsLineEnding { get; set; }
65-
66-
public int? Channel { get; set; }
63+
64+
private int _channel = int.MinValue;
65+
public int Channel { get => _channel != int.MinValue ? _channel : 0; set => _channel = value; }
6766

6867

6968
public bool HasGenericTokenParameters => GenericTokenParameters != null && GenericTokenParameters.Length > 0;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using NFluent;
2+
using sly.lexer;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using Xunit;
9+
10+
namespace ParserTests.Issue499;
11+
public class Issue499Test
12+
{
13+
[Fact]
14+
public void LexemeChannelNullable_Test()
15+
{
16+
var lexerBuildResult = LexerBuilder.BuildLexer<Issue499Token>();
17+
Check.That(lexerBuildResult).IsOk();
18+
var lexer = lexerBuildResult.Result;
19+
var lexResult = lexer.Tokenize("test\"");
20+
Check.That(lexResult).IsOkLexing();
21+
var tokenChannels = lexResult.Tokens;
22+
Check.That(tokenChannels.GetChannel(1).Count).IsGreaterOrEqualThan(1);
23+
}
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using sly.lexer;
2+
3+
namespace ParserTests.Issue499;
4+
internal enum Issue499Token
5+
{
6+
EOF = 0,
7+
8+
[UpTo("\"", Channel = 1)]
9+
Test,
10+
[Sugar("\"", Channel = 0)]
11+
Quote
12+
}

0 commit comments

Comments
 (0)