move builtin defs to own file

This commit is contained in:
dzaima 2021-06-04 02:07:30 +03:00
parent de66696e7a
commit 24f61bd5a5
10 changed files with 79 additions and 68 deletions

View File

@ -1,5 +1,6 @@
#include "../core.h"
#include "../utils/each.h"
#include "../utils/builtins.h"
#include <math.h>
static inline B arith_recm(BB2B f, B x) {

View File

@ -1,5 +1,6 @@
#include "../core.h"
#include "../utils/mut.h"
#include "../utils/builtins.h"
B itype_c1(B t, B x) {
B r;

View File

@ -1,6 +1,7 @@
#include "../core.h"
#include "../utils/each.h"
#include "../utils/file.h"
#include "../utils/builtins.h"

View File

@ -1,4 +1,5 @@
#include "../core.h"
#include "../utils/builtins.h"
B md2BI_uc1(B t, B o, B f, B g, B x) { return c(BMd2,t)->uc1(t, o, f, g, x); }
B md2BI_ucw(B t, B o, B f, B g, B w, B x) { return c(BMd2,t)->ucw(t, o, f, g, w, x); }

View File

@ -1,6 +1,7 @@
#include "../core.h"
#include "../utils/each.h"
#include "../utils/mut.h"
#include "../utils/builtins.h"
B shape_c1(B t, B x) {

View File

@ -2,6 +2,7 @@
#include "../utils/hash.h"
#include "../utils/file.h"
#include "../utils/wyhash.h"
#include "../utils/builtins.h"
#include "../ns.h"
#include "../nfns.h"

View File

@ -4,31 +4,6 @@
u64 allocB; // currently allocated number of bytes
B bi_emptyHVec, bi_emptyIVec, bi_emptyCVec, bi_emptySVec;
#define F(N) u64 N;
CTR_FOR(F)
#undef F
char* format_pf(u8 u) {
switch(u) { default: return "(unknown function)";
#define F(N,X) case pf_##N: return X;
FOR_PFN(F,F,F)
#undef F
}
}
char* format_pm1(u8 u) {
switch(u) { default: return"(unknown 1-modifier)";
#define F(N,X) case pm1_##N: return X;
FOR_PM1(F,F,F)
#undef F
}
}
char* format_pm2(u8 u) {
switch(u) { default: return"(unknown 2-modifier)";
#define F(N,X) case pm2_##N: return X;
FOR_PM2(F,F,F)
#undef F
}
}
NOINLINE void arr_print(B x) { // should accept refc=0 arguments for debugging purposes
ur r = rnk(x);

43
src/h.h
View File

@ -154,49 +154,6 @@ enum ElType { // a⌈b shall return the type that can store both, if possible; a
char* format_type(u8 u);
#define FOR_PFN(A,M,D) \
/* arith.c*/A(add,"+") A(sub,"-") A(mul,"×") A(div,"÷") A(pow,"") A(floor,"") A(ceil,"") A(stile,"|") A(eq,"=") \
/* arith.c*/A(ne,"") D(le,"") D(ge,"") A(lt,"<") A(gt,">") A(and,"") A(or,"") A(not,"¬") A(log,"⋆⁼") \
/* fns.c*/A(ud,"") A(fne,"") A(feq,"") A(ltack,"") A(rtack,"") M(fmtF,"•FmtF") A(indexOf,"") A(memberOf,"") A(find,"") A(count,"") \
/* sfns.c*/A(shape,"") A(pick,"") A(pair,"{𝕨‿𝕩}") A(select,"") A(slash,"/") A(join,"") A(couple,"") A(shiftb,"»") A(shifta,"«") A(take,"") A(drop,"") A(group,"") A(reverse,"") \
/* sort.c*/A(gradeUp,"") A(gradeDown,"") \
/* sysfn.c*/M(type,"•Type") M(decp,"•Decompose") M(primInd,"•PrimInd") M(glyph,"•Glyph") A(fill,"•FillFn") M(sys,"•getsys") A(grLen,"•GroupLen") D(grOrd,"•groupOrd") \
/* sysfn.c*/M(repr,"•Repr") A(asrt,"!") M(out,"•Out") M(show,"•Show") M(bqn,"•BQN") D(cmp,"•Cmp") A(hash,"•Hash") M(makeRand,"•MakeRand") M(exit,"•Exit") \
/*internal.c*/M(itype,"•internal.Type") M(refc,"•internal.Refc") M(squeeze,"•internal.Squeeze") M(isPure,"•internal.IsPure") A(info,"•internal.Info") \
/*internal.c*/D(variation,"•internal.Variation") A(listVariations,"•internal.ListVariations") M(clearRefs,"•internal.ClearRefs") M(unshare,"•internal.Unshare")
#define FOR_PM1(A,M,D) \
/*md1.c*/ A(tbl,"") A(each,"¨") A(fold,"´") A(scan,"`") A(const,"˙") A(swap,"˜") A(cell,"˘") \
/*md1.c*/ A(timed,"•_timed") \
#define FOR_PM2(A,M,D) \
/*md2.c*/ A(val,"") A(repeat,"") A(fillBy,"•_fillBy_") A(catch,"") \
/*md2.c*/ A(atop,"") A(over,"") A(before,"") A(after,"") A(cond,"") A(under,"")
enum PrimFns { pf_none,
#define F(N,X) pf_##N,
FOR_PFN(F,F,F)
#undef F
};
enum PrimMd1 { pm1_none,
#define F(N,X) pm1_##N,
FOR_PM1(F,F,F)
#undef F
};
enum PrimMd2 { pm2_none,
#define F(N,X) pm2_##N,
FOR_PM2(F,F,F)
#undef F
};
#define F(N,X) extern B bi_##N;
FOR_PFN(F,F,F)
FOR_PM1(F,F,F)
FOR_PM2(F,F,F)
#undef F
typedef struct Value {
i32 refc; // plain old reference count

View File

@ -3,10 +3,13 @@
#include "ns.h"
#include "utils/mut.h"
#include "utils/file.h"
#include "utils/builtins.h"
u64 mm_heapMax = HEAP_MAX;
u64 mm_heapAlloc;
#define FA(N,X) B bi_##N; B N##_c1(B t, B x); B N##_c2(B t, B w, B x);
#define FM(N,X) B bi_##N; B N##_c1(B t, B x);
#define FD(N,X) B bi_##N; B N##_c2(B t, B w, B x);
@ -17,6 +20,33 @@ FOR_PM2(FA,FM,FD)
#undef FM
#undef FD
#define F(N) u64 N;
CTR_FOR(F)
#undef F
char* format_pf(u8 u) {
switch(u) { default: return "(unknown function)";
#define F(N,X) case pf_##N: return X;
FOR_PFN(F,F,F)
#undef F
}
}
char* format_pm1(u8 u) {
switch(u) { default: return"(unknown 1-modifier)";
#define F(N,X) case pm1_##N: return X;
FOR_PM1(F,F,F)
#undef F
}
}
char* format_pm2(u8 u) {
switch(u) { default: return"(unknown 2-modifier)";
#define F(N,X) case pm2_##N: return X;
FOR_PM2(F,F,F)
#undef F
}
}
TypeInfo ti[t_COUNT];
B r1Objs[rtLen];

43
src/utils/builtins.h Normal file
View File

@ -0,0 +1,43 @@
#pragma once
#define FOR_PFN(A,M,D) \
/* arith.c*/A(add,"+") A(sub,"-") A(mul,"×") A(div,"÷") A(pow,"") A(floor,"") A(ceil,"") A(stile,"|") A(eq,"=") \
/* arith.c*/A(ne,"") D(le,"") D(ge,"") A(lt,"<") A(gt,">") A(and,"") A(or,"") A(not,"¬") A(log,"⋆⁼") \
/* fns.c*/A(ud,"") A(fne,"") A(feq,"") A(ltack,"") A(rtack,"") M(fmtF,"•FmtF") A(indexOf,"") A(memberOf,"") A(find,"") A(count,"") \
/* sfns.c*/A(shape,"") A(pick,"") A(pair,"{𝕨‿𝕩}") A(select,"") A(slash,"/") A(join,"") A(couple,"") A(shiftb,"»") A(shifta,"«") A(take,"") A(drop,"") A(group,"") A(reverse,"") \
/* sort.c*/A(gradeUp,"") A(gradeDown,"") \
/* sysfn.c*/M(type,"•Type") M(decp,"•Decompose") M(primInd,"•PrimInd") M(glyph,"•Glyph") A(fill,"•FillFn") M(sys,"•getsys") A(grLen,"•GroupLen") D(grOrd,"•groupOrd") \
/* sysfn.c*/M(repr,"•Repr") A(asrt,"!") M(out,"•Out") M(show,"•Show") M(bqn,"•BQN") D(cmp,"•Cmp") A(hash,"•Hash") M(makeRand,"•MakeRand") M(exit,"•Exit") \
/*internal.c*/M(itype,"•internal.Type") M(refc,"•internal.Refc") M(squeeze,"•internal.Squeeze") M(isPure,"•internal.IsPure") A(info,"•internal.Info") \
/*internal.c*/D(variation,"•internal.Variation") A(listVariations,"•internal.ListVariations") M(clearRefs,"•internal.ClearRefs") M(unshare,"•internal.Unshare")
#define FOR_PM1(A,M,D) \
/*md1.c*/ A(tbl,"") A(each,"¨") A(fold,"´") A(scan,"`") A(const,"˙") A(swap,"˜") A(cell,"˘") \
/*md1.c*/ A(timed,"•_timed")
#define FOR_PM2(A,M,D) \
/*md2.c*/ A(val,"") A(repeat,"") A(fillBy,"•_fillBy_") A(catch,"") \
/*md2.c*/ A(atop,"") A(over,"") A(before,"") A(after,"") A(cond,"") A(under,"")
enum PrimFns { pf_none,
#define F(N,X) pf_##N,
FOR_PFN(F,F,F)
#undef F
};
enum PrimMd1 { pm1_none,
#define F(N,X) pm1_##N,
FOR_PM1(F,F,F)
#undef F
};
enum PrimMd2 { pm2_none,
#define F(N,X) pm2_##N,
FOR_PM2(F,F,F)
#undef F
};
#define F(N,X) extern B bi_##N;
FOR_PFN(F,F,F)
FOR_PM1(F,F,F)
FOR_PM2(F,F,F)
#undef F