Eric Fischer
f67e97cd08
Work out more details of how json_free() needs to work.
...
The idea is that you can free any element once you are
done with it, even if it is part of an array or hash that
isn't completely read yet.
Removing array elements is reasonably well defined because
nothing else depends on them. Removing a hash key or value
causes it to be replaced by a null unless the other side of
the component has already been nulled out, in which case
the whole pair is removed.
2014-02-06 22:45:40 -08:00
Eric Fischer
f0f73c6dd1
Keep track of the root of the parse tree for the caller
2014-02-06 21:06:27 -08:00
Eric Fischer
415193ad8e
Remove old state resetting
2014-02-06 21:05:46 -08:00
Eric Fischer
69a5ca0bb9
Include filename in error output
2014-02-06 20:51:15 -08:00
Eric Fischer
9d4ee102b4
Forgot to initialize the error to NULL
2014-02-06 20:49:48 -08:00
Eric Fischer
a74444af28
Track line number for error reports
2014-02-06 20:44:39 -08:00
Eric Fischer
46120e84c4
Remember to check for missing commas
2014-02-06 20:31:31 -08:00
Eric Fischer
e22b154ecc
Add an input form that parses JSON from a string
2014-02-06 19:27:21 -08:00
Eric Fischer
ed079e37a9
Add a reader abstraction
2014-02-06 19:22:37 -08:00
Eric Fischer
979b9243d8
A container object makes the state transitions more straightforward
...
And should make it possible to free an object that has just been read
and still know what the next state will be, importantly.
2014-02-06 18:56:22 -08:00
Eric Fischer
55510cac04
Start adding free logic
2014-02-06 17:58:23 -08:00
Eric Fischer
e9d2c94f93
Pass along the string length instead of just null-terminating
2014-02-06 13:28:35 -08:00
Eric Fischer
1a7b4189bf
Detect a lack of digits in the exponent for a number
2014-02-06 13:26:56 -08:00
Eric Fischer
55692cb27c
Treat unclosed containers at EOF as an error after all
2014-02-06 13:20:56 -08:00
Eric Fischer
6449e817b6
Detect attempts to attach an element to a non-container parent.
...
Maybe there is a better name for this. The typical case is adjacent
tokens not separated by a comma.
2014-02-06 12:51:32 -08:00
Eric Fischer
ad2843d65b
Be consistent about EOF handling around whitespace
2014-02-06 12:31:12 -08:00
Eric Fischer
f76bcab825
Detect misplaced comma within hash
2014-02-06 12:25:59 -08:00
Eric Fischer
948584126a
Detect trailing commas and colons inside arrays and hashes.
2014-02-06 12:19:33 -08:00
Eric Fischer
42283ece0b
More sensible way of passing errors back to caller
2014-02-06 12:13:23 -08:00
Eric Fischer
f8465828e5
Maybe the right way to handle empty arrays?
...
The previous check for the array length being 0 didn't work
for the case of an array that contains only an empty array.
The tricky part is that the current node is the array when
the array has just begun or just after a comma, but also
when the completed array has been passed off to the caller.
2014-02-06 00:30:25 -08:00
Eric Fischer
68e0784cc3
At least don't talk about allocation sizes in the public API
2014-02-05 23:35:35 -08:00
Eric Fischer
d630aa917e
Put arrays in order by getting rid of the linked lists.
...
Resizing is ugly, but less ugly than backwards arrays.
2014-02-05 23:18:27 -08:00
Eric Fischer
879f9126b3
Name the types in the order the JSON spec names them in
2014-02-05 22:40:35 -08:00
Eric Fischer
c69e595e4e
Do escaping in output strings
2014-02-05 22:34:47 -08:00
Eric Fischer
9299ef2ecb
Handle empty arrays and hashes. Detect non-string hash keys.
2014-02-05 22:13:03 -08:00
Eric Fischer
71981fc49e
Add Makefile
2014-02-05 22:04:58 -08:00
Eric Fischer
7641459278
Handle named files, not just standard input
2014-02-05 22:00:52 -08:00
Eric Fischer
264abd48de
Fix crash with comma or colon at the top level.
2014-02-05 21:52:39 -08:00
Eric Fischer
e7184989ec
Handle \u escapes in strings
2014-02-05 21:42:49 -08:00
Eric Fischer
4506a85e6b
Add comments
2014-02-05 21:34:17 -08:00
Eric Fischer
95410dbf33
Fix logic error that broke top-level hashes
2014-02-05 21:29:40 -08:00
Eric Fischer
7983c66add
Separate source and header files
2014-02-05 21:27:48 -08:00
Eric Fischer
281b98e3d8
Guard against hash keys with no values
2014-02-05 18:34:02 -08:00
Eric Fischer
45e37eb66a
Hash getter to extract all Features
2014-02-05 18:23:49 -08:00
Eric Fischer
8aec0ed9d2
Break up the wall of text a little
2014-02-05 18:03:12 -08:00
Eric Fischer
e195aa54c3
Much more reasonable pretty-printing (but still reversed)
2014-02-05 17:59:04 -08:00
Eric Fischer
285f1bf8e6
Fix number parsing bug and hash initialization bug
2014-02-05 17:38:02 -08:00
Eric Fischer
3e049754d1
Fix null dereferences
2014-02-05 17:28:45 -08:00
Eric Fischer
558c47c498
Slightly better debug output
2014-02-05 17:21:19 -08:00
Eric Fischer
3e9bb4567e
Test code
2014-02-05 16:51:28 -08:00
Eric Fischer
80408353c8
Add strings
2014-02-05 16:45:20 -08:00
Eric Fischer
b0103ea458
Growing string instead of static buffer
2014-02-05 16:39:50 -08:00
Eric Fischer
2a7fa98a3a
Add numbers (and a buffer overflow risk to fix)
2014-02-05 16:23:01 -08:00
Eric Fischer
7865a9757e
Attach child objects to the containers
2014-02-05 16:10:22 -08:00
Eric Fischer
50f30c3dd0
Comma and colon
2014-02-05 16:00:01 -08:00
Eric Fischer
f895b8f6b7
Correct value for false
2014-02-05 15:49:53 -08:00
Eric Fischer
c913f0eec1
Add null, true, false
2014-02-05 15:42:15 -08:00
Eric Fischer
32cf645516
Arrays and hashes
2014-02-05 15:33:43 -08:00
Eric Fischer
c3cda93a77
Basic data types
2014-02-05 15:16:23 -08:00