pic_errorf -> pic_error

This commit is contained in:
Yuichi Nishiwaki 2016-02-23 04:03:42 +09:00
parent 42d0ecc633
commit fae7ef0376
24 changed files with 112 additions and 111 deletions

View File

@ -18,7 +18,7 @@ pic_load_load(pic_state *pic)
fp = fopen(fn, "r");
if (fp == NULL) {
pic_errorf(pic, "load: could not open file %s", fn);
pic_error(pic, "load: could not open file", 1, pic_cstr_value(pic, fn));
}
port = pic_open_port(pic, xfopen_file(pic, fp, "r"));

View File

@ -194,7 +194,7 @@ pic_rl_read_history(pic_state *pic)
pic_get_args(pic, "z", &filename);
if(read_history(filename))
pic_errorf(pic, "cannot read history file : %s", filename);
pic_error(pic, "cannot read history file", 1, pic_cstr_value(pic, filename));
return pic_undef_value(pic);
}
@ -207,7 +207,7 @@ pic_rl_write_history(pic_state *pic)
pic_get_args(pic, "z", &filename);
if(write_history(filename))
pic_errorf(pic, "cannot write history file: %s", filename);
pic_error(pic, "cannot write history file", 1, pic_cstr_value(pic, filename));
return pic_undef_value(pic);
}
@ -235,7 +235,7 @@ pic_rl_history_expand(pic_state *pic)
status = history_expand(input, &result);
if(status == -1 || status == 2)
pic_errorf(pic, "%s\n", result);
pic_error(pic, result, 0);
return pic_cstr_value(pic, result);
}

View File

@ -57,7 +57,7 @@ pic_regexp_regexp(pic_state *pic)
regerror(err, &reg->reg, errbuf, sizeof errbuf);
regexp_dtor(pic, &reg->reg);
pic_errorf(pic, "regexp compilation error: %s", errbuf);
pic_error(pic, "regexp compilation error", 1, pic_cstr_value(pic, errbuf));
}
return pic_data_value(pic, reg, &regexp_type);

View File

@ -31,7 +31,7 @@ PIC_INLINE void
ensure_socket_is_open(pic_state *pic, struct pic_socket_t *sock)
{
if (sock != NULL && sock->fd == -1) {
pic_errorf(pic, "the socket is already closed");
pic_error(pic, "the socket is already closed", 0);
}
}
@ -87,9 +87,9 @@ pic_socket_make_socket(pic_state *pic)
} while (result == EAI_AGAIN);
if (result) {
if (result == EAI_SYSTEM) {
pic_errorf(pic, "%s", strerror(errno));
pic_error(pic, strerror(errno), 0);
}
pic_errorf(pic, "%s", gai_strerror(result));
pic_error(pic, gai_strerror(result), 0);
}
for (it = ai; it != NULL; it = it->ai_next) {
@ -129,7 +129,7 @@ pic_socket_make_socket(pic_state *pic)
freeaddrinfo(ai);
if (sock->fd == -1) {
pic_errorf(pic, "%s", strerror(errno));
pic_error(pic, strerror(errno), 0);
}
return pic_data_value(pic, sock, &socket_type);
@ -158,7 +158,7 @@ pic_socket_socket_accept(pic_state *pic)
} else if (errno == EAGAIN || errno == EWOULDBLOCK) {
continue;
} else {
pic_errorf(pic, "%s", strerror(errno));
pic_error(pic, strerror(errno), 0);
}
} else {
break;
@ -191,7 +191,7 @@ pic_socket_socket_send(pic_state *pic)
} else if (errno == EAGAIN || errno == EWOULDBLOCK) {
break;
} else {
pic_errorf(pic, "%s", strerror(errno));
pic_error(pic, strerror(errno), 0);
}
}
cursor += len;
@ -214,7 +214,7 @@ pic_socket_socket_recv(pic_state *pic)
pic_get_args(pic, "ui|i", &sock, &socket_type, &size, &flags);
if (size < 0) {
pic_errorf(pic, "size must not be negative");
pic_error(pic, "size must not be negative", 0);
}
ensure_socket_is_open(pic, sock);
@ -227,7 +227,7 @@ pic_socket_socket_recv(pic_state *pic)
} while (len < 0 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
if (len < 0) {
pic_errorf(pic, "%s", strerror(errno));
pic_error(pic, strerror(errno), 0);
}
return pic_blob_value(pic, buf, len);

View File

@ -56,7 +56,7 @@ pic_blob_bytevector(pic_state *pic)
pic_assert_type(pic, argv[i], int);
if (pic_int(pic, argv[i]) < 0 || pic_int(pic, argv[i]) > 255) {
pic_errorf(pic, "byte out of range");
pic_error(pic, "byte out of range", 0);
}
*data++ = (unsigned char)pic_int(pic, argv[i]);
@ -74,10 +74,10 @@ pic_blob_make_bytevector(pic_state *pic)
pic_get_args(pic, "i|i", &k, &b);
if (b < 0 || b > 255)
pic_errorf(pic, "byte out of range");
pic_error(pic, "byte out of range", 0);
if (k < 0) {
pic_errorf(pic, "make-bytevector: negative length given %d", k);
pic_error(pic, "make-bytevector: negative length given", 1, pic_int_value(pic, k));
}
blob = pic_blob_value(pic, 0, k);
@ -119,7 +119,7 @@ pic_blob_bytevector_u8_set(pic_state *pic)
pic_get_args(pic, "bii", &buf, &len, &k, &v);
if (v < 0 || v > 255)
pic_errorf(pic, "byte out of range");
pic_error(pic, "byte out of range", 0);
VALID_INDEX(pic, len, k);
@ -216,7 +216,7 @@ pic_blob_list_to_bytevector(pic_state *pic)
pic_assert_type(pic, e, int);
if (pic_int(pic, e) < 0 || pic_int(pic, e) > 255)
pic_errorf(pic, "byte out of range");
pic_error(pic, "byte out of range", 0);
*data++ = (unsigned char)pic_int(pic, e);
}

