/* Copyright © 2023 Simon Forman This file is part of Thun Thun is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Thun is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Thun. If not see . */ #include enum JoyTypeType { joyInt, joyList, joySymbol, joyTrue, joyFalse }; typedef struct list_node* JoyList; typedef JoyList* JoyListPtr; typedef struct { enum JoyTypeType kind; union { char *symbol; mpz_t i; JoyList el; } value; } JoyType; typedef JoyType* JoyTypePtr; typedef struct list_node { JoyTypePtr head; JoyList tail; } JoyListNode; #define EMPTY_LIST (JoyList)NULL #define newJoyList GC_malloc(sizeof(JoyListNode)) #define newJoyType GC_malloc(sizeof(JoyType)) typedef void JoyFunc(JoyListPtr, JoyListPtr); JoyFunc add, branch, clear, cmp_joyfunc, cons, concat, dip, dup, first, i_joyfunc, inscribe, loop, lshift, pop, rest, rshift, stack, swaack, swap, mul, sub, fdiv_q, fdiv_r, truthy, fn; struct dict_entry { char *name; JoyFunc *func; }; const struct dict_entry * in_word_set (register const char *str, register size_t len); JoyList text_to_expression(char *text); void push_quote_onto_expression(JoyList el, JoyListPtr expression); void init_defs(void);