Respect starting line numbers for strings
This commit is contained in:
		
							parent
							
								
									eb86a5613d
								
							
						
					
					
						commit
						87f8cdded6
					
				| @ -12,14 +12,15 @@ import ( | |||||||
| type ( | type ( | ||||||
| 	// Holds the state of the scanner | 	// Holds the state of the scanner | ||||||
| 	Lexer struct { | 	Lexer struct { | ||||||
| 		input    string    // The string being scanned | 		input     string    // The string being scanned | ||||||
| 		lineNum  int       // Line number | 		lineNum   int       // Line number | ||||||
| 		colNum   int       // Column number | 		colNum    int       // Column number | ||||||
| 		pos      int       // Current position in the input | 		pos       int       // Current position in the input | ||||||
| 		start    int       // Start position of this item | 		start     int       // Start position of this item | ||||||
| 		startCol int       // Start column of this item | 		startLine int       // Start line of this item | ||||||
| 		width    int       // Width of last rune read from input | 		startCol  int       // Start column of this item | ||||||
| 		items    chan Item // Channel of scanned items | 		width     int       // Width of last rune read from input | ||||||
|  | 		items     chan Item // Channel of scanned items | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Represents a token returned from the scanner | 	// Represents a token returned from the scanner | ||||||
| @ -136,6 +137,7 @@ func (l *Lexer) backup() { | |||||||
| // Skips over the pending input before this point | // Skips over the pending input before this point | ||||||
| func (l *Lexer) ignore() { | func (l *Lexer) ignore() { | ||||||
| 	l.start = l.pos | 	l.start = l.pos | ||||||
|  | 	l.startLine = l.lineNum | ||||||
| 	l.startCol = l.colNum | 	l.startCol = l.colNum | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -143,9 +145,9 @@ func (l *Lexer) ignore() { | |||||||
| func (l *Lexer) emit(t Token) { | func (l *Lexer) emit(t Token) { | ||||||
| 	l.items <- Item{ | 	l.items <- Item{ | ||||||
| 		Token:  t, | 		Token:  t, | ||||||
| 		Val:    l.input[l.start:l.pos], | 		Val:    l.val(), | ||||||
| 		Pos:    l.start, | 		Pos:    l.start, | ||||||
| 		Line:   l.lineNum, | 		Line:   l.startLine, | ||||||
| 		Column: l.startCol, | 		Column: l.startCol, | ||||||
| 	} | 	} | ||||||
| 	l.ignore() // Cleaning up input | 	l.ignore() // Cleaning up input | ||||||
| @ -160,7 +162,7 @@ func (l *Lexer) errorf(format string, args ...interface{}) stateFn { | |||||||
| 		Token:  Error, | 		Token:  Error, | ||||||
| 		Val:    fmt.Sprintf(format, args...), | 		Val:    fmt.Sprintf(format, args...), | ||||||
| 		Pos:    l.start, | 		Pos:    l.start, | ||||||
| 		Line:   l.lineNum, | 		Line:   l.startLine, | ||||||
| 		Column: l.startCol, | 		Column: l.startCol, | ||||||
| 	} | 	} | ||||||
| 	close(l.items) | 	close(l.items) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user