View File

@ -72,7 +72,7 @@ internal_equal_p(pic_state *pic, pic_value x, pic_value y, int depth, khash_t(m)
if (depth > 10) {
if (depth > 200) {
pic_errorf(pic, "Stack overflow in equal\n");
pic_error(pic, "stack overflow in equal", 0);
}
if (pic_pair_p(pic, x) || pic_vec_p(pic, x)) {
int ret;

View File

@ -3,6 +3,7 @@
*/
#include "picrin.h"
#include "picrin/extra.h"
static pic_value
pic_char_char_p(pic_state *pic)
@ -32,7 +33,7 @@ pic_char_integer_to_char(pic_state *pic)
pic_get_args(pic, "i", &i);
if (i < 0 || i > 255) {
pic_errorf(pic, "integer->char: integer out of char range: %d", i);
pic_error(pic, "integer->char: integer out of char range", 1, pic_int_value(pic, i));
}
return pic_char_value(pic, (char)i);
@ -49,15 +50,13 @@ pic_char_integer_to_char(pic_state *pic)
pic_get_args(pic, "cc*", &c, &d, &argc, &argv); \
\
if (! (c op d)) \
return pic_false_value(pic); \
\
for (i = 0; i < argc; ++i) { \
return pic_false_value(pic); \
\
for (i = 0; i < argc; ++i) { \
c = d; \
if (pic_char_p(pic, argv[i])) \
d = pic_char(pic, argv[i]); \
else \
pic_errorf(pic, #op ": char required"); \
\
pic_assert_type(pic, argv[i], char); \
d = pic_char(pic, argv[i]); \
\
if (! (c op d)) \
return pic_false_value(pic); \
} \

View File

@ -131,7 +131,7 @@ cont_call(pic_state *pic)
}
}
if (cc == NULL) {
pic_errorf(pic, "calling dead escape continuation");
pic_error(pic, "calling dead escape continuation", 0);
}
cont->retc = argc;

View File

@ -26,7 +26,7 @@ pic_dict_ref(pic_state *pic, pic_value dict, pic_value key)
it = kh_get(dict, h, pic_sym_ptr(pic, key));
if (it == kh_end(h)) {
pic_errorf(pic, "element not found for a key: ~s", key);
pic_error(pic, "element not found for given key", 1, key);
}
return kh_val(h, it);
}
@ -64,7 +64,7 @@ pic_dict_del(pic_state *pic, pic_value dict, pic_value key)
it = kh_get(dict, h, pic_sym_ptr(pic, key));
if (it == kh_end(h)) {
pic_errorf(pic, "no slot named ~s found in dictionary", key);
pic_error(pic, "element not found for given key", 1, key);
}
kh_del(dict, h, it);
}

View File

@ -37,19 +37,16 @@ pic_warnf(pic_state *pic, const char *fmt, ...)
}
void
pic_errorf(pic_state *pic, const char *fmt, ...)
pic_error(pic_state *pic, const char *msg, int n, ...)
{
va_list ap;
const char *msg;
pic_value err;
pic_value irrs;
va_start(ap, fmt);
err = pic_vstrf_value(pic, fmt, ap);
va_start(ap, n);
irrs = pic_vlist(pic, n, ap);
va_end(ap);
msg = pic_str(pic, err);
pic_raise(pic, pic_make_error(pic, "", msg, pic_nil_value(pic)));
pic_raise(pic, pic_make_error(pic, "", msg, irrs));
}
void
@ -151,7 +148,7 @@ pic_raise(pic_state *pic, pic_value err)
pic_pop_handler(pic);
pic_errorf(pic, "error handler returned with ~s on error ~s", val, err);
pic_error(pic, "error handler returned", 2, val, err);
}
static pic_value

