}
if (method == n) {
- njs_vm_error(vm, "unknown method \"%.*s\"",
- (int) method_name.length, method_name.start);
+ njs_vm_error(vm, "unknown method \"%V\"", &method_name);
return NJS_ERROR;
}
}
}
if (i == n) {
- njs_vm_error(ctx->vm, "unknown event \"%.*s\"", (int) event->length,
- event->start);
+ njs_vm_error(ctx->vm, "unknown event \"%V\"", event);
return NULL;
}
}
if (*event != NULL) {
- njs_vm_error(vm, "event handler \"%.*s\" is already set",
- (int) name.length, name.start);
+ njs_vm_error(vm, "event handler \"%V\" is already set", &name);
return NJS_ERROR;
}
void
-njs_error_new(njs_vm_t *vm, njs_value_type_t type, u_char *start, size_t size)
+njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+ u_char *start, size_t size)
{
nxt_int_t ret;
njs_value_t string;
error = njs_error_alloc(vm, type, NULL, &string);
if (nxt_fast_path(error != NULL)) {
- vm->retval.data.u.object = error;
- vm->retval.type = type;
- vm->retval.data.truth = 1;
+ dst->data.u.object = error;
+ dst->type = type;
+ dst->data.truth = 1;
}
}
void
-njs_error_fmt_new(njs_vm_t *vm, njs_value_type_t type, const char* fmt, ...)
+njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+ const char* fmt, ...)
{
va_list args;
u_char buf[NXT_MAX_ERROR_STR], *p;
va_end(args);
}
- njs_error_new(vm, type, buf, p - buf);
+ njs_error_new(vm, dst, type, buf, p - buf);
}
error = nxt_mp_alloc(vm->mem_pool, sizeof(njs_object_t));
if (nxt_slow_path(error == NULL)) {
- njs_memory_error(vm);
- return NULL;
+ goto memory_error;
}
nxt_lvlhsh_init(&error->hash);
prop = njs_object_prop_alloc(vm, &njs_error_name_string, name, 1);
if (nxt_slow_path(prop == NULL)) {
- return NULL;
+ goto memory_error;
}
lhq.value = prop;
prop = njs_object_prop_alloc(vm, &njs_error_message_string, message, 1);
if (nxt_slow_path(prop == NULL)) {
- return NULL;
+ goto memory_error;
}
prop->enumerable = 0;
}
return error;
+
+memory_error:
+
+ njs_memory_error(vm);
+
+ return NULL;
}
#define njs_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_ERROR, fmt, ##__VA_ARGS__)
#define njs_eval_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_EVAL_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_EVAL_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_internal_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_INTERNAL_ERROR, fmt, \
- ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_INTERNAL_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_range_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_RANGE_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_RANGE_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_reference_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_REF_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_REF_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_syntax_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_SYNTAX_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_SYNTAX_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_type_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_TYPE_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, NJS_OBJECT_TYPE_ERROR, fmt, \
+ ##__VA_ARGS__)
#define njs_uri_error(vm, fmt, ...) \
- njs_error_fmt_new(vm, NJS_OBJECT_URI_ERROR, fmt, ##__VA_ARGS__)
+ njs_error_fmt_new(vm, &vm->retval, 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_error_fmt_new(njs_vm_t *vm, njs_value_type_t type,
+void njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+ u_char *start, size_t size);
+void njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
const char* fmt, ...);
void njs_memory_error(njs_vm_t *vm);
p = nxt_sprintf(p, end, " in %uD", node->token_line);
}
- njs_error_new(vm, NJS_OBJECT_SYNTAX_ERROR, msg, p - msg);
+ njs_error_new(vm, &vm->retval, NJS_OBJECT_SYNTAX_ERROR, msg, p - msg);
}
p = nxt_sprintf(p, end, " in %uD", lexer->line);
}
- njs_error_new(vm, type, msg, p - msg);
+ njs_error_new(vm, &vm->retval, type, msg, p - msg);
}
void
njs_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
{
- size_t size;
- va_list args;
- nxt_int_t ret;
- njs_value_t string;
- njs_object_t *error;
- char buf[256];
+ va_list args;
+ u_char buf[NXT_MAX_ERROR_STR], *p;
+
+ p = buf;
if (fmt != NULL) {
va_start(args, fmt);
- size = vsnprintf(buf, sizeof(buf), fmt, args);
+ p = nxt_vsprintf(buf, buf + sizeof(buf), fmt, args);
va_end(args);
-
- } else {
- size = 0;
}
- ret = njs_string_new(vm, &string, (u_char *) buf, size, size);
- if (nxt_slow_path(ret != NXT_OK)) {
- goto memory_error;
- }
-
- error = njs_error_alloc(vm, NJS_OBJECT_ERROR, NULL, &string);
- if (nxt_slow_path(error == NULL)) {
- goto memory_error;
- }
-
- value->data.u.object = error;
- value->type = NJS_OBJECT_ERROR;
- value->data.truth = 1;
-
- return;
-
-memory_error:
-
- njs_memory_error_set(vm, value);
+ njs_error_new(vm, value, NJS_OBJECT_ERROR, buf, p - buf);
}