break less on recursive errors

This commit is contained in:
dzaima 2021-10-10 23:24:53 +03:00
parent b7f60ffb1c
commit 1072a8aa77
3 changed files with 11 additions and 4 deletions

View File

@ -156,7 +156,7 @@ static bool u8_get(u8** cv, u8* cE, const char* x) {
}
static B variation_refs;
static void variation_root() {
static void variation_gcRoot() {
mm_visit(variation_refs);
mm_visit(listVariations_def);
#define F(X) mm_visit(v_##X);
@ -264,7 +264,7 @@ B getInternalNS() {
FOR_VARIATION(F)
#undef F
listVariations_def = m_str8l("if");
gc_addFn(variation_root);
gc_addFn(variation_gcRoot);
#define F(X) inc(bi_##X),
B fn = bqn_exec(m_str32(U"{⟨ Type, Refc, Squeeze, IsPure, Info, ListVariations, Variation, ClearRefs, Unshare, DeepSqueeze⟩⇐𝕩}"), emptyCVec(), emptySVec());
B arg = m_caB(10,(B[]){F(itype)F(refc)F(squeeze)F(isPure)F(info)F(listVariations)F(variation)F(clearRefs)F(unshare)F(deepSqueeze)});

View File

@ -5,7 +5,14 @@
#include "../builtins.h"
bool inErr;
NORETURN NOINLINE void err(char* s) {
if (inErr) {
printf("\nCBQN encountered fatal error during information printing of another fatal error. Exiting without printing more info.\n");
exit(1);
__builtin_abort();
}
inErr = true;
puts(s); fflush(stdout);
vm_pstLive(); fflush(stdout);
print_vmStack(); fflush(stdout);

View File

@ -42,7 +42,7 @@ DEF_FREE(nfnDesc) { err("nfnDesc shouldn't be freed!"); }
void nfnDesc_visit(Value* x) { mm_visit(((NFnDesc*)x)->name); }
void nfnDesc_print(B x) { printf("(native function description)"); }
void nfn_gcFn() {
void nfn_gcRoot() {
mm_visit(nfn_list);
}
void nfn_init() {
@ -51,5 +51,5 @@ void nfn_init() {
TIi(t_nfn,freeF) = nfn_freeF; TIi(t_nfnDesc,freeF) = nfnDesc_freeF;
TIi(t_nfn,visit) = nfn_visit; TIi(t_nfnDesc,visit) = nfnDesc_visit;
TIi(t_nfn,print) = nfn_print; TIi(t_nfnDesc,print) = nfnDesc_print;
gc_addFn(nfn_gcFn);
gc_addFn(nfn_gcRoot);
}