View File

@ -159,7 +159,7 @@ expand_defmacro(pic_state *pic, pic_value expr, pic_value env)
val = pic_call(pic, pic_compile(pic, pic_expand(pic, pic_list_ref(pic, expr, 2), env)), 0);
if (! pic_proc_p(pic, val)) {
pic_errorf(pic, "macro definition \"~s\" evaluates to non-procedure object", pic_list_ref(pic, expr, 1));
pic_error(pic, "macro definition evaluates to non-procedure object", 1, pic_list_ref(pic, expr, 1));
}
define_macro(pic, uid, val);
@ -179,7 +179,7 @@ expand_node(pic_state *pic, pic_value expr, pic_value env, pic_value deferred)
pic_value mac;
if (! pic_list_p(pic, expr)) {
pic_errorf(pic, "cannot expand improper list: ~s", expr);
pic_error(pic, "cannot expand improper list", 1, expr);
}
if (pic_id_p(pic, pic_car(pic, expr))) {
@ -516,7 +516,7 @@ analyze_node(pic_state *pic, analyze_scope *scope, pic_value obj)
pic_value proc;
if (! pic_list_p(pic, obj)) {
pic_errorf(pic, "invalid expression given: ~s", obj);
pic_error(pic, "invalid expression given", 1, obj);
}
proc = pic_list_ref(pic, obj, 0);
@ -1023,7 +1023,7 @@ codegen(pic_state *pic, codegen_context *cxt, pic_value obj, bool tailpos)
codegen_call(pic, cxt, obj, tailpos);
}
else {
pic_errorf(pic, "codegen: unknown AST type ~s", obj);
pic_error(pic, "codegen: unknown AST type", 1, obj);
}
}

View File

@ -100,7 +100,7 @@ typedef void (*pic_panicf)(pic_state *, const char *msg);
pic_panicf pic_atpanic(pic_state *, pic_panicf f);
PIC_NORETURN void pic_panic(pic_state *, const char *msg);
PIC_NORETURN void pic_errorf(pic_state *, const char *fmt, ...);
PIC_NORETURN void pic_error(pic_state *, const char *msg, int n, ...);
PIC_NORETURN void pic_raise(pic_state *, pic_value v);
pic_value pic_make_error(pic_state *, const char *type, const char *msg, pic_value irrs);

View File

