(b []byte, p unsafe.Pointer)
| 1334 | } |
| 1335 | |
| 1336 | func (d decoder) decodeDynamicNumber(b []byte, p unsafe.Pointer) ([]byte, error) { |
| 1337 | kind := Float |
| 1338 | var err error |
| 1339 | |
| 1340 | // Only pre-parse for numeric kind if a conditional decode |
| 1341 | // has been requested. |
| 1342 | if d.anyFlagsSet(UseBigInt | UseInt64 | UseUint64) { |
| 1343 | _, _, kind, err = d.parseNumber(b) |
| 1344 | if err != nil { |
| 1345 | return b, err |
| 1346 | } |
| 1347 | } |
| 1348 | |
| 1349 | var rem []byte |
| 1350 | anyPtr := (*any)(p) |
| 1351 | |
| 1352 | // Mutually exclusive integer handling cases. |
| 1353 | switch { |
| 1354 | // If requested, attempt decode of positive integers as uint64. |
| 1355 | case kind == Uint && d.anyFlagsSet(UseUint64): |
| 1356 | rem, err = decodeInto[uint64](anyPtr, b, d, decoder.decodeUint64) |
| 1357 | if err == nil { |
| 1358 | return rem, err |
| 1359 | } |
| 1360 | |
| 1361 | // If uint64 decode was not requested but int64 decode was requested, |
| 1362 | // then attempt decode of positive integers as int64. |
| 1363 | case kind == Uint && d.anyFlagsSet(UseInt64): |
| 1364 | fallthrough |
| 1365 | |
| 1366 | // If int64 decode was requested, |
| 1367 | // attempt decode of negative integers as int64. |
| 1368 | case kind == Int && d.anyFlagsSet(UseInt64): |
| 1369 | rem, err = decodeInto[int64](anyPtr, b, d, decoder.decodeInt64) |
| 1370 | if err == nil { |
| 1371 | return rem, err |
| 1372 | } |
| 1373 | } |
| 1374 | |
| 1375 | // Fallback numeric handling cases: |
| 1376 | // these cannot be combined into the above switch, |
| 1377 | // since these cases also handle overflow |
| 1378 | // from the above cases, if decode was already attempted. |
| 1379 | switch { |
| 1380 | // If *big.Int decode was requested, handle that case for any integer. |
| 1381 | case kind == Uint && d.anyFlagsSet(UseBigInt): |
| 1382 | fallthrough |
| 1383 | case kind == Int && d.anyFlagsSet(UseBigInt): |
| 1384 | rem, err = decodeInto[*big.Int](anyPtr, b, d, bigIntDecoder) |
| 1385 | |
| 1386 | // If json.Number decode was requested, handle that for any number. |
| 1387 | case d.anyFlagsSet(UseNumber): |
| 1388 | rem, err = decodeInto[Number](anyPtr, b, d, decoder.decodeNumber) |
| 1389 | |
| 1390 | // Fall back to float64 decode when no special decoding has been requested. |
| 1391 | default: |
| 1392 | rem, err = decodeInto[float64](anyPtr, b, d, decoder.decodeFloat64) |
| 1393 | } |
no test coverage detected