@@ -662,6 +662,7 @@ module ValFlag = {
662662module Flag = {
663663 @inline let none = 0
664664 @inline let async = 1
665+ @inline let disableNanNumberValidation = 2
665666 // @inline let flatten = 64
666667
667668 external with : (flag , flag ) => flag = "%orint"
@@ -880,8 +881,8 @@ type globalConfig = {
880881 mutable defsAccumulator : option <dict <internal >>,
881882 @as ("a" )
882883 mutable defaultAdditionalItems : additionalItems ,
883- @as ("n " )
884- mutable disableNanNumberValidation : bool ,
884+ @as ("f " )
885+ mutable defaultFlag : flag ,
885886}
886887
887888type globalConfigOverride = {
@@ -890,12 +891,12 @@ type globalConfigOverride = {
890891}
891892
892893let initialOnAdditionalItems : additionalItemsMode = Strip
893- let initialDisableNanNumberProtection = false
894+ let initialDefaultFlag = Flag . none
894895let globalConfig : globalConfig = {
895896 message : InternalError .message ,
896897 defsAccumulator : None ,
897898 defaultAdditionalItems : (initialOnAdditionalItems :> additionalItems ),
898- disableNanNumberValidation : initialDisableNanNumberProtection ,
899+ defaultFlag : initialDefaultFlag ,
899900}
900901
901902@new
@@ -1734,7 +1735,7 @@ let numberDecoder = Builder.make((~input, ~selfSchema) => {
17341735 )}${inputVar}%1${B.eq(~negative)}0`
17351736
17361737 | _ =>
1737- if globalConfig . disableNanNumberValidation {
1738+ if input . global . flag -> Flag . unsafeHas ( Flag . disableNanNumberValidation ) {
17381739 ""
17391740 } else {
17401741 ` ${B.and_(~negative)}${B.exp(~negative=! negative)}Number.isNaN(${inputVar})`
@@ -2210,11 +2211,13 @@ let getDecoder = (~s1 as _, ~flag as _=?) => {
22102211 while flag .contents === None {
22112212 let arg = args -> Js .Array2 .unsafe_get (idx .contents )
22122213 if ! (arg -> Obj .magic ) {
2213- flag := Some (0 )
2214- keyRef := keyRef .contents ++ "-0"
2214+ let f = globalConfig .defaultFlag
2215+ flag := Some (f )
2216+ keyRef := keyRef .contents ++ "-" ++ f -> X .Int .unsafeToString
22152217 } else if Js .typeof (arg -> Obj .magic ) === "number" {
2216- flag := Some (arg -> Obj .magic )
2217- keyRef := keyRef .contents ++ "-" ++ arg -> Obj .magic
2218+ let f = arg -> Obj .magic -> Flag .with (globalConfig .defaultFlag )
2219+ flag := Some (f )
2220+ keyRef := keyRef .contents ++ "-" ++ f -> X .Int .unsafeToString
22182221 } else {
22192222 let schema : internal = arg -> Obj .magic
22202223 let seq : float = schema .seq -> Obj .magic
@@ -5861,9 +5864,9 @@ let global = override => {
58615864 | Some (defaultAdditionalItems ) => defaultAdditionalItems
58625865 | None => initialOnAdditionalItems
58635866 } :> additionalItems )
5864- globalConfig .disableNanNumberValidation = switch override .disableNanNumberValidation {
5865- | Some (disableNanNumberValidation ) => disableNanNumberValidation
5866- | None => initialDisableNanNumberProtection
5867+ globalConfig .defaultFlag = switch override .disableNanNumberValidation {
5868+ | Some (true ) => Flag . disableNanNumberValidation
5869+ | _ => initialDefaultFlag
58675870 }
58685871}
58695872
0 commit comments