How would you compile this?

fn [+] step
This commit is contained in:
Simon Forman 2023-02-19 17:43:18 -08:00
parent 7d99bb4e23
commit f194df8159
5 changed files with 172 additions and 136 deletions

View File

@ -43,3 +43,4 @@ rest, rest
stack, stack
swaack, swaack
swap, swap
fn, fn

View File

@ -48,6 +48,7 @@ rest, rest
stack, stack
swaack, swaack
swap, swap
fn, fn
eq, def_eq
gt, def_gt
lt, def_lt

View File

@ -279,6 +279,39 @@ push_thing_in_unit_list(JoyTypePtr term, JoyListPtr expression)
}
/*
?- gronk("fn", `[+] step`).
def fn(stack, expression, dictionary):
(s1, (i1, stack)) = stack
while s1:
(i2, s1) = s1
i1 += i1 + i2
return (i1, stack), expression, dictionary
*/
void
fn(JoyListPtr stack, __attribute__((unused)) JoyListPtr expression)
{
JoyList s1 = pop_list(stack);
mpz_t *i1 = pop_int(stack);
JoyList node = newIntNode();
mpz_set(node->head->value.i, *i1);
while (s1) {
if (joyInt == s1->head->kind) {
mpz_add(node->head->value.i, node->head->value.i, s1->head->value.i);
s1 = s1->tail;
} else {
fprintf(stderr, "Not an integer.\n");
longjmp(jbuf, 1);
}
}
node->tail = *stack;
*stack = node;
}
/*

View File

@ -85,6 +85,7 @@ void sub(JoyListPtr stack, JoyListPtr expression);
void fdiv_q(JoyListPtr stack, JoyListPtr expression);
void fdiv_r(JoyListPtr stack, JoyListPtr expression);
void truthy(JoyListPtr stack, JoyListPtr expression);
void fn(JoyListPtr stack, JoyListPtr expression);
struct dict_entry {

View File

@ -59,7 +59,7 @@ keyword_hash (register const char *str, register size_t len)
10, 90, 0, 25, 360, 360, 360, 360, 360, 360,
360, 360, 360, 360, 360, 360, 360, 360, 20, 360,
360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 10, 360, 360, 90, 360, 100, 70, 0,
360, 360, 30, 360, 360, 90, 360, 100, 70, 0,
5, 30, 40, 115, 15, 15, 360, 50, 40, 60,
0, 15, 0, 85, 70, 30, 25, 0, 95, 30,
30, 10, 20, 40, 360, 0, 360, 360, 360, 360,
@ -99,7 +99,7 @@ in_word_set (register const char *str, register size_t len)
{
enum
{
TOTAL_KEYWORDS = 162,
TOTAL_KEYWORDS = 163,
MIN_WORD_LENGTH = 1,
MAX_WORD_LENGTH = 14,
MIN_HASH_VALUE = 1,
@ -115,233 +115,234 @@ in_word_set (register const char *str, register size_t len)
#line 41 "KEYWORDS.txt"
{"dup", dup},
{""}, {""},
#line 89 "KEYWORDS.txt"
#line 90 "KEYWORDS.txt"
{"dupdip", def_dupdip},
#line 19 "KEYWORDS.txt"
{"<>", def_neq},
{""},
#line 87 "KEYWORDS.txt"
{"dupd", def_dupd},
#line 88 "KEYWORDS.txt"
{"dupd", def_dupd},
#line 89 "KEYWORDS.txt"
{"dupdd", def_dupdd},
{""},
#line 90 "KEYWORDS.txt"
#line 91 "KEYWORDS.txt"
{"dupdipd", def_dupdipd},
#line 46 "KEYWORDS.txt"
{"pop", pop},
{""},
#line 115 "KEYWORDS.txt"
#line 116 "KEYWORDS.txt"
{"popop", def_popop},
#line 17 "KEYWORDS.txt"
{"<", def_lt},
#line 116 "KEYWORDS.txt"
#line 117 "KEYWORDS.txt"
{"popopop", def_popopop},
#line 40 "KEYWORDS.txt"
{"dip", dip},
#line 113 "KEYWORDS.txt"
{"popd", def_popd},
#line 114 "KEYWORDS.txt"
{"popd", def_popd},
#line 115 "KEYWORDS.txt"
{"popdd", def_popdd},
#line 117 "KEYWORDS.txt"
{"popopd", def_popopd},
#line 118 "KEYWORDS.txt"
{"popopd", def_popopd},
#line 119 "KEYWORDS.txt"
{"popopdd", def_popopdd},
{""},
#line 82 "KEYWORDS.txt"
#line 83 "KEYWORDS.txt"
{"dipd", def_dipd},
{""},
#line 43 "KEYWORDS.txt"
{"i", i_joyfunc},
{""}, {""}, {""}, {""},
#line 153 "KEYWORDS.txt"
#line 154 "KEYWORDS.txt"
{"uncons", def_uncons},
#line 75 "KEYWORDS.txt"
#line 76 "KEYWORDS.txt"
{"ccccons", def_ccccons},
{""},
#line 79 "KEYWORDS.txt"
#line 80 "KEYWORDS.txt"
{"codi", def_codi},
{""},
#line 30 "KEYWORDS.txt"
{"/", fdiv_q},
#line 175 "KEYWORDS.txt"
{"/\\", def_SOLIDUS_REVERSE_SOLIDUS},
#line 80 "KEYWORDS.txt"
#line 51 "KEYWORDS.txt"
{"fn", fn},
#line 81 "KEYWORDS.txt"
{"codireco", def_codireco},
#line 154 "KEYWORDS.txt"
#line 155 "KEYWORDS.txt"
{"unit", def_unit},
{""},
#line 39 "KEYWORDS.txt"
{"concat", concat},
#line 101 "KEYWORDS.txt"
#line 102 "KEYWORDS.txt"
{"ii", def_ii},
{""},
#line 38 "KEYWORDS.txt"
{"cons", cons},
#line 76 "KEYWORDS.txt"
#line 77 "KEYWORDS.txt"
{"ccons", def_ccons},
#line 58 "KEYWORDS.txt"
#line 59 "KEYWORDS.txt"
{"?", def_QUESTION_MARK},
#line 176 "KEYWORDS.txt"
{"\\/", def_REVERSE_SOLIDUS_SOLIDUS},
#line 63 "KEYWORDS.txt"
{""},
#line 64 "KEYWORDS.txt"
{"<{}", def_LESS_THAN_SIGN_LEFT_CURLY_BRACKET_RIGHT_CURLY_BRACKET},
#line 81 "KEYWORDS.txt"
#line 82 "KEYWORDS.txt"
{"dinfrirst", def_dinfrirst},
#line 99 "KEYWORDS.txt"
#line 100 "KEYWORDS.txt"
{"hypot", def_hypot},
{""},
#line 109 "KEYWORDS.txt"
#line 110 "KEYWORDS.txt"
{"nullary", def_nullary},
{""},
#line 78 "KEYWORDS.txt"
#line 79 "KEYWORDS.txt"
{"clop", def_clop},
#line 107 "KEYWORDS.txt"
#line 108 "KEYWORDS.txt"
{"nulco", def_nulco},
#line 159 "KEYWORDS.txt"
#line 160 "KEYWORDS.txt"
{"x", def_x},
#line 83 "KEYWORDS.txt"
#line 84 "KEYWORDS.txt"
{"disenstacken", def_disenstacken},
#line 37 "KEYWORDS.txt"
{"cmp", cmp_joyfunc},
#line 64 "KEYWORDS.txt"
#line 65 "KEYWORDS.txt"
{"<<{}", def_LESS_THAN_SIGN_LESS_THAN_SIGN_LEFT_CURLY_BRACKET_RIGHT_CURLY_BRACKET},
#line 150 "KEYWORDS.txt"
#line 151 "KEYWORDS.txt"
{"third", def_third},
{""},
#line 157 "KEYWORDS.txt"
#line 158 "KEYWORDS.txt"
{"unswons", def_unswons},
#line 106 "KEYWORDS.txt"
#line 107 "KEYWORDS.txt"
{"not", def_not},
#line 91 "KEYWORDS.txt"
#line 92 "KEYWORDS.txt"
{"enstacken", def_enstacken},
{""},
#line 131 "KEYWORDS.txt"
#line 132 "KEYWORDS.txt"
{"second", def_second},
{""},
#line 130 "KEYWORDS.txt"
#line 177 "KEYWORDS.txt"
{"\\/", def_REVERSE_SOLIDUS_SOLIDUS},
#line 131 "KEYWORDS.txt"
{"run", def_run},
#line 45 "KEYWORDS.txt"
{"loop", loop},
#line 133 "KEYWORDS.txt"
#line 134 "KEYWORDS.txt"
{"shunt", def_shunt},
#line 94 "KEYWORDS.txt"
#line 95 "KEYWORDS.txt"
{"fourth", def_fourth},
#line 85 "KEYWORDS.txt"
#line 86 "KEYWORDS.txt"
{"down_to_zero", def_down_to_zero},
{""},
#line 151 "KEYWORDS.txt"
#line 152 "KEYWORDS.txt"
{"tuck", def_tuck},
{""},
#line 136 "KEYWORDS.txt"
#line 137 "KEYWORDS.txt"
{"spiral_next", def_spiral_next},
{""},
#line 176 "KEYWORDS.txt"
{"/\\", def_SOLIDUS_REVERSE_SOLIDUS},
#line 44 "KEYWORDS.txt"
{"inscribe", inscribe},
#line 108 "KEYWORDS.txt"
#line 109 "KEYWORDS.txt"
{"null", def_null},
{""},
#line 103 "KEYWORDS.txt"
#line 104 "KEYWORDS.txt"
{"infrst", def_infrst},
#line 156 "KEYWORDS.txt"
#line 157 "KEYWORDS.txt"
{"unstack", def_unstack},
#line 23 "KEYWORDS.txt"
{"mod", fdiv_r},
#line 160 "KEYWORDS.txt"
#line 161 "KEYWORDS.txt"
{"step", def_step},
#line 132 "KEYWORDS.txt"
#line 133 "KEYWORDS.txt"
{"shift", def_shift},
#line 28 "KEYWORDS.txt"
{"-", sub},
#line 53 "KEYWORDS.txt"
#line 54 "KEYWORDS.txt"
{"lt", def_lt},
#line 142 "KEYWORDS.txt"
#line 143 "KEYWORDS.txt"
{"stuncons", def_stuncons},
#line 86 "KEYWORDS.txt"
#line 87 "KEYWORDS.txt"
{"drop", def_drop},
#line 158 "KEYWORDS.txt"
#line 159 "KEYWORDS.txt"
{"while", def_while},
{""},
#line 110 "KEYWORDS.txt"
#line 111 "KEYWORDS.txt"
{"of", def_of},
#line 155 "KEYWORDS.txt"
#line 156 "KEYWORDS.txt"
{"unquoted", def_unquoted},
#line 134 "KEYWORDS.txt"
#line 135 "KEYWORDS.txt"
{"size", def_size},
{""},
#line 74 "KEYWORDS.txt"
#line 75 "KEYWORDS.txt"
{"binary", def_binary},
#line 55 "KEYWORDS.txt"
#line 56 "KEYWORDS.txt"
{"le", def_le},
#line 137 "KEYWORDS.txt"
{"split_at", def_split_at},
#line 68 "KEYWORDS.txt"
{"app2", def_app2},
#line 138 "KEYWORDS.txt"
{"split_at", def_split_at},
#line 69 "KEYWORDS.txt"
{"app2", def_app2},
#line 139 "KEYWORDS.txt"
{"split_list", def_split_list},
#line 77 "KEYWORDS.txt"
#line 78 "KEYWORDS.txt"
{"cleave", def_cleave},
#line 146 "KEYWORDS.txt"
#line 147 "KEYWORDS.txt"
{"swoncat", def_swoncat},
{""},
#line 141 "KEYWORDS.txt"
#line 142 "KEYWORDS.txt"
{"step_zero", def_step_zero},
#line 145 "KEYWORDS.txt"
#line 146 "KEYWORDS.txt"
{"swons", def_swons},
#line 120 "KEYWORDS.txt"
#line 121 "KEYWORDS.txt"
{"quoted", def_quoted},
{""},
#line 59 "KEYWORDS.txt"
#line 60 "KEYWORDS.txt"
{"and", def_and},
#line 100 "KEYWORDS.txt"
#line 101 "KEYWORDS.txt"
{"ifte", def_ifte},
#line 152 "KEYWORDS.txt"
#line 153 "KEYWORDS.txt"
{"unary", def_unary},
#line 32 "KEYWORDS.txt"
{"lshift", lshift},
#line 119 "KEYWORDS.txt"
#line 120 "KEYWORDS.txt"
{"product", def_product},
#line 27 "KEYWORDS.txt"
{"add", add},
#line 123 "KEYWORDS.txt"
#line 124 "KEYWORDS.txt"
{"reco", def_reco},
{""},
#line 24 "KEYWORDS.txt"
{"*", mul},
#line 112 "KEYWORDS.txt"
#line 113 "KEYWORDS.txt"
{"pm", def_pm},
{""},
#line 70 "KEYWORDS.txt"
#line 71 "KEYWORDS.txt"
{"appN", def_appN},
{""},
#line 84 "KEYWORDS.txt"
#line 85 "KEYWORDS.txt"
{"divmod", def_divmod},
#line 62 "KEYWORDS.txt"
#line 63 "KEYWORDS.txt"
{"!-", def_EXCLAMATION_MARK_HYPHEN_MINUS},
#line 95 "KEYWORDS.txt"
#line 96 "KEYWORDS.txt"
{"gcd", def_gcd},
#line 69 "KEYWORDS.txt"
#line 70 "KEYWORDS.txt"
{"app3", def_app3},
#line 125 "KEYWORDS.txt"
#line 126 "KEYWORDS.txt"
{"roll>", def_roll_GREATER_THAN_SIGN},
#line 127 "KEYWORDS.txt"
#line 128 "KEYWORDS.txt"
{"rollup", def_rollup},
{""},
#line 128 "KEYWORDS.txt"
#line 129 "KEYWORDS.txt"
{"rolldown", def_rolldown},
{""},
#line 164 "KEYWORDS.txt"
#line 165 "KEYWORDS.txt"
{"times", def_times},
{""},
#line 57 "KEYWORDS.txt"
#line 58 "KEYWORDS.txt"
{"--", def_HYPHEN_MINUS_HYPHEN_MINUS},
{""},
#line 67 "KEYWORDS.txt"
#line 68 "KEYWORDS.txt"
{"app1", def_app1},
#line 126 "KEYWORDS.txt"
#line 127 "KEYWORDS.txt"
{"roll<", def_roll_LESS_THAN_SIGN},
#line 73 "KEYWORDS.txt"
#line 74 "KEYWORDS.txt"
{"b", def_b},
#line 149 "KEYWORDS.txt"
#line 150 "KEYWORDS.txt"
{"ternary", def_ternary},
#line 25 "KEYWORDS.txt"
{"mul", mul},
@ -351,55 +352,55 @@ in_word_set (register const char *str, register size_t len)
{"clear", clear},
#line 33 "KEYWORDS.txt"
{"rshift", rshift},
#line 147 "KEYWORDS.txt"
#line 148 "KEYWORDS.txt"
{"tailrec", def_tailrec},
{""}, {""}, {""},
#line 96 "KEYWORDS.txt"
#line 97 "KEYWORDS.txt"
{"genrec", def_genrec},
#line 71 "KEYWORDS.txt"
#line 72 "KEYWORDS.txt"
{"at", def_at},
#line 143 "KEYWORDS.txt"
#line 144 "KEYWORDS.txt"
{"sum", def_sum},
{""},
#line 42 "KEYWORDS.txt"
{"first", first},
{""},
#line 61 "KEYWORDS.txt"
#line 62 "KEYWORDS.txt"
{"or", def_or},
{""},
#line 47 "KEYWORDS.txt"
{"rest", rest},
#line 102 "KEYWORDS.txt"
#line 103 "KEYWORDS.txt"
{"infra", def_infra},
#line 26 "KEYWORDS.txt"
{"+", add},
#line 167 "KEYWORDS.txt"
{"_timest", def__timest},
#line 168 "KEYWORDS.txt"
{"_timest", def__timest},
#line 169 "KEYWORDS.txt"
{"map", def_map},
#line 50 "KEYWORDS.txt"
{"swap", swap},
{""},
#line 140 "KEYWORDS.txt"
#line 141 "KEYWORDS.txt"
{"stackd", def_stackd},
#line 52 "KEYWORDS.txt"
#line 53 "KEYWORDS.txt"
{"gt", def_gt},
{""}, {""},
#line 144 "KEYWORDS.txt"
#line 145 "KEYWORDS.txt"
{"swapd", def_swapd},
#line 22 "KEYWORDS.txt"
{"%", fdiv_r},
#line 166 "KEYWORDS.txt"
#line 167 "KEYWORDS.txt"
{"_times1", def__times1},
#line 29 "KEYWORDS.txt"
{"sub", sub},
{""}, {""},
#line 163 "KEYWORDS.txt"
#line 164 "KEYWORDS.txt"
{"_stept", def__stept},
#line 56 "KEYWORDS.txt"
#line 57 "KEYWORDS.txt"
{"ge", def_ge},
{""},
#line 93 "KEYWORDS.txt"
#line 94 "KEYWORDS.txt"
{"fork", def_fork},
{""},
#line 15 "KEYWORDS.txt"
@ -407,102 +408,101 @@ in_word_set (register const char *str, register size_t len)
#line 21 "KEYWORDS.txt"
{">=", def_ge},
{""}, {""}, {""},
#line 162 "KEYWORDS.txt"
#line 163 "KEYWORDS.txt"
{"_step1", def__step1},
#line 92 "KEYWORDS.txt"
#line 93 "KEYWORDS.txt"
{"flatten", def_flatten},
{""}, {""}, {""}, {""},
#line 20 "KEYWORDS.txt"
{"<=", def_le},
{""}, {""}, {""}, {""},
#line 165 "KEYWORDS.txt"
#line 166 "KEYWORDS.txt"
{"_times0", def__times0},
#line 122 "KEYWORDS.txt"
#line 123 "KEYWORDS.txt"
{"range_to_zero", def_range_to_zero},
{""},
#line 129 "KEYWORDS.txt"
#line 130 "KEYWORDS.txt"
{"rrest", def_rrest},
{""},
#line 51 "KEYWORDS.txt"
#line 52 "KEYWORDS.txt"
{"eq", def_eq},
#line 54 "KEYWORDS.txt"
#line 55 "KEYWORDS.txt"
{"neq", def_neq},
{""},
#line 121 "KEYWORDS.txt"
#line 122 "KEYWORDS.txt"
{"range", def_range},
{""}, {""}, {""},
#line 148 "KEYWORDS.txt"
#line 149 "KEYWORDS.txt"
{"take", def_take},
#line 48 "KEYWORDS.txt"
{"stack", stack},
#line 161 "KEYWORDS.txt"
#line 162 "KEYWORDS.txt"
{"_step0", def__step0},
{""},
#line 31 "KEYWORDS.txt"
{"div", fdiv_q},
#line 174 "KEYWORDS.txt"
{"_\\/_", def___REVERSE_SOLIDUS_SOLIDUS__},
{""},
{""}, {""},
#line 49 "KEYWORDS.txt"
{"swaack", swaack},
#line 18 "KEYWORDS.txt"
{"!=", def_neq},
{""}, {""}, {""}, {""}, {""},
#line 111 "KEYWORDS.txt"
#line 112 "KEYWORDS.txt"
{"pam", def_pam},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 124 "KEYWORDS.txt"
#line 125 "KEYWORDS.txt"
{"reverse", def_reverse},
#line 65 "KEYWORDS.txt"
#line 66 "KEYWORDS.txt"
{"abs", def_abs},
{""},
#line 135 "KEYWORDS.txt"
#line 175 "KEYWORDS.txt"
{"_\\/_", def___REVERSE_SOLIDUS_SOLIDUS__},
#line 136 "KEYWORDS.txt"
{"small", def_small},
{""}, {""}, {""}, {""}, {""}, {""},
#line 60 "KEYWORDS.txt"
#line 61 "KEYWORDS.txt"
{"++", def_PLUS_SIGN_PLUS_SIGN},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
#line 173 "KEYWORDS.txt"
#line 174 "KEYWORDS.txt"
{"_map2", def__map2},
{""}, {""},
#line 139 "KEYWORDS.txt"
#line 140 "KEYWORDS.txt"
{"sqr", def_sqr},
{""}, {""},
#line 35 "KEYWORDS.txt"
{"branch", branch},
#line 72 "KEYWORDS.txt"
#line 73 "KEYWORDS.txt"
{"average", def_average},
#line 105 "KEYWORDS.txt"
#line 106 "KEYWORDS.txt"
{"neg", def_neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 66 "KEYWORDS.txt"
#line 67 "KEYWORDS.txt"
{"anamorphism", def_anamorphism},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 169 "KEYWORDS.txt"
#line 170 "KEYWORDS.txt"
{"_map?", def__map_QUESTION_MARK},
{""}, {""}, {""}, {""},
#line 170 "KEYWORDS.txt"
#line 171 "KEYWORDS.txt"
{"_mape", def__mape},
{""}, {""}, {""}, {""},
#line 172 "KEYWORDS.txt"
#line 173 "KEYWORDS.txt"
{"_map1", def__map1},
{""}, {""}, {""},
#line 104 "KEYWORDS.txt"
#line 105 "KEYWORDS.txt"
{"make_generator", def_make_generator},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""},
#line 97 "KEYWORDS.txt"
#line 98 "KEYWORDS.txt"
{"grabN", def_grabN},
{""}, {""}, {""}, {""},
#line 171 "KEYWORDS.txt"
#line 172 "KEYWORDS.txt"
{"_map0", def__map0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 98 "KEYWORDS.txt"
#line 99 "KEYWORDS.txt"
{"grba", def_grba}
};