@ -59,9 +59,9 @@ pic_value pic_fdisplay(pic_state *, pic_value, xFILE *);
#define pic_push(pic, item, place) (place = pic_cons(pic, item, place))
#define pic_pop(pic, place) (place = pic_cdr(pic, place))
#define pic_assert_type(pic, v, type) do { \
if (! pic_##type##_p(pic, v)) \
pic_errorf(pic, "expected " #type ", but got ~s", v); \
#define pic_assert_type(pic, v, type) do { \
if (! pic_##type##_p(pic, v)) \
pic_error(pic, #type " required", 1, v); \
} while (0)
#define pic_void(exec) pic_void_(PIC_GENSYM(ai), exec)

View File

@ -159,16 +159,16 @@ pic_value pic_obj_value(void *ptr);
struct object *pic_obj_alloc(pic_state *, size_t, int type);
#define VALID_INDEX(pic, len, i) do { \
if (i < 0 || len <= i) pic_errorf(pic, "index out of range: %d", i); \
if (i < 0 || len <= i) pic_error(pic, "index out of range", 1, pic_int_value(pic, i)); \
} while (0)
#define VALID_RANGE(pic, len, s, e) do { \
if (s < 0 || len < s) pic_errorf(pic, "invalid start index: %d", s); \
if (e < s || len < e) pic_errorf(pic, "invalid end index: %d", e); \
if (s < 0 || len < s) pic_error(pic, "invalid start index", 1, pic_int_value(pic, s)); \
if (e < s || len < e) pic_error(pic, "invalid end index", 1, pic_int_value(pic, e)); \
} while (0)
#define VALID_ATRANGE(pic, tolen, at, fromlen, s, e) do { \
VALID_INDEX(pic, tolen, at); \
VALID_RANGE(pic, fromlen, s, e); \
if (tolen - at < e - s) pic_errorf(pic, "invalid range"); \
#define VALID_ATRANGE(pic, tolen, at, fromlen, s, e) do { \
VALID_INDEX(pic, tolen, at); \
VALID_RANGE(pic, fromlen, s, e); \
if (tolen - at < e - s) pic_error(pic, "invalid range", 0); \
} while (0)
pic_value pic_make_identifier(pic_state *, pic_value id, pic_value env);

View File

@ -127,7 +127,7 @@ get_library(pic_state *pic, const char *lib)
struct lib *libp;
if ((libp = get_library_opt(pic, lib)) == NULL) {
pic_errorf(pic, "library not found: %s", lib);
pic_error(pic, "library not found", 1, pic_cstr_value(pic, lib));
}
return libp;
}
@ -175,7 +175,7 @@ pic_make_library(pic_state *pic, const char *lib)
it = kh_put(ltable, h, pic_str(pic, name), &ret);
if (ret == 0) { /* if exists */
pic_errorf(pic, "library name already in use: %s", lib);
pic_error(pic, "library name already in use", pic_cstr_value(pic, lib));
}
kh_val(h, it).name = pic_str_ptr(pic, name);
@ -223,7 +223,7 @@ pic_import(pic_state *pic, const char *lib)
while (pic_dict_next(pic, pic_obj_value(libp->exports), &it, &name, &realname)) {
uid = pic_find_identifier(pic, realname, pic_obj_value(libp->env));
if (! pic_weak_has(pic, pic->globals, uid) && ! pic_weak_has(pic, pic->macros, uid)) {
pic_errorf(pic, "attempted to export undefined variable '~s'", realname);
pic_error(pic, "attempted to export undefined variable", 1, realname);
}
pic_put_identifier(pic, name, uid, pic_obj_value(pic->lib->env));
}
@ -292,14 +292,14 @@ pic_lib_library_import(pic_state *pic)
libp = get_library(pic, lib);
if (! pic_dict_has(pic, pic_obj_value(libp->exports), name)) {
pic_errorf(pic, "library-import: variable is not exported '~s'", name);
pic_error(pic, "library-import: variable is not exported", 1, name);
} else {
realname = pic_dict_ref(pic, pic_obj_value(libp->exports), name);
}
uid = pic_find_identifier(pic, realname, pic_obj_value(libp->env));
if (! pic_weak_has(pic, pic->globals, uid) && ! pic_weak_has(pic, pic->macros, uid)) {
pic_errorf(pic, "attempted to export undefined variable '~s'", realname);
pic_error(pic, "attempted to export undefined variable", 1, realname);
}
pic_put_identifier(pic, alias, uid, pic_obj_value(pic->lib->env));

View File

