njs_vm_t *vm;
nxt_mem_cache_pool_t *pool;
nxt_uint_t depth;
- u_char *start;
- u_char *end;
+ const u_char *start;
+ const u_char *end;
} njs_json_parse_ctx_t;
} njs_json_stringify_t;
-static u_char *njs_json_parse_value(njs_json_parse_ctx_t *ctx,
- njs_value_t *value, u_char *p);
-static u_char *njs_json_parse_object(njs_json_parse_ctx_t *ctx,
- njs_value_t *value, u_char *p);
-static u_char *njs_json_parse_array(njs_json_parse_ctx_t *ctx,
- njs_value_t *value, u_char *p);
-static u_char *njs_json_parse_string(njs_json_parse_ctx_t *ctx,
- njs_value_t *value, u_char *p);
-static u_char *njs_json_parse_number(njs_json_parse_ctx_t *ctx,
- njs_value_t *value, u_char *p);
+static const u_char *njs_json_parse_value(njs_json_parse_ctx_t *ctx,
+ njs_value_t *value, const u_char *p);
+static const u_char *njs_json_parse_object(njs_json_parse_ctx_t *ctx,
+ njs_value_t *value, const u_char *p);
+static const u_char *njs_json_parse_array(njs_json_parse_ctx_t *ctx,
+ njs_value_t *value, const u_char *p);
+static const u_char *njs_json_parse_string(njs_json_parse_ctx_t *ctx,
+ njs_value_t *value, const u_char *p);
+static const u_char *njs_json_parse_number(njs_json_parse_ctx_t *ctx,
+ njs_value_t *value, const u_char *p);
nxt_inline uint32_t njs_json_unicode(const u_char *p);
-static u_char *njs_json_skip_space(u_char *start, u_char *end);
+static const u_char *njs_json_skip_space(const u_char *start,
+ const u_char *end);
static njs_ret_t njs_json_parse_continuation(njs_vm_t *vm,
njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
njs_json_parse_t *parse, njs_value_t *value);
static njs_json_state_t *njs_json_pop_parse_state(njs_json_parse_t *parse);
static void njs_json_parse_exception(njs_json_parse_ctx_t *ctx,
- const char* msg, u_char *pos);
+ const char* msg, const u_char *pos);
static njs_ret_t njs_json_stringify_continuation(njs_vm_t *vm,
njs_value_t *args, nxt_uint_t nargs, njs_index_t unused);
njs_json_parse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
njs_index_t unused)
{
- u_char *p, *end;
njs_value_t arg, *value, *wrapper;
+ const u_char *p, *end;
njs_json_parse_t *parse;
njs_string_prop_t string;
njs_json_parse_ctx_t ctx;
}
-static u_char *
-njs_json_parse_value(njs_json_parse_ctx_t *ctx, njs_value_t *value, u_char *p)
+static const u_char *
+njs_json_parse_value(njs_json_parse_ctx_t *ctx, njs_value_t *value,
+ const u_char *p)
{
switch (*p) {
case '{':
}
-static u_char *
-njs_json_parse_object(njs_json_parse_ctx_t *ctx, njs_value_t *value, u_char *p)
+static const u_char *
+njs_json_parse_object(njs_json_parse_ctx_t *ctx, njs_value_t *value,
+ const u_char *p)
{
nxt_int_t ret;
njs_object_t *object;
}
-static u_char *
-njs_json_parse_array(njs_json_parse_ctx_t *ctx, njs_value_t *value, u_char *p)
+static const u_char *
+njs_json_parse_array(njs_json_parse_ctx_t *ctx, njs_value_t *value,
+ const u_char *p)
{
nxt_int_t ret;
njs_array_t *array;
}
-static u_char *
-njs_json_parse_string(njs_json_parse_ctx_t *ctx, njs_value_t *value, u_char *p)
+static const u_char *
+njs_json_parse_string(njs_json_parse_ctx_t *ctx, njs_value_t *value,
+ const u_char *p)
{
- u_char *s, ch, *last, *start;
- size_t size, surplus;
- ssize_t length;
- uint32_t utf, utf_low;
- njs_ret_t ret;
+ u_char ch, *s, *dst;
+ size_t size, surplus;
+ ssize_t length;
+ uint32_t utf, utf_low;
+ njs_ret_t ret;
+ const u_char *start, *last;
enum {
sw_usual = 0,
if (surplus != 0) {
p = start;
- start = nxt_mem_cache_alloc(ctx->pool, size);
+ dst = nxt_mem_cache_alloc(ctx->pool, size);
if (nxt_slow_path(start == NULL)) {
njs_memory_error(ctx->vm);;
return NULL;
}
- s = start;
+ s = dst;
do {
ch = *p++;
} while (p != last);
- size = s - start;
+ size = s - dst;
+ start = dst;
}
length = nxt_utf8_length(start, size);
length = 0;
}
- ret = njs_string_create(ctx->vm, value, start, size, length);
+ ret = njs_string_create(ctx->vm, value, (u_char *) start, size, length);
if (nxt_slow_path(ret != NXT_OK)) {
njs_memory_error(ctx->vm);
return NULL;
}
-static u_char *
-njs_json_parse_number(njs_json_parse_ctx_t *ctx, njs_value_t *value, u_char *p)
+static const u_char *
+njs_json_parse_number(njs_json_parse_ctx_t *ctx, njs_value_t *value,
+ const u_char *p)
{
- u_char *start;
- double num;
- nxt_int_t sign;
+ double num;
+ nxt_int_t sign;
+ const u_char *start;
sign = 1;
}
-static u_char *
-njs_json_skip_space(u_char *start, u_char *end)
+static const u_char *
+njs_json_skip_space(const u_char *start, const u_char *end)
{
- u_char *p;
+ const u_char *p;
for (p = start; nxt_fast_path(p != end); p++) {
static void
njs_json_parse_exception(njs_json_parse_ctx_t *ctx, const char* msg,
- u_char *pos)
+ const u_char *pos)
{
ssize_t length;
uint32_t
-njs_value_to_index(njs_value_t *value)
+njs_value_to_index(const njs_value_t *value)
{
double num;
njs_array_t *array;
double
-njs_number_dec_parse(u_char **start, u_char *end)
+njs_number_dec_parse(const u_char **start, const u_char *end)
{
- u_char c, *e, *p;
- double num, frac, scale, exponent;
- nxt_bool_t minus;
+ u_char c;
+ double num, frac, scale, exponent;
+ nxt_bool_t minus;
+ const u_char *e, *p;
p = *start;
uint64_t
-njs_number_oct_parse(u_char **start, u_char *end)
+njs_number_oct_parse(const u_char **start, const u_char *end)
{
- u_char c, *p;
- uint64_t num;
+ u_char c;
+ uint64_t num;
+ const u_char *p;
p = *start;
uint64_t
-njs_number_hex_parse(u_char **start, u_char *end)
+njs_number_hex_parse(const u_char **start, const u_char *end)
{
- u_char c, *p;
- uint64_t num;
+ u_char c;
+ uint64_t num;
+ const u_char *p;
p = *start;
int64_t
-njs_number_radix_parse(u_char **start, u_char *end, uint8_t radix)
+njs_number_radix_parse(const u_char **start, const u_char *end, uint8_t radix)
{
- u_char *p;
- uint8_t d;
- int64_t num;
- uint64_t n;
+ uint8_t d;
+ int64_t num;
+ uint64_t n;
+ const u_char *p;
static const int8_t digits[256]
nxt_aligned(32) =
njs_index_t unused)
{
double num;
- u_char *p, *end;
int64_t n;
uint8_t radix;
nxt_str_t string;
nxt_bool_t minus, test_prefix;
+ const u_char *p, *end;
num = NAN;
#include <math.h>
-uint32_t njs_value_to_index(njs_value_t *value);
-double njs_number_dec_parse(u_char **start, u_char *end);
-uint64_t njs_number_oct_parse(u_char **start, u_char *end);
-uint64_t njs_number_hex_parse(u_char **start, u_char *end);
-int64_t njs_number_radix_parse(u_char **start, u_char *end, uint8_t radix);
+uint32_t njs_value_to_index(const njs_value_t *value);
+double njs_number_dec_parse(const u_char **start, const u_char *end);
+uint64_t njs_number_oct_parse(const u_char **start, const u_char *end);
+uint64_t njs_number_hex_parse(const u_char **start, const u_char *end);
+int64_t njs_number_radix_parse(const u_char **start, const u_char *end,
+ uint8_t radix);
njs_ret_t njs_number_to_string(njs_vm_t *vm, njs_value_t *string,
const njs_value_t *number);
size_t njs_num_to_buf(double num, u_char *buf, size_t size);