Fixed lexing digraph tokens
Lexer gave wrong token locations and would skip an extra rune when digraph was not found.
This commit is contained in:
parent
9e01eef45b
commit
3407aa7c59
@ -175,9 +175,9 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '.':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindDot
|
||||
if lexer.char == '.' {
|
||||
token.kind = TokenKindElipsis
|
||||
@ -210,15 +210,15 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '+':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindPlus
|
||||
if lexer.char == '+' {
|
||||
token.kind = TokenKindIncrement
|
||||
err = lexer.nextRune()
|
||||
}
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '-':
|
||||
err = lexer.tokenizeDashBeginning()
|
||||
case '*':
|
||||
@ -252,45 +252,45 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '<':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindLessThan
|
||||
if lexer.char == '<' {
|
||||
token.kind = TokenKindLShift
|
||||
err = lexer.nextRune()
|
||||
}
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '>':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindGreaterThan
|
||||
if lexer.char == '>' {
|
||||
token.kind = TokenKindRShift
|
||||
err = lexer.nextRune()
|
||||
}
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '|':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindBinaryOr
|
||||
if lexer.char == '|' {
|
||||
token.kind = TokenKindLogicalOr
|
||||
err = lexer.nextRune()
|
||||
}
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
case '&':
|
||||
token := lexer.newToken()
|
||||
err = lexer.nextRune()
|
||||
if err != nil { return }
|
||||
token := lexer.newToken()
|
||||
token.kind = TokenKindBinaryAnd
|
||||
if lexer.char == '&' {
|
||||
token.kind = TokenKindLogicalAnd
|
||||
err = lexer.nextRune()
|
||||
}
|
||||
lexer.addToken(token)
|
||||
err = lexer.nextRune()
|
||||
default:
|
||||
err = file.NewError (
|
||||
lexer.file.Location(1),
|
||||
|
Reference in New Issue
Block a user