From: hongzhidao Date: Sun, 3 Feb 2019 21:26:42 +0000 (+0800) Subject: Improved exception creation. X-Git-Tag: 0.2.8~48 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=d0054e009f3b3f1996260ae52f163fbe5e63c47d;p=njs.git Improved exception creation. --- diff --git a/njs/njs.c b/njs/njs.c index 2085241a..c7d4d4d0 100644 --- a/njs/njs.c +++ b/njs/njs.c @@ -652,7 +652,7 @@ njs_vm_retval_set(njs_vm_t *vm, const njs_value_t *value) nxt_noinline void njs_vm_memory_error(njs_vm_t *vm) { - njs_set_memory_error(vm, &vm->retval); + njs_memory_error_set(vm, &vm->retval); } diff --git a/njs/njs_error.c b/njs/njs_error.c index 7459f197..4f0259d6 100644 --- a/njs/njs_error.c +++ b/njs/njs_error.c @@ -15,33 +15,19 @@ static const njs_value_t njs_error_name_string = njs_string("name"); void -njs_exception_error_create(njs_vm_t *vm, njs_value_type_t type, - const char* fmt, ...) +njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start, size_t size) { - size_t size; - va_list args; nxt_int_t ret; njs_value_t string; njs_object_t *error; - u_char buf[256], *p; - - if (fmt != NULL) { - va_start(args, fmt); - p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args); - va_end(args); - size = p - buf; - - } else { - size = 0; - } - - ret = njs_string_new(vm, &string, (const u_char *) buf, size, size); + ret = njs_string_new(vm, &string, start, size, size); if (nxt_slow_path(ret != NXT_OK)) { return; } error = njs_error_alloc(vm, type, NULL, &string); + if (nxt_fast_path(error != NULL)) { vm->retval.data.u.object = error; vm->retval.type = type; @@ -50,6 +36,25 @@ njs_exception_error_create(njs_vm_t *vm, njs_value_type_t type, } +void +njs_exception_error_create(njs_vm_t *vm, njs_value_type_t type, + const char* fmt, ...) +{ + va_list args; + u_char buf[256], *p; + + p = buf; + + if (fmt != NULL) { + va_start(args, fmt); + p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args); + va_end(args); + } + + njs_error_new(vm, type, buf, p - buf); +} + + nxt_noinline njs_object_t * njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name, const njs_value_t *message) @@ -467,7 +472,7 @@ const njs_object_init_t njs_uri_error_constructor_init = { void -njs_set_memory_error(njs_vm_t *vm, njs_value_t *value) +njs_memory_error_set(njs_vm_t *vm, njs_value_t *value) { njs_object_t *object; njs_object_prototype_t *prototypes; @@ -497,7 +502,7 @@ njs_set_memory_error(njs_vm_t *vm, njs_value_t *value) void njs_memory_error(njs_vm_t *vm) { - njs_set_memory_error(vm, &vm->retval); + njs_memory_error_set(vm, &vm->retval); } @@ -505,7 +510,7 @@ njs_ret_t njs_memory_error_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, njs_index_t unused) { - njs_set_memory_error(vm, &vm->retval); + njs_memory_error_set(vm, &vm->retval); return NXT_OK; } diff --git a/njs/njs_error.h b/njs/njs_error.h index 0cd724fa..540eea21 100644 --- a/njs/njs_error.h +++ b/njs/njs_error.h @@ -26,11 +26,13 @@ #define njs_uri_error(vm, fmt, ...) \ njs_exception_error_create(vm, NJS_OBJECT_URI_ERROR, fmt, ##__VA_ARGS__) +void njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start, + size_t size); void njs_exception_error_create(njs_vm_t *vm, njs_value_type_t type, const char* fmt, ...); void njs_memory_error(njs_vm_t *vm); -void njs_set_memory_error(njs_vm_t *vm, njs_value_t *value); +void njs_memory_error_set(njs_vm_t *vm, njs_value_t *value); njs_object_t *njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name, const njs_value_t *message); diff --git a/njs/njs_vm.c b/njs/njs_vm.c index 083a34bf..deb4fbd6 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -3358,7 +3358,7 @@ njs_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...) memory_error: - njs_set_memory_error(vm, value); + njs_memory_error_set(vm, value); }