fix native ⌾ under rtperf

This commit is contained in:
dzaima 2021-05-16 18:36:14 +03:00
parent 45207372f6
commit a7a277a6d1
2 changed files with 20 additions and 3 deletions

View File

@ -131,9 +131,12 @@ static inline void load_init() {
B r = rtComplete[i]? inc(fruntime[i]) : rtObjGet(rtObjRaw, i); B r = rtComplete[i]? inc(fruntime[i]) : rtObjGet(rtObjRaw, i);
#endif #endif
if (isNothing(r)) { printf("· in runtime!\n"); exit(1); } if (isNothing(r)) { printf("· in runtime!\n"); exit(1); }
r = rtPerf_wrap(r);
runtimeH.a[i] = r;
if (isVal(r)) v(r)->flags|= i+1; if (isVal(r)) v(r)->flags|= i+1;
#ifdef RT_PERF
r = rtPerf_wrap(r);
if (isVal(r)) v(r)->flags|= i+1;
#endif
runtimeH.a[i] = r;
} }
dec(rtObjRaw); dec(rtObjRaw);
B* runtime = runtimeH.a; B* runtime = runtimeH.a;

View File

@ -188,13 +188,27 @@ void rtPerf_print() {
cm2 = cm2->prev; cm2 = cm2->prev;
} }
} }
B wfn_uc1(B t, B o, B x) { B t2 = c(WFun,t)->v; return TI(t2).fn_uc1(t2, o, x); }
B wfn_ucw(B t, B o, B w, B x) { B t2 = c(WFun,t)->v; return TI(t2).fn_ucw(t2, o, w, x); }
B wm1_uc1(B t, B o, B f, B x) { B t2 = c(WMd1,t)->v; return TI(t2).m1_uc1(t2, o, f, x); }
B wm1_ucw(B t, B o, B f, B w, B x) { B t2 = c(WMd1,t)->v; return TI(t2).m1_ucw(t2, o, f, w, x); }
B wm2_uc1(B t, B o, B f, B g, B x) { B t2 = c(WMd2,t)->v; return TI(t2).m2_uc1(t2, o, f, g, x); }
B wm2_ucw(B t, B o, B f, B g, B w, B x) { B t2 = c(WMd2,t)->v; return TI(t2).m2_ucw(t2, o, f, g, w, x); }
static inline void rtPerf_init() { static inline void rtPerf_init() {
ti[t_funPerf].visit = wf_visit; ti[t_funPerf].identity = wf_identity; ti[t_funPerf].visit = wf_visit; ti[t_funPerf].identity = wf_identity;
ti[t_md1Perf].visit = wm1_visit; ti[t_md1Perf].m1_d = m_md1D; ti[t_md1Perf].visit = wm1_visit; ti[t_md1Perf].m1_d = m_md1D;
ti[t_md2Perf].visit = wm2_visit; ti[t_md2Perf].m2_d = m_md2D; ti[t_md2Perf].visit = wm2_visit; ti[t_md2Perf].m2_d = m_md2D;
ti[t_funPerf].fn_uc1 = wfn_uc1;
ti[t_funPerf].fn_ucw = wfn_ucw;
ti[t_md1Perf].m1_uc1 = wm1_uc1;
ti[t_md1Perf].m1_ucw = wm1_ucw;
ti[t_md2Perf].m2_uc1 = wm2_uc1;
ti[t_md2Perf].m2_ucw = wm2_ucw;
} }
#else #else
static inline void rtPerf_init() { } static inline void rtPerf_init() { }
static inline B rtPerf_wrap(B f) { return f; }
static inline void rtPerf_print() { } static inline void rtPerf_print() { }
#endif #endif