@ -59,7 +59,6 @@ pic_number_exact(pic_state *pic)
pic_value \
name(pic_state *pic, pic_value a, pic_value b) \
{ \
PIC_NORETURN void pic_errorf(pic_state *, const char *, ...); \
double f; \
if (pic_int_p(pic, a) && pic_int_p(pic, b)) { \
f = (double)pic_int(pic, a) op (double)pic_int(pic, b); \
@ -73,7 +72,7 @@ pic_number_exact(pic_state *pic)
} else if (pic_float_p(pic, a) && pic_int_p(pic, b)) { \
return pic_float_value(pic, pic_float(pic, a) op pic_int(pic, b)); \
} else { \
pic_errorf(pic, #name ": non-number operand given"); \
pic_error(pic, #name ": non-number operand given", 0); \
} \
PIC_UNREACHABLE(); \
}
@ -87,7 +86,6 @@ pic_define_aop(pic_div, /, f == (int)f)
bool \
name(pic_state *pic, pic_value a, pic_value b) \
{ \
PIC_NORETURN void pic_errorf(pic_state *, const char *, ...); \
if (pic_int_p(pic, a) && pic_int_p(pic, b)) { \
return pic_int(pic, a) op pic_int(pic, b); \
} else if (pic_float_p(pic, a) && pic_float_p(pic, b)) { \
@ -97,7 +95,7 @@ pic_define_aop(pic_div, /, f == (int)f)
} else if (pic_float_p(pic, a) && pic_int_p(pic, b)) { \
return pic_float(pic, a) op pic_int(pic, b); \
} else { \
pic_errorf(pic, #name ": non-number operand given"); \
pic_error(pic, #name ": non-number operand given", 0); \
} \
PIC_UNREACHABLE(); \
}
@ -165,10 +163,10 @@ DEFINE_AOP(mul, argv[0], do {
return pic_int_value(pic, 1);
} while (0))
DEFINE_AOP(sub, pic_sub(pic, pic_int_value(pic, 0), argv[0]), do {
pic_errorf(pic, "-: at least one argument required");
pic_error(pic, "-: at least one argument required", 0);
} while (0))
DEFINE_AOP(div, pic_div(pic, pic_int_value(pic, 1), argv[0]), do {
pic_errorf(pic, "/: at least one argument required");
pic_error(pic, "/: at least one argument required", 0);
} while (0))
static int
@ -224,7 +222,7 @@ pic_number_number_to_string(pic_state *pic)
pic_get_args(pic, "F|i", &f, &e, &radix);
if (radix < 2 || radix > 36) {
pic_errorf(pic, "number->string: invalid radix %d (between 2 and 36, inclusive)", radix);
pic_error(pic, "number->string: invalid radix (between 2 and 36, inclusive)", 1, pic_int_value(pic, radix));
}
if (e) {

View File

@ -22,7 +22,7 @@ pic_value
pic_car(pic_state *pic, pic_value obj)
{
if (! pic_pair_p(pic, obj)) {
pic_errorf(pic, "car: pair required, but got ~s", obj);
pic_error(pic, "car: pair required", 1, obj);
}
return pic_pair_ptr(pic, obj)->car;
}
@ -31,7 +31,7 @@ pic_value
pic_cdr(pic_state *pic, pic_value obj)
{
if (! pic_pair_p(pic, obj)) {
pic_errorf(pic, "cdr: pair required, but got ~s", obj);
pic_error(pic, "cdr: pair required", 1, obj);
}
return pic_pair_ptr(pic, obj)->cdr;
}
@ -40,7 +40,7 @@ void
pic_set_car(pic_state *pic, pic_value obj, pic_value val)
{
if (! pic_pair_p(pic, obj)) {
pic_errorf(pic, "pair required");
pic_error(pic, "pair required", 0);
}
pic_pair_ptr(pic, obj)->car = val;
}
@ -49,7 +49,7 @@ void
pic_set_cdr(pic_state *pic, pic_value obj, pic_value val)
{
if (! pic_pair_p(pic, obj)) {
pic_errorf(pic, "pair required");
pic_error(pic, "pair required", 0);
}
pic_pair_ptr(pic, obj)->cdr = val;
}
@ -171,15 +171,10 @@ pic_length(pic_state *pic, pic_value obj)
{
int c = 0;
if (! pic_list_p(pic, obj)) {
pic_errorf(pic, "length: expected list, but got ~s", obj);
}
while (! pic_nil_p(pic, obj)) {
obj = pic_cdr(pic, obj);
++c;
}
return c;
}
@ -477,7 +472,7 @@ pic_pair_map(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &args);
if (argc == 0)
pic_errorf(pic, "map: wrong number of arguments (1 for at least 2)");
pic_error(pic, "map: wrong number of arguments (1 for at least 2)", 0);
arg_list = pic_alloca(pic, sizeof(pic_value) * argc);

View File

@ -36,7 +36,7 @@ pic_close_port(pic_state *pic, pic_value port)
return;
}
if (xfclose(pic, file) == EOF) {
pic_errorf(pic, "close-port: failure");
pic_error(pic, "close-port: failure", 0);
}
}
@ -123,13 +123,13 @@ pic_port_close_port(pic_state *pic)
if ((pic_fileno(pic, port)->flag & (flags)) != (flags)) { \
switch (flags) { \
case X_WRITE: \
pic_errorf(pic, caller ": expected output port"); \
pic_error(pic, caller ": output port required", 0); \
case X_READ: \
pic_errorf(pic, caller ": expected input port"); \
pic_error(pic, caller ": input port required", 0); \
} \
} \
if (pic_fileno(pic, port)->flag == 0) { \
pic_errorf(pic, caller ": expected open port"); \
pic_error(pic, caller ": open port required", 0); \
} \
} while (0)
@ -164,7 +164,7 @@ pic_port_get_output_bytevector(pic_state *pic)
assert_port_profile(port, X_WRITE, "get-output-bytevector");
if (xfget_buf(pic, pic_fileno(pic, port), &buf, &len) < 0) {
pic_errorf(pic, "port was not created by open-output-bytevector");
pic_error(pic, "port was not created by open-output-bytevector", 0);
}
return pic_blob_value(pic, (unsigned char *)buf, len);
}

View File

@ -10,6 +10,16 @@
#define MIN(x,y) ((x) < (y) ? (x) : (y))
PIC_NORETURN static void
arg_error(pic_state *pic, int actual, bool varg, int expected)
{
const char *msg;
msg = pic_str(pic, pic_strf_value(pic, "wrong number of arguments (%d for %s%d)", actual, (varg ? "at least " : ""), expected));
pic_error(pic, msg, 0);
}
#define GET_OPERAND(pic,n) ((pic)->ci->fp[(n)])
/**
@ -80,7 +90,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
}
if (argc < paramc || (paramc + optc < argc && ! rest)) {
pic_errorf(pic, "pic_get_args: wrong number of arguments (%d for %s%d)", argc, rest? "at least " : "", paramc);
arg_error(pic, argc, rest, paramc);
}
va_start(ap, format);
@ -121,7 +131,9 @@ pic_get_args(pic_state *pic, const char *format, ...)
*data = pic_data(pic, v);
}
else {
pic_errorf(pic, "pic_get_args: expected data type \"%s\", but got ~s", type->type_name, v);
const char *msg;
msg = pic_str(pic, pic_strf_value(pic, "pic_get_args: data type \"%s\" required", type->type_name));
pic_error(pic, msg, 1, v);
}
break;
}
@ -139,7 +151,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
if (buf) *buf = tmp;
}
else {
pic_errorf(pic, "pic_get_args: expected bytevector, but got ~s", v);
pic_error(pic, "pic_get_args: bytevector required", 1, v);
}
break;
}
@ -155,16 +167,16 @@ pic_get_args(pic_state *pic, const char *format, ...)
\
v = GET_OPERAND(pic, i); \
switch (pic_type(pic, v)) { \
case PIC_TYPE_FLOAT: \
case PIC_TYPE_FLOAT: \
*n = pic_float(pic, v); \
*e = false; \
break; \
case PIC_TYPE_INT: \
case PIC_TYPE_INT: \
*n = pic_int(pic, v); \
*e = true; \
break; \
default: \
pic_errorf(pic, "pic_get_args: expected float or int, but got ~s", v); \
pic_error(pic, "pic_get_args: float or int required", 1, v); \
} \
break; \
}
@ -183,7 +195,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
*ptr = conv; \
} \
else { \
pic_errorf(pic, "pic_get_args: expected " #type ", but got ~s", v); \
pic_error(pic, "pic_get_args: " #type " required", 1, v); \
} \
break; \
}
@ -202,7 +214,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
OBJ_CASE('r', rec)
default:
pic_errorf(pic, "pic_get_args: invalid argument specifier '%c' given", c);
pic_error(pic, "pic_get_args: invalid argument specifier given", 1, pic_char_value(pic, c));
}
if (format[1] == '+') {
@ -232,11 +244,11 @@ vm_gref(pic_state *pic, pic_value uid)
pic_value val;
if (! pic_weak_has(pic, pic->globals, uid)) {
pic_errorf(pic, "undefined variable ~s", uid);
pic_error(pic, "undefined variable", 1, uid);
}
val = pic_weak_ref(pic, pic->globals, uid);;
if (pic_invalid_p(pic, val)) {
pic_errorf(pic, "uninitialized global variable: ~s", uid);
pic_error(pic, "uninitialized global variable", 1, uid);
}
return val;
}
@ -245,7 +257,7 @@ static void
vm_gset(pic_state *pic, pic_value uid, pic_value value)
{
if (! pic_weak_has(pic, pic->globals, uid)) {
pic_errorf(pic, "undefined variable ~s", uid);
pic_error(pic, "undefined variable", 1, uid);
}
pic_weak_set(pic, pic->globals, uid, value);
}
@ -488,7 +500,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
L_CALL:
x = pic->sp[-c.a];
if (! pic_proc_p(pic, x)) {
pic_errorf(pic, "invalid application: ~s", x);
pic_error(pic, "invalid application", 1, x);
}
proc = pic_proc_ptr(pic, x);
@ -521,7 +533,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
ci->irep = irep;
if (ci->argc != irep->argc) {
if (! (irep->varg && ci->argc >= irep->argc)) {
pic_errorf(pic, "wrong number of arguments (%d for %s%d)", ci->argc - 1, (irep->varg ? "at least " : ""), irep->argc - 1);
arg_error(pic, ci->argc - 1, irep->varg, irep->argc - 1);
}
}
/* prepare rest args */
@ -909,7 +921,7 @@ pic_closure_ref(pic_state *pic, int n)
assert(pic_func_p(self));
if (n < 0 || pic_proc_ptr(pic, self)->u.f.localc <= n) {
pic_errorf(pic, "pic_closure_ref: index out of range (%d)", n);
pic_error(pic, "pic_closure_ref: index out of range", 1, pic_int_value(pic, n));
}
return pic_proc_ptr(pic, self)->locals[n];
}
@ -922,7 +934,7 @@ pic_closure_set(pic_state *pic, int n, pic_value v)
assert(pic_func_p(self));
if (n < 0 || pic_proc_ptr(pic, self)->u.f.localc <= n) {
pic_errorf(pic, "pic_closure_ref: index out of range (%d)", n);
pic_error(pic, "pic_closure_ref: index out of range", 1, pic_int_value(pic, n));
}
pic_proc_ptr(pic, self)->locals[n] = v;
}
@ -1019,7 +1031,7 @@ pic_proc_apply(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &args);
if (argc == 0) {
pic_errorf(pic, "apply: wrong number of arguments");
pic_error(pic, "apply: wrong number of arguments", 0);
}
n = argc - 1 + pic_length(pic, args[argc - 1]);

