Просмотр исходного кода

Tweak width so it can be inlined.

Gustavo Niemeyer 13 лет назад
Родитель
Сommit
f4d271a8a2
2 измененных файлов с 14 добавлено и 19 удалено
  1. 4 14
      scannerc.go
  2. 10 5
      yamlprivateh.go

+ 4 - 14
scannerc.go

@@ -513,19 +513,8 @@ func skip_line(parser *yaml_parser_t) {
 
 // Copy a character to a string buffer and advance pointers.
 func read(parser *yaml_parser_t, s *[]byte) bool {
-	//w := width(parser.buffer[parser.buffer_pos])
-	b := parser.buffer[parser.buffer_pos]
-	w := 0
-	switch {
-	case b&0x80 == 0x00:
-		w = 1
-	case b&0xE0 == 0xC0:
-		w = 2
-	case b&0xF0 == 0xE0:
-		w = 3
-	case b&0xF8 == 0xF0:
-		w = 4
-	default:
+	w := width(parser.buffer[parser.buffer_pos])
+	if w == 0 {
 		panic("invalid character sequence")
 	}
 	if len(*s) == 0 {
@@ -534,10 +523,11 @@ func read(parser *yaml_parser_t, s *[]byte) bool {
 	if w == 1 && len(*s)+w <= cap(*s) {
 		*s = (*s)[:len(*s)+1]
 		(*s)[len(*s)-1] = parser.buffer[parser.buffer_pos]
+		parser.buffer_pos++
 	} else {
 		*s = append(*s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
+		parser.buffer_pos += w
 	}
-	parser.buffer_pos += w
 	parser.mark.index++
 	parser.mark.column++
 	parser.unread--

+ 10 - 5
yamlprivateh.go

@@ -154,15 +154,20 @@ func is_blankz(b []byte, i int) bool {
 
 // Determine the width of the character.
 func width(b byte) int {
-	switch {
-	case b&0x80 == 0x00:
+	// Don't replace these by a switch without first
+	// confirming that it is being inlined.
+	if b&0x80 == 0x00 {
 		return 1
-	case b&0xE0 == 0xC0:
+	}
+	if b&0xE0 == 0xC0 {
 		return 2
-	case b&0xF0 == 0xE0:
+	}
+	if b&0xF0 == 0xE0 {
 		return 3
-	case b&0xF8 == 0xF0:
+	}
+	if b&0xF8 == 0xF0 {
 		return 4
 	}
 	return 0
+
 }