From ed1f406102738812fafa5e49ee131fe06c177687 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 13 Oct 2021 16:44:17 +0200 Subject: Add a lot of primitive types --- src/bootstrap/objects.c | 103 ------------------------------------------------ 1 file changed, 103 deletions(-) (limited to 'src/bootstrap/objects.c') diff --git a/src/bootstrap/objects.c b/src/bootstrap/objects.c index 30827f1..0361ae8 100644 --- a/src/bootstrap/objects.c +++ b/src/bootstrap/objects.c @@ -197,106 +197,3 @@ display(Object *root) { } return; } - -#include "environment.c" - -Object * -eval(Environment* env, Object *root) { - switch (root->type) { - case OBJ_TYPE_FIXNUM: - case OBJ_TYPE_BOOL: - case OBJ_TYPE_NIL: - case OBJ_TYPE_STRING: { - return root; - } break; - case OBJ_TYPE_SYMBOL: { - Object *val = env_lookup(env, root); - if (val == obj_err) { - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_SYMBOL_NOT_FOUND, - }); - return obj_err; - } - return val; - } break; - case OBJ_TYPE_PAIR: { - if (root->car->type == OBJ_TYPE_SYMBOL) { - Object *val = env_lookup(env, root->car); - if (val == obj_err) { - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_SYMBOL_NOT_FOUND, - }); - return obj_err; - } - if (val->type == OBJ_TYPE_PROCEDURE) { - return val->proc(env, root->cdr); - } - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_OBJ_NOT_CALLABLE, - }); - return obj_err; - } - } break; - default: { - break; - } break; - } - - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_UNKNOWN_OBJ_TYPE, - }); - return obj_err; -} - -Object * -proc_quote(Environment *env, Object *obj) { - (void)env; - return obj->car; -} - -Object * -proc_sum(Environment *env, Object *obj) { - // First argument. - if (obj == obj_nil) { - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_NOT_ENOUGH_ARGS, - }); - return obj_err; - } - Object *car = eval(env, obj->car); - if (car == obj_err) { - return obj_err; - } - if (car->type != OBJ_TYPE_FIXNUM) { - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_WRONG_ARG_TYPE, - }); - return obj_err; - } - - // Traverse the list. - obj = obj->cdr; - ssize_t tot = car->fixnum; - while (obj->type == OBJ_TYPE_PAIR) { - Object *car = eval(env, obj->car); - if (car == obj_err) { - return obj_err; - } - if (car->type != OBJ_TYPE_FIXNUM) { - error_push((Error){ - .type = ERR_TYPE_RUNTIME, - .value = ERR_WRONG_ARG_TYPE, - }); - return obj_err; - } - tot += car->fixnum; - obj = obj->cdr; - } - return make_fixnum(tot); -} -- cgit v1.2.1