View File

@ -276,7 +276,7 @@ pic_str_ref(pic_state *pic, pic_value str, int i)
c = rope_at(pic_str_ptr(pic, str)->rope, i);
if (c == -1) {
pic_errorf(pic, "index out of range %d", i);
pic_error(pic, "index out of range", 1, pic_int_value(pic, i));
}
return (char)c;
}
@ -453,7 +453,7 @@ pic_str_make_string(pic_state *pic)
pic_get_args(pic, "i|c", &len, &c);
if (len < 0) {
pic_errorf(pic, "make-string: negative length given %d", len);
pic_error(pic, "make-string: negative length given", 1, pic_int_value(pic, len));
}
buf = pic_alloca(pic, len);
@ -647,7 +647,7 @@ pic_str_string_map(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &argv);
if (argc == 0) {
pic_errorf(pic, "string-map: one or more strings expected, but got zero");
pic_error(pic, "string-map: one or more strings expected, but got zero", 0);
}
len = INT_MAX;
@ -684,7 +684,7 @@ pic_str_string_for_each(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &argv);
if (argc == 0) {
pic_errorf(pic, "string-map: one or more strings expected, but got zero");
pic_error(pic, "string-map: one or more strings expected, but got zero", 0);
}
len = INT_MAX;

View File

@ -146,7 +146,7 @@ pic_symbol_identifier_base(pic_state *pic)
pic_assert_type(pic, id, id);
if (pic_sym_p(pic, id)) {
pic_errorf(pic, "expected non-symbol identifier, but got symbol ~s", id);
pic_error(pic, "non-symbol identifier required", 1, id);
}
return pic_obj_value(pic_id_ptr(pic, id)->u.id);
@ -162,7 +162,7 @@ pic_symbol_identifier_environment(pic_state *pic)
pic_assert_type(pic, id, id);
if (pic_sym_p(pic, id)) {
pic_errorf(pic, "expected non-symbol identifier, but got symbol ~s", id);
pic_error(pic, "non-symbol identifier required", 1, id);
}
return pic_obj_value(pic_id_ptr(pic, id)->env);

