lisp-take-1/builtins/core/lambda.c

72 lines
1.1 KiB
C

#include <assert.h>
#include <debug.h>
#include <value/struct.h>
#include <value/user_lambda/new.h>
#include "../defines/BUILTIN_PARAMETER_DECLARATION.h"
#include "lambda.h"
struct value* builtin_lambda(
BUILTIN_PARAMETER_DECLARATION)
{
ENTER;
if (arguments->kind != vk_list)
{
TODO;
exit(1);
}
struct list_value* arguments_lv = &arguments->subclass.list;
struct value* first = arguments_lv->first;
if (first->kind != vk_list && first->kind != vk_null)
{
TODO;
exit(1);
}
struct value* rest = arguments_lv->rest;
if (rest->kind != vk_list)
{
TODO;
exit(1);
}
struct value* second = rest->subclass.list.first;
if (rest->subclass.list.rest->kind != vk_null)
{
TODO;
exit(1);
}
struct value* result = new_user_lambda_value(
/* garbage collector: */ gc,
/* captured environment: */ environment,
/* parameters: */ first,
/* body: */ second);
EXIT;
return result;
}