A dyn negation of a non-number is refused by name, and a prelude function shadowed in a live session is a recorded gap

This commit is contained in:
Joseph Ferano 2026-09-25 12:07:32 +07:00
parent 5c0698d749
commit bf0a939093
3 changed files with 8 additions and 0 deletions

View File

@ -1514,6 +1514,11 @@ are a dyn vector. Rules out the first element typing the rest.
* Dev loop
** TODO A prelude function shadowed live is reached by the prelude's own calls
A defn of a prelude function's name sent to a running =flan dev= installs into the
host's cell for that name, so the prelude's calls compiled into the host follow it;
a rebuild gives them the prelude's again, as =Check.shadow_prelude= intends.
** DONE The dev loop, step 1: the reload primitive
A list of top-level forms is recompiled and installed into a running process, and
call sites compiled before those forms existed follow them through an indirection

View File

@ -985,6 +985,8 @@ static void refuse(const char *what) {
if (strcmp(what, "add") == 0) (void)FDYN_add(flan_dyn_from_i64(3), t);
else if (strcmp(what, "sub") == 0)
(void)FDYN_sub(flan_dyn_nil(), flan_dyn_from_i64(1));
else if (strcmp(what, "neg") == 0)
(void)flan_dyn_neg(t, NULL, 0);
else if (strcmp(what, "mul") == 0)
(void)FDYN_mul(flan_dyn_from_bool(1), flan_dyn_from_i64(2));
else if (strcmp(what, "div") == 0)

View File

@ -205,6 +205,7 @@ let () =
let refusals =
[ ("add", "dyn +: int and text");
("sub", "dyn -: nil and int");
("neg", "dyn -: text, and it takes a number");
("mul", "dyn *: bool and int");
("div", "dyn /: vec and int");
("rem", "dyn %: int and nil");