98 lines
2.3 KiB
C
98 lines
2.3 KiB
C
|
||
#include <limits.h>
|
||
|
||
#include <debug.h>
|
||
|
||
#include <booleans/struct.h>
|
||
|
||
#include <string/new.h>
|
||
#include <string/free.h>
|
||
|
||
#include <builtin/numeric/add.h>
|
||
#include <builtin/numeric/subtract.h>
|
||
#include <builtin/numeric/multiply.h>
|
||
#include <builtin/numeric/divide.h>
|
||
|
||
#include <builtin/compare/eq.h>
|
||
#include <builtin/compare/gte.h>
|
||
#include <builtin/compare/lte.h>
|
||
#include <builtin/compare/gt.h>
|
||
#include <builtin/compare/lt.h>
|
||
#include <builtin/compare/neq.h>
|
||
|
||
#include <value/builtin_lambda/new.h>
|
||
#include <value/free.h>
|
||
|
||
#include "struct.h"
|
||
#include "declare.h"
|
||
#include "declare_builtins.h"
|
||
|
||
void environment_declare_builtins(
|
||
struct environment* this,
|
||
struct booleans* booleans)
|
||
{
|
||
ENTER;
|
||
|
||
#define DECLARE_BOOLEAN(name, value) \
|
||
{ \
|
||
struct string* string = new_string(name, UINT_MAX); \
|
||
\
|
||
environment_declare(this, string, value); \
|
||
\
|
||
free_string(string); \
|
||
}
|
||
|
||
DECLARE_BOOLEAN(L"true", booleans->true_value);
|
||
DECLARE_BOOLEAN(L"false", booleans->false_value);
|
||
|
||
#define DECLARE_BUILTIN(name, funcptr, num_of_param) \
|
||
{ \
|
||
struct string* string = new_string(name, UINT_MAX); \
|
||
\
|
||
struct value* value = new_builtin_lambda_value( \
|
||
/* name: */ string, \
|
||
/* function pointer: */ funcptr, \
|
||
/* number of parameters: */ num_of_param, \
|
||
/* value: */ NULL, \
|
||
/* prev: */ NULL); \
|
||
\
|
||
environment_declare(this, string, value); \
|
||
\
|
||
free_value(value); \
|
||
\
|
||
free_string(string); \
|
||
}
|
||
|
||
DECLARE_BUILTIN(L"+", builtin_numeric_add, 2);
|
||
DECLARE_BUILTIN(L"-", builtin_numeric_subtract, 2);
|
||
DECLARE_BUILTIN(L"−", builtin_numeric_subtract, 2);
|
||
DECLARE_BUILTIN(L"×", builtin_numeric_multiply, 2);
|
||
DECLARE_BUILTIN(L"÷", builtin_numeric_divide, 2);
|
||
|
||
DECLARE_BUILTIN(L"=", builtin_compare_eq, 2);
|
||
DECLARE_BUILTIN(L"≥", builtin_compare_gte, 2);
|
||
DECLARE_BUILTIN(L"≤", builtin_compare_lte, 2);
|
||
DECLARE_BUILTIN(L">", builtin_compare_gt, 2);
|
||
DECLARE_BUILTIN(L"<", builtin_compare_lt, 2);
|
||
DECLARE_BUILTIN(L"≠", builtin_compare_neq, 2);
|
||
|
||
// declare =
|
||
// declare ≥
|
||
// declare ≤
|
||
// declare ≮
|
||
// declare ≯
|
||
// declare ≰
|
||
// declare ≱
|
||
// declare ≠
|
||
|
||
EXIT;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|