Переглянути джерело

remove special handling for field

Tao Wen 7 роки тому
батько
коміт
64cc784089

+ 18 - 38
feature_iter_object.go

@@ -3,7 +3,6 @@ package jsoniter
 import (
 	"fmt"
 	"unicode"
-	"unsafe"
 )
 
 // ReadObject read one field from object.
@@ -19,16 +18,12 @@ func (iter *Iterator) ReadObject() (ret string) {
 		c = iter.nextToken()
 		if c == '"' {
 			iter.unreadByte()
-			if iter.cfg.objectFieldMustBeSimpleString {
-				return string(iter.readObjectFieldAsBytes())
-			} else {
-				field := iter.ReadString()
-				c = iter.nextToken()
-				if c != ':' {
-					iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
-				}
-				return field
+			field := iter.ReadString()
+			c = iter.nextToken()
+			if c != ':' {
+				iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
 			}
+			return field
 		}
 		if c == '}' {
 			return "" // end of object
@@ -36,16 +31,12 @@ func (iter *Iterator) ReadObject() (ret string) {
 		iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c}))
 		return
 	case ',':
-		if iter.cfg.objectFieldMustBeSimpleString {
-			return string(iter.readObjectFieldAsBytes())
-		} else {
-			field := iter.ReadString()
-			c = iter.nextToken()
-			if c != ':' {
-				iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
-			}
-			return field
+		field := iter.ReadString()
+		c = iter.nextToken()
+		if c != ':' {
+			iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
 		}
+		return field
 	case '}':
 		return "" // end of object
 	default:
@@ -115,36 +106,25 @@ func calcHash(str string) int32 {
 // ReadObjectCB read object with callback, the key is ascii only and field name not copied
 func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
 	c := iter.nextToken()
-	var fieldBytes []byte
 	var field string
 	if c == '{' {
 		c = iter.nextToken()
 		if c == '"' {
 			iter.unreadByte()
-			if iter.cfg.objectFieldMustBeSimpleString {
-				fieldBytes = iter.readObjectFieldAsBytes()
-				field = *(*string)(unsafe.Pointer(&fieldBytes))
-			} else {
-				field = iter.ReadString()
-				c = iter.nextToken()
-				if c != ':' {
-					iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
-				}
+			field = iter.ReadString()
+			c = iter.nextToken()
+			if c != ':' {
+				iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
 			}
 			if !callback(iter, field) {
 				return false
 			}
 			c = iter.nextToken()
 			for c == ',' {
-				if iter.cfg.objectFieldMustBeSimpleString {
-					fieldBytes = iter.readObjectFieldAsBytes()
-					field = *(*string)(unsafe.Pointer(&fieldBytes))
-				} else {
-					field = iter.ReadString()
-					c = iter.nextToken()
-					if c != ':' {
-						iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
-					}
+				field = iter.ReadString()
+				c = iter.nextToken()
+				if c != ':' {
+					iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
 				}
 				if !callback(iter, field) {
 					return false

+ 4 - 9
feature_reflect_struct_decoder.go

@@ -487,15 +487,10 @@ func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
 		fieldDecoder.Decode(ptr, iter)
 	}
 	for iter.nextToken() == ',' {
-		if iter.cfg.objectFieldMustBeSimpleString {
-			fieldBytes := iter.readObjectFieldAsBytes()
-			field = *(*string)(unsafe.Pointer(&fieldBytes))
-		} else {
-			field = iter.ReadString()
-			c := iter.nextToken()
-			if c != ':' {
-				iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
-			}
+		field = iter.ReadString()
+		c := iter.nextToken()
+		if c != ':' {
+			iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
 		}
 		fieldDecoder = decoder.fields[strings.ToLower(field)]
 		if fieldDecoder == nil {

+ 0 - 1
type_tests/struct_field_case_test.go

@@ -1,7 +1,6 @@
 package test
 
 func init() {
-	// TODO: fix this
 	//testCases = append(testCases,
 	//	(*struct {
 	//		Upper bool `json:"M"`