name re parts
This commit is contained in:
parent
7fb8ecfa86
commit
7e0204083e
@ -686,10 +686,10 @@ B reBQN_c1(B t, B x) {
|
|||||||
scVal = tag(sc,OBJ_TAG);
|
scVal = tag(sc,OBJ_TAG);
|
||||||
}
|
}
|
||||||
ptr_dec(initBlock);
|
ptr_dec(initBlock);
|
||||||
HArr_p d = m_harrUv(7); d.a[0] = m_f64(replVal); d.a[1] = scVal;
|
HArr_p d = m_harr0v(re_max);
|
||||||
for (usz i=2; i<7; i++) d.a[i] = bi_N;
|
d.a[re_mode] = m_i32(replVal);
|
||||||
NOGC_E;
|
d.a[re_scope] = scVal;
|
||||||
init_comp(d.a+2, prim, sys);
|
init_comp(d.a, prim, sys);
|
||||||
decG(x);
|
decG(x);
|
||||||
return m_nfn(reBQNDesc, d.b);
|
return m_nfn(reBQNDesc, d.b);
|
||||||
}
|
}
|
||||||
|
|||||||
50
src/load.c
50
src/load.c
@ -240,9 +240,9 @@ B bqn_exec(B str, B path, B args) { // consumes all
|
|||||||
B str_all, str_none;
|
B str_all, str_none;
|
||||||
void init_comp(B* set, B prim, B sys) {
|
void init_comp(B* set, B prim, B sys) {
|
||||||
if (q_N(prim)) {
|
if (q_N(prim)) {
|
||||||
set[0] = inc(def_comp);
|
set[re_comp] = inc(def_comp);
|
||||||
set[1] = inc(def_rt);
|
set[re_rt] = inc(def_rt);
|
||||||
set[2] = inc(def_glyphs);
|
set[re_glyphs] = inc(def_glyphs);
|
||||||
} else {
|
} else {
|
||||||
if (!isArr(prim) || RNK(prim)!=1) thrM("•ReBQN: 𝕩.primitives must be a list");
|
if (!isArr(prim) || RNK(prim)!=1) thrM("•ReBQN: 𝕩.primitives must be a list");
|
||||||
usz pia = IA(prim);
|
usz pia = IA(prim);
|
||||||
@ -278,20 +278,21 @@ void init_comp(B* set, B prim, B sys) {
|
|||||||
prh.a[np[t]++] = v;
|
prh.a[np[t]++] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
set[1] = prh.b;
|
set[re_rt] = prh.b;
|
||||||
set[2] = inc(rb);
|
set[re_glyphs] = inc(rb);
|
||||||
set[0] = c1(load_compgen, rb);
|
set[re_comp] = c1(load_compgen, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q_N(sys)) {
|
if (q_N(sys)) {
|
||||||
all_sys:
|
all_sys:
|
||||||
set[3] = inc(def_sysNames);
|
set[re_sysNames] = inc(def_sysNames);
|
||||||
set[4] = inc(def_sysVals);
|
set[re_sysVals] = inc(def_sysVals);
|
||||||
} else {
|
} else {
|
||||||
if (!isArr(sys) || RNK(sys)!=1) thrM("•ReBQN: 𝕩.system must be a list");
|
if (!isArr(sys) || RNK(sys)!=1) thrM("•ReBQN: 𝕩.system must be a list");
|
||||||
if (str_all.u==0) { gc_add(str_all = m_c8vec("all",3)); gc_add(str_none = m_c8vec("none",4)); }
|
if (str_all.u==0) { gc_add(str_all = m_c8vec("all",3)); gc_add(str_none = m_c8vec("none",4)); }
|
||||||
if (equal(sys, str_all)) goto all_sys;
|
if (equal(sys, str_all)) goto all_sys;
|
||||||
if (equal(sys, str_none)) {
|
if (equal(sys, str_none)) {
|
||||||
set[3] = set[4] = emptyHVec();
|
set[re_sysNames] = set[re_sysVals] = emptyHVec();
|
||||||
} else {
|
} else {
|
||||||
usz ia = IA(sys); SGetU(sys)
|
usz ia = IA(sys); SGetU(sys)
|
||||||
M_HARR(r1, ia);
|
M_HARR(r1, ia);
|
||||||
@ -303,15 +304,15 @@ void init_comp(B* set, B prim, B sys) {
|
|||||||
HARR_ADD(r1, i, Get(c,0));
|
HARR_ADD(r1, i, Get(c,0));
|
||||||
HARR_ADD(r2, i, Get(c,1));
|
HARR_ADD(r2, i, Get(c,1));
|
||||||
}
|
}
|
||||||
set[3] = HARR_FV(r1);
|
set[re_sysNames] = HARR_FV(r1);
|
||||||
set[4] = HARR_FV(r2);
|
set[re_sysVals] = HARR_FV(r2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
B comps_getPrimitives(void) {
|
B comps_getPrimitives(void) {
|
||||||
B* o = harr_ptr(COMPS_CREF(re));
|
B* o = harr_ptr(COMPS_CREF(re));
|
||||||
B r = o[3];
|
B r = o[re_rt];
|
||||||
B g = o[4];
|
B g = o[re_glyphs];
|
||||||
B* pr = harr_ptr(r);
|
B* pr = harr_ptr(r);
|
||||||
B* gg = harr_ptr(g);
|
B* gg = harr_ptr(g);
|
||||||
M_HARR(ph, IA(r));
|
M_HARR(ph, IA(r));
|
||||||
@ -328,24 +329,24 @@ B comps_getPrimitives(void) {
|
|||||||
|
|
||||||
void comps_getSysvals(B* res) {
|
void comps_getSysvals(B* res) {
|
||||||
B* o = harr_ptr(COMPS_CREF(re));
|
B* o = harr_ptr(COMPS_CREF(re));
|
||||||
res[0] = o[5];
|
res[0] = o[re_sysNames];
|
||||||
res[1] = o[6];
|
res[1] = o[re_sysVals];
|
||||||
}
|
}
|
||||||
|
|
||||||
B rebqn_exec(B str, B path, B args, B re) {
|
B rebqn_exec(B str, B path, B args, B re) {
|
||||||
B* op = harr_ptr(re);
|
B* op = harr_ptr(re);
|
||||||
i32 replMode = o2iG(op[0]);
|
i32 replMode = o2iG(op[re_mode]);
|
||||||
Scope* sc = c(Scope, op[1]);
|
Scope* sc = c(Scope, op[re_scope]);
|
||||||
B res;
|
B res;
|
||||||
Block* block;
|
Block* block;
|
||||||
if (replMode>0) {
|
if (replMode>0) {
|
||||||
block = bqn_compScc(str, path, args, re, op[2], op[3], sc, replMode==2, true);
|
block = bqn_compScc(str, path, args, re, op[re_comp], op[re_rt], sc, replMode==2, true);
|
||||||
ptr_dec(sc->body);
|
ptr_dec(sc->body);
|
||||||
sc->body = ptr_inc(block->bodies[0]);
|
sc->body = ptr_inc(block->bodies[0]);
|
||||||
res = execBlockInplace(block, sc);
|
res = execBlockInplace(block, sc);
|
||||||
} else {
|
} else {
|
||||||
B rtsys = m_hvec2(inc(op[3]), incG(bi_sys));
|
B rtsys = m_hvec2(inc(op[re_rt]), incG(bi_sys));
|
||||||
block = bqn_compc(str, path, args, re, op[2], rtsys);
|
block = bqn_compc(str, path, args, re, op[re_comp], rtsys);
|
||||||
decG(rtsys);
|
decG(rtsys);
|
||||||
res = evalFunBlock(block, 0);
|
res = evalFunBlock(block, 0);
|
||||||
}
|
}
|
||||||
@ -537,8 +538,13 @@ void load_init() { // very last init function
|
|||||||
#endif
|
#endif
|
||||||
gc_add(load_compgen); gc_add(def_comp);
|
gc_add(load_compgen); gc_add(def_comp);
|
||||||
#endif
|
#endif
|
||||||
def_re = m_caB(7, (B[]){m_c32('?'), m_c32('?'), m_c32('?'), incG(def_rt), incG(def_glyphs), incG(def_sysNames), incG(def_sysVals)});
|
HArr_p ps = m_harr0v(re_max);
|
||||||
gc_add(def_re);
|
ps.a[re_comp] = incG(def_comp);
|
||||||
|
ps.a[re_rt] = incG(def_rt);
|
||||||
|
ps.a[re_glyphs] = incG(def_glyphs);
|
||||||
|
ps.a[re_sysNames] = incG(def_sysNames);
|
||||||
|
ps.a[re_sysVals] = incG(def_sysVals);
|
||||||
|
gc_add(def_re = ps.b);
|
||||||
|
|
||||||
#if FORMATTER
|
#if FORMATTER
|
||||||
Block* fmt_b = load_compImport("(formatter)",
|
Block* fmt_b = load_compImport("(formatter)",
|
||||||
|
|||||||
@ -4,10 +4,15 @@ enum {
|
|||||||
comps_path,
|
comps_path,
|
||||||
comps_args,
|
comps_args,
|
||||||
comps_src,
|
comps_src,
|
||||||
comps_re, // HArr of ⟨REPL mode ⋄ scope ⋄ compiler ⋄ runtime ⋄ glyphs ⋄ sysval names ⋄ sysval values⟩
|
comps_re, // HArr of re_* values (re_mode & re_scope have unspecified values)
|
||||||
comps_envPos,
|
comps_envPos,
|
||||||
comps_max
|
comps_max
|
||||||
};
|
};
|
||||||
|
enum {
|
||||||
|
re_comp, re_rt, re_glyphs, re_sysNames, re_sysVals, // compiling info
|
||||||
|
re_mode, re_scope, // only for rebqn_exec
|
||||||
|
re_max
|
||||||
|
};
|
||||||
#define COMPS_REF(O,N) O->a[comps_##N]
|
#define COMPS_REF(O,N) O->a[comps_##N]
|
||||||
#define COMPS_CREF(N) COMPS_REF(comps_curr, N)
|
#define COMPS_CREF(N) COMPS_REF(comps_curr, N)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user