data -> userdata
This commit is contained in:
@@ -7,12 +7,12 @@ extern "C" {
|
|||||||
|
|
||||||
__attribute__((visibility("default"))) WeaselJsonParser *
|
__attribute__((visibility("default"))) WeaselJsonParser *
|
||||||
WeaselJsonParser_create(int stackSize, const WeaselJsonCallbacks *callbacks,
|
WeaselJsonParser_create(int stackSize, const WeaselJsonCallbacks *callbacks,
|
||||||
void *data) {
|
void *userdata) {
|
||||||
auto *buf = malloc(sizeof(Parser3) + stackSize);
|
auto *buf = malloc(sizeof(Parser3) + stackSize);
|
||||||
if (buf == nullptr) {
|
if (buf == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return (WeaselJsonParser *)new (buf) Parser3{callbacks, data, stackSize};
|
return (WeaselJsonParser *)new (buf) Parser3{callbacks, userdata, stackSize};
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((visibility("default"))) void
|
__attribute__((visibility("default"))) void
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ enum Symbol : uint8_t {
|
|||||||
N_SYMBOL_COUNT, // Must be last
|
N_SYMBOL_COUNT, // Must be last
|
||||||
};
|
};
|
||||||
struct Parser3 {
|
struct Parser3 {
|
||||||
Parser3(const WeaselJsonCallbacks *callbacks, void *data, int stackSize)
|
Parser3(const WeaselJsonCallbacks *callbacks, void *userdata, int stackSize)
|
||||||
: callbacks(callbacks), data(data), stackSize(stackSize) {
|
: callbacks(callbacks), userdata(userdata), stackSize(stackSize) {
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ struct Parser3 {
|
|||||||
int len = buf - dataBegin;
|
int len = buf - dataBegin;
|
||||||
assert(len >= 0);
|
assert(len >= 0);
|
||||||
if (done || len > 0) {
|
if (done || len > 0) {
|
||||||
callbacks->on_number_data(data, dataBegin, len, done);
|
callbacks->on_number_data(userdata, dataBegin, len, done);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ struct Parser3 {
|
|||||||
int len = writeBuf - dataBegin;
|
int len = writeBuf - dataBegin;
|
||||||
assert(len >= 0);
|
assert(len >= 0);
|
||||||
if (done || len > 0) {
|
if (done || len > 0) {
|
||||||
callbacks->on_string_data(data, dataBegin, len, done);
|
callbacks->on_string_data(userdata, dataBegin, len, done);
|
||||||
}
|
}
|
||||||
dataBegin = writeBuf;
|
dataBegin = writeBuf;
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ struct Parser3 {
|
|||||||
assert(result >= 0);
|
assert(result >= 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
Symbol top() const {
|
[[nodiscard]] Symbol top() const {
|
||||||
assert(!empty());
|
assert(!empty());
|
||||||
return *(stackPtr - 1);
|
return *(stackPtr - 1);
|
||||||
}
|
}
|
||||||
@@ -144,7 +144,7 @@ struct Parser3 {
|
|||||||
// Used for unescaping string data in place
|
// Used for unescaping string data in place
|
||||||
char *writeBuf;
|
char *writeBuf;
|
||||||
const WeaselJsonCallbacks *const callbacks;
|
const WeaselJsonCallbacks *const callbacks;
|
||||||
void *const data;
|
void *const userdata;
|
||||||
Symbol *stackPtr;
|
Symbol *stackPtr;
|
||||||
bool complete;
|
bool complete;
|
||||||
uint32_t utf8Codepoint;
|
uint32_t utf8Codepoint;
|
||||||
@@ -178,7 +178,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
switch (*self->buf) {
|
switch (*self->buf) {
|
||||||
case '{':
|
case '{':
|
||||||
self->callbacks->on_begin_object(self->data);
|
self->callbacks->on_begin_object(self->userdata);
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({N_OBJECT2})) {
|
if (auto s = self->push({N_OBJECT2})) {
|
||||||
@@ -186,7 +186,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
self->callbacks->on_begin_array(self->data);
|
self->callbacks->on_begin_array(self->userdata);
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({N_ARRAY2})) {
|
if (auto s = self->push({N_ARRAY2})) {
|
||||||
@@ -238,7 +238,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
if (self->len() >= 3) {
|
if (self->len() >= 3) {
|
||||||
if (memcmp(self->buf, "rue", 3) == 0) {
|
if (memcmp(self->buf, "rue", 3) == 0) {
|
||||||
self->callbacks->on_true_literal(self->data);
|
self->callbacks->on_true_literal(self->userdata);
|
||||||
self->buf += 3;
|
self->buf += 3;
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
@@ -254,7 +254,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
if (self->len() >= 4) {
|
if (self->len() >= 4) {
|
||||||
if (memcmp(self->buf, "alse", 4) == 0) {
|
if (memcmp(self->buf, "alse", 4) == 0) {
|
||||||
self->callbacks->on_false_literal(self->data);
|
self->callbacks->on_false_literal(self->userdata);
|
||||||
self->buf += 4;
|
self->buf += 4;
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
@@ -270,7 +270,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_value(Parser3 *self) {
|
|||||||
self->pop();
|
self->pop();
|
||||||
if (self->len() >= 3) {
|
if (self->len() >= 3) {
|
||||||
if (memcmp(self->buf, "ull", 3) == 0) {
|
if (memcmp(self->buf, "ull", 3) == 0) {
|
||||||
self->callbacks->on_null_literal(self->data);
|
self->callbacks->on_null_literal(self->userdata);
|
||||||
self->buf += 3;
|
self->buf += 3;
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
@@ -299,7 +299,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_object2(Parser3 *self) {
|
|||||||
case '}':
|
case '}':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_end_object(self->data);
|
self->callbacks->on_end_object(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
case '"':
|
case '"':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
@@ -326,7 +326,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_object3(Parser3 *self) {
|
|||||||
case '}':
|
case '}':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_end_object(self->data);
|
self->callbacks->on_end_object(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
case ',':
|
case ',':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
@@ -352,7 +352,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_array2(Parser3 *self) {
|
|||||||
case ']':
|
case ']':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_end_array(self->data);
|
self->callbacks->on_end_array(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
default:
|
default:
|
||||||
self->pop();
|
self->pop();
|
||||||
@@ -375,7 +375,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_array3(Parser3 *self) {
|
|||||||
case ']':
|
case ']':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_end_array(self->data);
|
self->callbacks->on_end_array(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
case ',':
|
case ',':
|
||||||
++self->buf;
|
++self->buf;
|
||||||
@@ -663,7 +663,7 @@ inline PRESERVE_NONE WeaselJsonStatus t_hex2(Parser3 *self) {
|
|||||||
w[0] = (0b00011111 & self->utf8Codepoint) | 0b11000000;
|
w[0] = (0b00011111 & self->utf8Codepoint) | 0b11000000;
|
||||||
w += 2;
|
w += 2;
|
||||||
if (useTmp) {
|
if (useTmp) {
|
||||||
self->callbacks->on_string_data(self->data, tmp, 2, false);
|
self->callbacks->on_string_data(self->userdata, tmp, 2, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(self->utf8Codepoint < 0x10000);
|
assert(self->utf8Codepoint < 0x10000);
|
||||||
@@ -691,7 +691,7 @@ inline PRESERVE_NONE WeaselJsonStatus t_hex2(Parser3 *self) {
|
|||||||
w[0] = (0b00001111 & self->utf8Codepoint) | 0b11100000;
|
w[0] = (0b00001111 & self->utf8Codepoint) | 0b11100000;
|
||||||
w += 3;
|
w += 3;
|
||||||
if (useTmp) {
|
if (useTmp) {
|
||||||
self->callbacks->on_string_data(self->data, tmp, 3, false);
|
self->callbacks->on_string_data(self->userdata, tmp, 3, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -743,7 +743,7 @@ inline PRESERVE_NONE WeaselJsonStatus t_hex3(Parser3 *self) {
|
|||||||
w[0] = (0b00000111 & self->utf8Codepoint) | 0b11110000;
|
w[0] = (0b00000111 & self->utf8Codepoint) | 0b11110000;
|
||||||
w += 4;
|
w += 4;
|
||||||
if (useTmp) {
|
if (useTmp) {
|
||||||
self->callbacks->on_string_data(self->data, tmp, 4, false);
|
self->callbacks->on_string_data(self->userdata, tmp, 4, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
self->pop();
|
self->pop();
|
||||||
@@ -918,7 +918,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_true(Parser3 *self) {
|
|||||||
if (*self->buf == 'e') {
|
if (*self->buf == 'e') {
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_true_literal(self->data);
|
self->callbacks->on_true_literal(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
@@ -929,7 +929,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_false(Parser3 *self) {
|
|||||||
if (*self->buf == 'e') {
|
if (*self->buf == 'e') {
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_false_literal(self->data);
|
self->callbacks->on_false_literal(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
@@ -940,7 +940,7 @@ inline PRESERVE_NONE WeaselJsonStatus n_null(Parser3 *self) {
|
|||||||
if (*self->buf == 'l') {
|
if (*self->buf == 'l') {
|
||||||
++self->buf;
|
++self->buf;
|
||||||
self->pop();
|
self->pop();
|
||||||
self->callbacks->on_null_literal(self->data);
|
self->callbacks->on_null_literal(self->userdata);
|
||||||
MUSTTAIL return Parser3::keepGoing(self);
|
MUSTTAIL return Parser3::keepGoing(self);
|
||||||
} else [[unlikely]] {
|
} else [[unlikely]] {
|
||||||
return WeaselJson_REJECT;
|
return WeaselJson_REJECT;
|
||||||
|
|||||||
Reference in New Issue
Block a user