Differences From Artifact [9190d7a166]:
- File
src/OFString+JSONValue.m
— part of check-in
[c8a5922af2]
at
2012-02-24 20:38:35
on branch 0.6
— Don't use OF_INLINE where the function contains a @try block.
Doing so does not work if exceptions are SJLJ. (user: js, size: 8611) [annotate] [blame] [check-ins using] [more...]
To Artifact [8ad19cb41d]:
- File
src/OFString+JSONValue.m
— part of check-in
[54f80aba7a]
at
2012-06-04 22:32:38
on branch trunk
— Initial JSON5 support.
Supported so far:
* comments
* single quoted strings (user: js, size: 8658) [annotate] [blame] [check-ins using]
| ︙ | ︙ | |||
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
}
static inline OFString*
parseString(const char *restrict *pointer, const char *stop)
{
char *buffer;
size_t i = 0;
if (++(*pointer) + 1 >= stop)
return nil;
if ((buffer = malloc(stop - *pointer)) == NULL)
return nil;
| > | 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
}
static inline OFString*
parseString(const char *restrict *pointer, const char *stop)
{
char *buffer;
size_t i = 0;
char delimiter = **pointer;
if (++(*pointer) + 1 >= stop)
return nil;
if ((buffer = malloc(stop - *pointer)) == NULL)
return nil;
|
| ︙ | ︙ | |||
232 233 234 235 236 237 238 | break; default: free(buffer); return nil; } /* End of string found */ | | | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
break;
default:
free(buffer);
return nil;
}
/* End of string found */
} else if (**pointer == delimiter) {
OFString *ret;
@try {
ret = [OFString stringWithUTF8String: buffer
length: i];
} @finally {
free(buffer);
|
| ︙ | ︙ | |||
396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
skipWhitespacesAndComments(pointer, stop);
if (*pointer >= stop)
return nil;
switch (**pointer) {
case '"':
return parseString(pointer, stop);
case '[':
return parseArray(pointer, stop);
case '{':
return parseDictionary(pointer, stop);
case 't':
if (*pointer + 3 >= stop)
| > | 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
skipWhitespacesAndComments(pointer, stop);
if (*pointer >= stop)
return nil;
switch (**pointer) {
case '"':
case '\'':
return parseString(pointer, stop);
case '[':
return parseArray(pointer, stop);
case '{':
return parseDictionary(pointer, stop);
case 't':
if (*pointer + 3 >= stop)
|
| ︙ | ︙ |