on master help sign in
Merge pull request #3872 from melted/tracing

Implement tracing for C backend

commitd9e3a207406367ff75408f0b8bf5fbc94c60ea28 authorNiklas Larsson <metaniklas@gmail.com> dateWed 21 Jun 2017, 11:45 (9 years ago) parent4903cb78d8869b
2 files changed+19−2
rts/idris_rts.c+9−1 rts/idris_rts.h+10−1
rts/idris_rts.c+9−1
@@ -419,6 +419,13 @@ VAL MKB64(VM* vm, uint64_t bits64) {
419419 return cl;
420420}
421421
422+void idris_trace(VM* vm, const char* func, int line) {
423+ printf("At %s:%d\n", func, line);
424+ dumpStack(vm);
425+ puts("");
426+ fflush(stdout);
427+}
428+
422429void dumpStack(VM* vm) {
423430 int i = 0;
424431 VAL* root;
@@ -426,7 +433,8 @@ void dumpStack(VM* vm) {
426433 for (root = vm->valstack; root < vm->valstack_top; ++root, ++i) {
427434 printf("%d: ", i);
428435 dumpVal(*root);
429− if (*root >= (VAL)(vm->heap.heap) && *root < (VAL)(vm->heap.end)) { printf("OK"); }
436+ if (*root >= (VAL)(vm->heap.heap) && *root < (VAL)(vm->heap.end)) { printf(" OK"); }
437+ if (root == vm->valstack_base) { printf(" <--- base"); }
430438 printf("\n");
431439 }
432440 printf("RET: ");
rts/idris_rts.h+10−1
@@ -235,7 +235,15 @@ typedef intptr_t i_int;
235235
236236// Stack management
237237
238−#define INITFRAME VAL* myoldbase
238+#ifdef IDRIS_TRACE
239+#define TRACE idris_trace(vm, __FUNCTION__, __LINE__);
240+#else
241+#define TRACE
242+#endif
243+
244+#define INITFRAME TRACE\
245+ VAL* myoldbase
246+
239247#define REBASE vm->valstack_base = oldbase
240248#define RESERVE(x) if (vm->valstack_top+(x) > vm->stack_max) { stackOverflow(); } \
241249 else { memset(vm->valstack_top, 0, (x)*sizeof(VAL)); }
@@ -348,6 +356,7 @@ VM* idris_getSender(Msg* msg);
348356int idris_getChannel(Msg* msg);
349357void idris_freeMsg(Msg* msg);
350358
359+void idris_trace(VM* vm, const char* func, int line);
351360void dumpVal(VAL r);
352361void dumpStack(VM* vm);
353362