private StringBuilder StateEmpty(Ctype ctype, in char cc, StringBuilder sb)
private StringBuilder ProcessCharacter(int c, char cc, StringBuilder sb) { if (c == 10) { if (_state == State.LineComment) { _state = State.Empty; } sb = _state switch { State.Empty => StateEmpty(Ctype.Whitespace, cc, sb), State.LiteralInt => StateLiteralInt(Ctype.Whitespace, cc, sb), State.Control => StateControl(Ctype.Whitespace, cc, sb), State.Name => StateName(Ctype.Whitespace, cc, sb), _ => sb }; _line++; _pos = 0; return(sb); } // Switch for states that should not be handled based on character type // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (_state) { case State.LineComment: return(sb); case State.BlockComment: if (_lastStar && cc == '/') { _state = State.Empty; } _lastStar = cc == '*'; _pos++; return(sb); case State.Escaped: sb = AddToString(sb, cc); _state = State.LiteralString; _pos++; return(sb); case State.LiteralString: _pos++; switch (cc) { case '\\': _state = State.Escaped; break; case '"': _state = State.Empty; _tokenParser.ParseToken(new Token(TokenType.String, _line, _pos, sb.ToString())); sb = new StringBuilder(); break; default: sb.Append(cc); break; } return(sb); default: if (cc == '"') { _pos++; sb = StartString(sb); return(sb); } break; } Ctype ctype = CharacterType(c); sb = _state switch { State.Empty => StateEmpty(ctype, cc, sb), State.LiteralInt => StateLiteralInt(ctype, cc, sb), State.Control => StateControl(ctype, cc, sb), State.Name => StateName(ctype, cc, sb), _ => sb }; _pos++; return(sb); }