View File

@ -256,6 +256,6 @@ pic_typename(pic_state *pic, int type)
case PIC_TYPE_CP:
return "checkpoint";
default:
pic_errorf(pic, "pic_typename: invalid type given %d", type);
pic_error(pic, "pic_typename: invalid type given", 1, pic_int_value(pic, type));
}
}

View File

@ -73,7 +73,7 @@ pic_vec_make_vector(pic_state *pic)
n = pic_get_args(pic, "i|o", &k, &init);
if (k < 0) {
pic_errorf(pic, "make-vector: negative length given %d", k);
pic_error(pic, "make-vector: negative length given", 1, pic_int_value(pic, k));
}
vec = pic_make_vec(pic, k, NULL);
@ -231,7 +231,7 @@ pic_vec_vector_map(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &argv);
if (argc == 0) {
pic_errorf(pic, "vector-map: wrong number of arguments (1 for at least 2)");
pic_error(pic, "vector-map: wrong number of arguments (1 for at least 2)", 0);
}
len = INT_MAX;
@ -265,7 +265,7 @@ pic_vec_vector_for_each(pic_state *pic)
pic_get_args(pic, "l*", &proc, &argc, &argv);
if (argc == 0) {
pic_errorf(pic, "vector-for-each: wrong number of arguments (1 for at least 2)");
pic_error(pic, "vector-for-each: wrong number of arguments (1 for at least 2)", 0);
}
len = INT_MAX;

View File

@ -27,7 +27,7 @@ pic_weak_ref(pic_state *pic, pic_value weak, pic_value key)
it = kh_get(weak, h, pic_obj_ptr(key));
if (it == kh_end(h)) {
pic_errorf(pic, "element not found for a key: ~s", key);
pic_error(pic, "element not found for given key", 1, key);
}
return kh_val(h, it);
}
@ -59,7 +59,7 @@ pic_weak_del(pic_state *pic, pic_value weak, pic_value key)
it = kh_get(weak, h, pic_obj_ptr(key));
if (it == kh_end(h)) {
pic_errorf(pic, "no slot named ~s found in ephemeron", key);
pic_error(pic, "element not found for given key", 1, key);
}
kh_del(weak, h, it);
}
@ -74,7 +74,7 @@ weak_call(pic_state *pic)
n = pic_get_args(pic, "o|o", &key, &val);
if (! pic_obj_p(pic, key)) {
pic_errorf(pic, "attempted to set a non-object key '~s' in an ephemeron", key);
pic_error(pic, "attempted to set a non-object key", 1, key);
}
weak = pic_closure_ref(pic, 0);