Tao Wen hace 7 años
padre
commit
9edd73f752
Se han modificado 2 ficheros con 18 adiciones y 11 borrados
  1. 7 5
      feature_adapter.go
  2. 11 6
      feature_config.go

+ 7 - 5
feature_adapter.go

@@ -97,9 +97,9 @@ func (adapter *Decoder) Buffered() io.Reader {
 
 // UseNumber for number JSON element, use float64 or json.NumberValue (alias of string)
 func (adapter *Decoder) UseNumber() {
-	origCfg := adapter.iter.cfg.configBeforeFrozen
-	origCfg.UseNumber = true
-	adapter.iter.cfg = origCfg.Froze().(*frozenConfig)
+	cfg := adapter.iter.cfg.configBeforeFrozen
+	cfg.UseNumber = true
+	adapter.iter.cfg = cfg.frozeWithCacheReuse()
 }
 
 // NewEncoder same as json.NewEncoder
@@ -122,14 +122,16 @@ func (adapter *Encoder) Encode(val interface{}) error {
 
 // SetIndent set the indention. Prefix is not supported
 func (adapter *Encoder) SetIndent(prefix, indent string) {
-	adapter.stream.cfg.indentionStep = len(indent)
+	config := adapter.stream.cfg.configBeforeFrozen
+	config.IndentionStep = len(indent)
+	adapter.stream.cfg = config.frozeWithCacheReuse()
 }
 
 // SetEscapeHTML escape html by default, set to false to disable
 func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) {
 	config := adapter.stream.cfg.configBeforeFrozen
 	config.EscapeHTML = escapeHTML
-	adapter.stream.cfg = config.Froze().(*frozenConfig)
+	adapter.stream.cfg = config.frozeWithCacheReuse()
 }
 
 // Valid reports whether data is a valid JSON encoding.

+ 11 - 6
feature_config.go

@@ -60,11 +60,7 @@ var ConfigFastest = Config{
 
 // Froze forge API from config
 func (cfg Config) Froze() API {
-	api := getFrozenConfigFromCache(cfg)
-	if api != nil {
-		return api
-	}
-	api = &frozenConfig{
+	api := &frozenConfig{
 		sortMapKeys:                   cfg.SortMapKeys,
 		indentionStep:                 cfg.IndentionStep,
 		objectFieldMustBeSimpleString: cfg.ObjectFieldMustBeSimpleString,
@@ -86,6 +82,15 @@ func (cfg Config) Froze() API {
 		api.validateJsonRawMessage()
 	}
 	api.configBeforeFrozen = cfg
+	return api
+}
+
+func (cfg Config) frozeWithCacheReuse() *frozenConfig {
+	api := getFrozenConfigFromCache(cfg)
+	if api != nil {
+		return api
+	}
+	api = cfg.Froze().(*frozenConfig)
 	addFrozenConfigToCache(cfg, api)
 	return api
 }
@@ -233,7 +238,7 @@ func (cfg *frozenConfig) MarshalIndent(v interface{}, prefix, indent string) ([]
 	}
 	newCfg := cfg.configBeforeFrozen
 	newCfg.IndentionStep = len(indent)
-	return newCfg.Froze().Marshal(v)
+	return newCfg.frozeWithCacheReuse().Marshal(v)
 }
 
 func (cfg *frozenConfig) UnmarshalFromString(str string, v interface{}) error {