commit 9878403b3312eb42f9a18b9cd15fb9badc49a410
parent 6a01925d467be41b6dbebc68dfd022b0955a7801
Author: Ed van Bruggen <edvb@uw.edu>
Date:   Sat, 12 Oct 2019 19:02:32 -0700
Error primitive to print message and return error
Diffstat:
| tisp.c |  |  | 20 | ++++++++++++++++++++ | 
1 file changed, 20 insertions(+), 0 deletions(-)
diff --git a/tisp.c b/tisp.c
@@ -1007,6 +1007,25 @@ prim_load(Env env, Val args)
 	return env->none;
 }
 
+/* display error message */
+static Val
+prim_error(Env env, Val args)
+{
+	Val v;
+	if (!(v = tisp_eval_list(env, args)))
+		return NULL;
+	tsp_arg_min(v, "error", 2);
+	tsp_arg_type(car(v), "error", SYMBOL);
+	fprintf(stderr, "tisp: error: %s: ", car(v)->v.s);
+	for (v = cdr(v); !nilp(v); v = cdr(v))
+		if (car(v)->t & STRING) /* don't print quotes around string */
+			fprintf(stderr, "%s", car(v)->v.s);
+		else
+			tisp_print(stderr, car(v));
+	fputc('\n', stderr);
+	return NULL;
+}
+
 /* list tisp version */
 static Val
 prim_version(Env env, Val args)
@@ -1053,6 +1072,7 @@ tisp_env_init(size_t cap)
 	tsp_env_fn(macro);
 	tsp_env_fn(define);
 	tsp_env_fn(load);
+	tsp_env_fn(error);
 	tsp_env_fn(version);
 
 	env->strs = hash_new(cap, NULL);