decoder2: fix number decoding and improve errors#25015
Merged
Merged
Conversation
|
Connected to Huly®: V_0.6-23532 |
spytheman
reviewed
Aug 1, 2025
Comment on lines
+671
to
+685
| fn get_value_kind(value u8) ValueKind { | ||
| if value == u8(`"`) { | ||
| return .string_ | ||
| } else if value == u8(`t`) || value == u8(`f`) { | ||
| return .boolean | ||
| } else if value == u8(`{`) { | ||
| return .object | ||
| } else if value == u8(`[`) { | ||
| return .array | ||
| } else if (value >= u8(48) && value <= u8(57)) || value == u8(`-`) { | ||
| return .number | ||
| } else if value == u8(`n`) { | ||
| return .null | ||
| } | ||
| return .unknown |
Contributor
There was a problem hiding this comment.
There is no need for the explicit u8() casts.
spytheman
reviewed
Aug 1, 2025
| for index < int_min(number_info.length, digit_amount - 1) { | ||
| digit := T(decoder.json[number_info.position + index] - `0`) | ||
|
|
||
| if digit > 9 { // comma, e and E are all smaller 0 in ASCII so they underflow |
Contributor
There was a problem hiding this comment.
What does smaller 0 in ASCII means?
Contributor
There was a problem hiding this comment.
, is 44, and e is 101, while 0 is 48 in ASCII:
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This fixes the way number are decoded to adhere to the json standart and improve error handling of over/underflow or otherwise invalid numeric data (real numbers for integers). Also improved the way the decoder shows errors.
New checker errors
New decoder errors
These can also be broken apart through a new error struct.