diff --git a/Eto.Parse/Parsers/LiteralTerminal.cs b/Eto.Parse/Parsers/LiteralTerminal.cs index f56b4d3..8d3cce6 100644 --- a/Eto.Parse/Parsers/LiteralTerminal.cs +++ b/Eto.Parse/Parsers/LiteralTerminal.cs @@ -27,6 +27,7 @@ public LiteralTerminal() public LiteralTerminal(string value) { + value.ThrowIfNull("value", "Value must not be null"); Value = value; } @@ -38,11 +39,7 @@ public override void Initialize(ParserInitializeArgs args) protected override int InnerParse(ParseArgs args) { - if (Value != null) - { - return !args.Scanner.ReadString(Value, caseSensitive) ? -1 : Value.Length; - } - return 0; + return !args.Scanner.ReadString(Value, caseSensitive) ? -1 : Value.Length; } public override Parser Clone(ParserCloneArgs args) diff --git a/Eto.Parse/Parsers/RepeatCharTerminal.cs b/Eto.Parse/Parsers/RepeatCharTerminal.cs index dd43f02..944f1fc 100644 --- a/Eto.Parse/Parsers/RepeatCharTerminal.cs +++ b/Eto.Parse/Parsers/RepeatCharTerminal.cs @@ -83,7 +83,6 @@ protected override int InnerParse(ParseArgs args) var count = 0; while (ch != -1 && item.Test((char)ch)) { - length++; count++; ch = scanner.ReadChar(); if (count >= item.Maximum) @@ -94,6 +93,7 @@ protected override int InnerParse(ParseArgs args) scanner.Position = pos; return -1; } + length += count; } scanner.Position = pos + length; return length; diff --git a/Eto.Parse/Parsers/SequenceParser.cs b/Eto.Parse/Parsers/SequenceParser.cs index 7f825f6..67b08e5 100644 --- a/Eto.Parse/Parsers/SequenceParser.cs +++ b/Eto.Parse/Parsers/SequenceParser.cs @@ -56,9 +56,7 @@ protected override int InnerParse(ParseArgs args) childMatch = parser.Parse(args); if (childMatch >= 0) { - if (childMatch > 0) - length += sepMatch; - length += childMatch; + length += childMatch + sepMatch; continue; } }