11# json-serialization
2- # Copyright (c) 2019-2023 Status Research & Development GmbH
2+ # Copyright (c) 2019-2025 Status Research & Development GmbH
33# Licensed under either of
44# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
55# * MIT license ([LICENSE-MIT](LICENSE-MIT))
88# those terms.
99
1010{.experimental : " notnil" .}
11+ {.push raises : [], gcsafe .}
1112
1213import
1314 ./ reader_desc,
@@ -18,8 +19,6 @@ from json import JsonNode, JsonNodeKind, escapeJson, parseJson
1819export
1920 reader_desc
2021
21- {.push gcsafe , raises : [].}
22-
2322type
2423 NumberPart * = enum
2524 SignPart
@@ -59,7 +58,7 @@ template checkError*(r: var JsonReader) =
5958 r.raiseParserError ()
6059
6160proc tokKind * (r: var JsonReader ): JsonValueKind
62- {.gcsafe , raises : [IOError , JsonReaderError ].} =
61+ {.raises : [IOError , JsonReaderError ].} =
6362 result = r.lex.tokKind
6463 r.checkError
6564
@@ -68,7 +67,7 @@ proc tokKind*(r: var JsonReader): JsonValueKind
6867# ------------------------------------------------------------------------------
6968
7069proc customIntHandler * (r: var JsonReader ; handler: CustomIntHandler )
71- {.gcsafe , raises : [IOError , JsonReaderError ].} =
70+ {.raises : [IOError , JsonReaderError ].} =
7271 # # Apply the `handler` argument function for parsing only integer part
7372 # # of JsonNumber
7473 # TODO : remove temporary token
@@ -83,7 +82,7 @@ proc customIntHandler*(r: var JsonReader; handler: CustomIntHandler)
8382 handler (ord (c) - ord ('0' ))
8483
8584proc customNumberHandler * (r: var JsonReader ; handler: CustomNumberHandler )
86- {.gcsafe , raises : [IOError , JsonReaderError ].} =
85+ {.raises : [IOError , JsonReaderError ].} =
8786 # # Apply the `handler` argument function for parsing complete JsonNumber
8887 # TODO : remove temporary token
8988 if r.tokKind != JsonValueKind .Number :
@@ -101,7 +100,7 @@ proc customNumberHandler*(r: var JsonReader; handler: CustomNumberHandler)
101100 handler (ExponentPart , ord (c) - ord ('0' ))
102101
103102proc customStringHandler * (r: var JsonReader ; limit: int ; handler: CustomStringHandler )
104- {.gcsafe , raises : [IOError , JsonReaderError ].} =
103+ {.raises : [IOError , JsonReaderError ].} =
105104 # # Apply the `handler` argument function for parsing a String type
106105 # # value.
107106 # TODO : remove temporary token
@@ -167,32 +166,32 @@ template customStringValueIt*(r: var JsonReader; body: untyped) =
167166# ------------------------------------------------------------------------------
168167
169168proc parseString * (r: var JsonReader , limit: int ): string
170- {.gcsafe , raises : [IOError , JsonReaderError ].} =
169+ {.raises : [IOError , JsonReaderError ].} =
171170 if r.tokKind != JsonValueKind .String :
172171 r.raiseParserError (errStringExpected)
173172 r.lex.scanString (result , limit)
174173 r.checkError
175174
176175proc parseString * (r: var JsonReader ): string
177- {.gcsafe , raises : [IOError , JsonReaderError ].} =
176+ {.raises : [IOError , JsonReaderError ].} =
178177 r.parseString (r.lex.conf.stringLengthLimit)
179178
180179proc parseBool * (r: var JsonReader ): bool
181- {.gcsafe , raises : [IOError , JsonReaderError ].} =
180+ {.raises : [IOError , JsonReaderError ].} =
182181 if r.tokKind != JsonValueKind .Bool :
183182 r.raiseParserError (errBoolExpected)
184183 result = r.lex.scanBool ()
185184 r.checkError
186185
187186proc parseNull * (r: var JsonReader )
188- {.gcsafe , raises : [IOError , JsonReaderError ].} =
187+ {.raises : [IOError , JsonReaderError ].} =
189188 if r.tokKind != JsonValueKind .Null :
190189 r.raiseParserError (errNullExpected)
191190 r.lex.scanNull ()
192191 r.checkError
193192
194193proc parseNumberImpl [F,T](r: var JsonReader [F]): JsonNumber [T]
195- {.gcsafe , raises : [IOError , JsonReaderError ].} =
194+ {.raises : [IOError , JsonReaderError ].} =
196195 if r.tokKind != JsonValueKind .Number :
197196 r.raiseParserError (errNumberExpected)
198197 r.lex.scanNumber (result )
@@ -206,14 +205,14 @@ template parseNumber*(r: var JsonReader, T: type): auto =
206205 parseNumberImpl [F.Flavor , T](r)
207206
208207proc parseNumber * (r: var JsonReader , val: var JsonNumber )
209- {.gcsafe , raises : [IOError , JsonReaderError ].} =
208+ {.raises : [IOError , JsonReaderError ].} =
210209 if r.tokKind != JsonValueKind .Number :
211210 r.raiseParserError (errNumberExpected)
212211 r.lex.scanNumber (val)
213212 r.checkError
214213
215214proc toInt * (r: var JsonReader , val: JsonNumber , T: type SomeSignedInt , portable: bool ): T
216- {.gcsafe , raises : [JsonReaderError ].}=
215+ {.raises : [JsonReaderError ].}=
217216 if val.sign == JsonSign .Neg :
218217 if val.integer.uint64 > T.high.uint64 + 1 :
219218 raiseIntOverflow (r, val.integer, true )
@@ -232,7 +231,7 @@ proc toInt*(r: var JsonReader, val: JsonNumber, T: type SomeSignedInt, portable:
232231 raiseIntOverflow (r, result .BiggestUInt , true )
233232
234233proc toInt * (r: var JsonReader , val: JsonNumber , T: type SomeUnsignedInt , portable: bool ): T
235- {.gcsafe , raises : [IOError , JsonReaderError ].}=
234+ {.raises : [IOError , JsonReaderError ].}=
236235 if val.sign == JsonSign .Neg :
237236 raiseUnexpectedToken (r, etInt)
238237 if val.integer > T.high.uint64 :
@@ -244,7 +243,7 @@ proc toInt*(r: var JsonReader, val: JsonNumber, T: type SomeUnsignedInt, portabl
244243 T (val.integer)
245244
246245proc parseInt * (r: var JsonReader , T: type SomeInteger , portable: bool = false ): T
247- {.gcsafe , raises : [IOError , JsonReaderError ].} =
246+ {.raises : [IOError , JsonReaderError ].} =
248247 if r.tokKind != JsonValueKind .Number :
249248 r.raiseParserError (errNumberExpected)
250249 var val: JsonNumber [uint64 ]
@@ -255,7 +254,7 @@ proc parseInt*(r: var JsonReader, T: type SomeInteger, portable: bool = false):
255254 r.toInt (val, T, portable)
256255
257256proc toFloat * (r: var JsonReader , val: JsonNumber , T: type SomeFloat ): T
258- {.gcsafe , raises : [JsonReaderError ].}=
257+ {.raises : [JsonReaderError ].}=
259258 const
260259 powersOfTen = [1 e0 , 1 e1 , 1 e2 , 1 e3 , 1 e4 , 1 e5 , 1 e6 , 1 e7 , 1 e8 , 1 e9 ,
261260 1 e10 , 1 e11 , 1 e12 , 1 e13 , 1 e14 , 1 e15 , 1 e16 , 1 e17 , 1 e18 , 1 e19 ,
@@ -281,7 +280,7 @@ proc toFloat*(r: var JsonReader, val: JsonNumber, T: type SomeFloat): T
281280 result = result * powersOfTen[val.exponent]
282281
283282proc parseFloat * (r: var JsonReader , T: type SomeFloat ): T
284- {.gcsafe , raises : [IOError , JsonReaderError ].} =
283+ {.raises : [IOError , JsonReaderError ].} =
285284 if r.tokKind != JsonValueKind .Number :
286285 r.raiseParserError (errNumberExpected)
287286 var val: JsonNumber [uint64 ]
@@ -290,7 +289,7 @@ proc parseFloat*(r: var JsonReader, T: type SomeFloat): T
290289 r.toFloat (val, T)
291290
292291proc parseAsString * (r: var JsonReader , val: var string )
293- {.gcsafe , raises : [IOError , JsonReaderError ].} =
292+ {.raises : [IOError , JsonReaderError ].} =
294293 case r.tokKind
295294 of JsonValueKind .String :
296295 escapeJson (r.parseString (), val)
@@ -334,13 +333,13 @@ proc parseAsString*(r: var JsonReader, val: var string)
334333 val.add " null"
335334
336335proc parseAsString * (r: var JsonReader ): JsonString
337- {.gcsafe , raises : [IOError , JsonReaderError ].} =
336+ {.raises : [IOError , JsonReaderError ].} =
338337 var val: string
339338 r.parseAsString (val)
340339 val.JsonString
341340
342341proc parseValueImpl [F,T](r: var JsonReader [F]): JsonValueRef [T]
343- {.gcsafe , raises : [IOError , JsonReaderError ].} =
342+ {.raises : [IOError , JsonReaderError ].} =
344343 r.lex.scanValue (result )
345344 r.checkError
346345
@@ -352,7 +351,7 @@ template parseValue*(r: var JsonReader, T: type): auto =
352351 parseValueImpl [F.Flavor , T](r)
353352
354353proc parseValue * (r: var JsonReader , val: var JsonValueRef )
355- {.gcsafe , raises : [IOError , JsonReaderError ].} =
354+ {.raises : [IOError , JsonReaderError ].} =
356355 r.lex.scanValue (val)
357356 r.checkError
358357
@@ -443,10 +442,10 @@ template parseObjectCustomKey*(r: var JsonReader, keyAction: untyped, body: unty
443442# ------------------------------------------------------------------------------
444443
445444proc parseJsonNode * (r: var JsonReader ): JsonNode
446- {.gcsafe , raises : [IOError , JsonReaderError ].}
445+ {.raises : [IOError , JsonReaderError ].}
447446
448447proc readJsonNodeField (r: var JsonReader , field: var JsonNode )
449- {.gcsafe , raises : [IOError , JsonReaderError ].} =
448+ {.raises : [IOError , JsonReaderError ].} =
450449 if field.isNil.not :
451450 r.raiseUnexpectedValue (" Unexpected duplicated field name" )
452451 field = r.parseJsonNode ()
0 commit comments