Add boolean operations
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Dominic Grimm 2023-08-06 11:41:57 +02:00
parent 03a9b46e33
commit fa0f92a8ec
4 changed files with 116 additions and 0 deletions

View file

@ -40,6 +40,8 @@ extern void hf__interpreter__free(struct hf__interpreter *interpreter);
typedef struct hf__result (*hf__interpreter__word_func_t)(
struct hf__interpreter *const, const struct hf__node *const);
extern int hf__interpreter__bool_to_flag(const bool x);
extern const hf__interpreter__word_func_t
HF__INTERPRETER__WORD_FUNCTION[__HF__NODE_TYPE__N];

View file

@ -13,6 +13,13 @@ enum HF__KEYWORD {
HF__KEYWORD__ADD,
HF__KEYWORD__SUB,
HF__KEYWORD__EQ,
HF__KEYWORD__LT,
HF__KEYWORD__GT,
HF__KEYWORD__AND,
HF__KEYWORD__OR,
HF__KEYWORD__INVERT,
HF__KEYWORD__PERIOD,
HF__KEYWORD__EMIT,
HF__KEYWORD__SPACE,
@ -34,6 +41,10 @@ static const char *const HF__KEYWORD_STR[__HF__KEYWORD__N] = {
[HF__KEYWORD__ADD] = "+", [HF__KEYWORD__SUB] = "-",
[HF__KEYWORD__EQ] = "=", [HF__KEYWORD__LT] = "<",
[HF__KEYWORD__GT] = ">", [HF__KEYWORD__AND] = "and",
[HF__KEYWORD__OR] = "or", [HF__KEYWORD__INVERT] = "invert",
[HF__KEYWORD__EMIT] = "emit", [HF__KEYWORD__PERIOD] = ".",
[HF__KEYWORD__SPACE] = "space", [HF__KEYWORD__SPACES] = "spaces",
[HF__KEYWORD__CR] = "cr", [HF__KEYWORDS__CRS] = "crs",
@ -53,6 +64,13 @@ static const enum hf__node_type HF__KEYWORD_NODE_TYPE[__HF__KEYWORD__N] = {
[HF__KEYWORD__ADD] = HF__NODE_TYPE__ADD,
[HF__KEYWORD__SUB] = HF__NODE_TYPE__SUB,
[HF__KEYWORD__EQ] = HF__NODE_TYPE__EQ,
[HF__KEYWORD__LT] = HF__NODE_TYPE__LT,
[HF__KEYWORD__GT] = HF__NODE_TYPE__GT,
[HF__KEYWORD__AND] = HF__NODE_TYPE__AND,
[HF__KEYWORD__OR] = HF__NODE_TYPE__OR,
[HF__KEYWORD__INVERT] = HF__NODE_TYPE__INVERT,
[HF__KEYWORD__PERIOD] = HF__NODE_TYPE__DOT,
[HF__KEYWORD__EMIT] = HF__NODE_TYPE__EMIT,
[HF__KEYWORD__SPACE] = HF__NODE_TYPE__SPACE,

View file

@ -24,6 +24,13 @@ enum hf__node_type {
HF__NODE_TYPE__ADD,
HF__NODE_TYPE__SUB,
HF__NODE_TYPE__EQ,
HF__NODE_TYPE__LT,
HF__NODE_TYPE__GT,
HF__NODE_TYPE__AND,
HF__NODE_TYPE__OR,
HF__NODE_TYPE__INVERT,
HF__NODE_TYPE__DOT,
HF__NODE_TYPE__EMIT,
HF__NODE_TYPE__SPACE,