diff --git a/src/builtins.h b/src/builtins.h index 34557fc5..ab234375 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -75,9 +75,9 @@ static const i32 firstImpurePM1 = pm1_timed; static const i32 firstImpurePM2 = pm2_while; static inline bool isImpureBuiltin(B x) { - if (isFun(x)) return !v(x)->extra || v(x)->extra>=firstImpurePFN; - if (isMd1(x)) return !v(x)->extra || v(x)->extra>=firstImpurePM1; - if (isMd2(x)) return !v(x)->extra || v(x)->extra>=firstImpurePM2; + if (isFun(x)) { u8 nid = NID(v(x)); return nid==0 || nid>=firstImpurePFN; } + if (isMd1(x)) { u8 nid = NID(v(x)); return nid==0 || nid>=firstImpurePM1; } + if (isMd2(x)) { u8 nid = NID(v(x)); return nid==0 || nid>=firstImpurePM2; } return false; } diff --git a/src/builtins/fns.c b/src/builtins/fns.c index 3a6f257f..68362b06 100644 --- a/src/builtins/fns.c +++ b/src/builtins/fns.c @@ -385,7 +385,7 @@ B tack_uc1(B t, B o, B x) { void fun_gcFn(void) { if (globalNames!=NULL) mm_visitP(globalNames); } -static void print_funBI(FILE* f, B x) { fprintf(f, "%s", pfn_repr(c(Fun,x)->extra)); } +static void print_funBI(FILE* f, B x) { fprintf(f, "%s", pfn_repr(NID(c(BFn,x)))); } static B funBI_uc1(B t, B o, B x) { return c(BFn,t)->uc1(t, o, x); } static B funBI_ucw(B t, B o, B w, B x) { return c(BFn,t)->ucw(t, o, w, x); } static B funBI_im(B t, B x) { return c(BFn,t)->im(t, x); } diff --git a/src/builtins/md1.c b/src/builtins/md1.c index 70d89b85..7448c074 100644 --- a/src/builtins/md1.c +++ b/src/builtins/md1.c @@ -169,7 +169,7 @@ B timed_c1(Md1D* d, B x) { B f = d->f; return m_f64((ens-sns)*1e-9); } -static void print_md1BI(FILE* f, B x) { fprintf(f, "%s", pm1_repr(c(Md1,x)->extra)); } +static void print_md1BI(FILE* f, B x) { fprintf(f, "%s", pm1_repr(NID(c(BMd1,x)))); } static B md1BI_im(Md1D* d, B x) { return ((BMd1*)d->m1)->im(d, x); } static B md1BI_iw(Md1D* d, B w, B x) { return ((BMd1*)d->m1)->iw(d, w, x); } static B md1BI_ix(Md1D* d, B w, B x) { return ((BMd1*)d->m1)->ix(d, w, x); } diff --git a/src/builtins/md2.c b/src/builtins/md2.c index a0e83409..3ff981ff 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -243,7 +243,7 @@ B depth_c2(Md2D* d, B w, B x) { } -static void print_md2BI(FILE* f, B x) { fprintf(f, "%s", pm2_repr(c(Md1,x)->extra)); } +static void print_md2BI(FILE* f, B x) { fprintf(f, "%s", pm2_repr(NID(c(BMd2,x)))); } static B md2BI_im(Md2D* d, B x) { return ((BMd2*)d->m2)->im(d, x); } static B md2BI_iw(Md2D* d, B w, B x) { return ((BMd2*)d->m2)->iw(d, w, x); } static B md2BI_ix(Md2D* d, B w, B x) { return ((BMd2*)d->m2)->ix(d, w, x); } diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index c1d2bb0f..4fb788b4 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -73,9 +73,9 @@ B glyph_c1(B t, B x) { return r; } u8 ty = TY(x); - if (ty==t_funBI) { B r = utf8Decode0(pfn_repr(c(Fun,x)->extra)); decG(x); return r; } - if (ty==t_md1BI) { B r = utf8Decode0(pm1_repr(c(Md1,x)->extra)); decG(x); return r; } - if (ty==t_md2BI) { B r = utf8Decode0(pm2_repr(c(Md2,x)->extra)); decG(x); return r; } + if (ty==t_funBI) { B r = utf8Decode0(pfn_repr(NID(c(BFn, x)))); decG(x); return r; } + if (ty==t_md1BI) { B r = utf8Decode0(pm1_repr(NID(c(BMd1,x)))); decG(x); return r; } + if (ty==t_md2BI) { B r = utf8Decode0(pm2_repr(NID(c(BMd2,x)))); decG(x); return r; } if (ty==t_nfn) { B r = nfn_name(x); decG(x); return r; } if (ty==t_funBl) { decG(x); return m_c8vec_0("(function block)"); } if (ty==t_md1Bl) { decG(x); return m_c8vec_0("(1-modifier block)"); } diff --git a/src/h.h b/src/h.h index 43b5b90f..dc27dd40 100644 --- a/src/h.h +++ b/src/h.h @@ -424,6 +424,8 @@ void freeThrown(void); #define TY(X) PTY(v(X)) #define RNK(X) PRNK(v(X)) +#define NID(X) ((X)->extra) + #define VTY(X,T) assert(isVal(X) && TY(X)==(T)) #if DEBUG