Skip to content

Commit 7e5f226

Browse files
committed
Put source mapping info in stack traces.
1 parent 2f63418 commit 7e5f226

File tree

13 files changed

+356
-292
lines changed

13 files changed

+356
-292
lines changed

src/boot/boot.janet

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3653,8 +3653,8 @@
36533653
(def feature-header "src/core/features.h")
36543654

36553655
(def local-headers
3656-
["src/core/util.h"
3657-
"src/core/state.h"
3656+
["src/core/state.h"
3657+
"src/core/util.h"
36583658
"src/core/gc.h"
36593659
"src/core/vector.h"
36603660
"src/core/fiber.h"

src/core/corelib.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ extern const unsigned char *janet_core_image;
3535
extern size_t janet_core_image_size;
3636
#endif
3737

38+
/* Docstrings should only exist during bootstrap */
39+
#ifdef JANET_BOOTSTRAP
40+
#define JDOC(x) (x)
41+
#else
42+
#define JDOC(x) NULL
43+
#endif
44+
3845
/* Use LoadLibrary on windows or dlopen on posix to load dynamic libaries
3946
* with native code. */
4047
#if defined(JANET_NO_DYNAMIC_MODULES)
@@ -1207,9 +1214,7 @@ JanetTable *janet_core_lookup_table(JanetTable *replacements) {
12071214
JanetKV kv = replacements->data[i];
12081215
if (!janet_checktype(kv.key, JANET_NIL)) {
12091216
janet_table_put(dict, kv.key, kv.value);
1210-
if (janet_checktype(kv.value, JANET_CFUNCTION)) {
1211-
janet_table_put(janet_vm.registry, kv.value, kv.key);
1212-
}
1217+
/* Add replacement functions to registry? */
12131218
}
12141219
}
12151220
}

src/core/debug.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ void janet_stacktrace(JanetFiber *fiber, Janet err) {
118118
fiber = fibers[fi];
119119
int32_t i = fiber->frame;
120120
while (i > 0) {
121+
JanetCFunRegistry *reg = NULL;
121122
JanetStackFrame *frame = (JanetStackFrame *)(fiber->data + i - JANET_FRAME_SIZE);
122123
JanetFuncDef *def = NULL;
123124
i = frame->prevframe;
@@ -144,11 +145,19 @@ void janet_stacktrace(JanetFiber *fiber, Janet err) {
144145
} else {
145146
JanetCFunction cfun = (JanetCFunction)(frame->pc);
146147
if (cfun) {
147-
Janet name = janet_table_get(janet_vm.registry, janet_wrap_cfunction(cfun));
148-
if (!janet_checktype(name, JANET_NIL))
149-
janet_eprintf(" %s", (const char *)janet_to_string(name));
150-
else
148+
reg = janet_registry_get(cfun);
149+
if (NULL != reg && NULL != reg->name) {
150+
if (reg->name_prefix) {
151+
janet_eprintf(" %s/%s", reg->name_prefix, reg->name);
152+
} else {
153+
janet_eprintf(" %s", reg->name);
154+
}
155+
if (NULL != reg->source_file) {
156+
janet_eprintf(" [%s]", reg->source_file);
157+
}
158+
} else {
151159
janet_eprintf(" <cfunction>");
160+
}
152161
}
153162
}
154163
if (frame->flags & JANET_STACKFRAME_TAILCALL)
@@ -161,6 +170,11 @@ void janet_stacktrace(JanetFiber *fiber, Janet err) {
161170
} else {
162171
janet_eprintf(" pc=%d", off);
163172
}
173+
} else if (NULL != reg) {
174+
/* C Function */
175+
if (reg->source_line > 0) {
176+
janet_eprintf(" on line %d", (long) reg->source_line);
177+
}
164178
}
165179
janet_eprintf("\n");
166180
}
@@ -273,9 +287,20 @@ static Janet doframe(JanetStackFrame *frame) {
273287
} else {
274288
JanetCFunction cfun = (JanetCFunction)(frame->pc);
275289
if (cfun) {
276-
Janet name = janet_table_get(janet_vm.registry, janet_wrap_cfunction(cfun));
277-
if (!janet_checktype(name, JANET_NIL)) {
278-
janet_table_put(t, janet_ckeywordv("name"), name);
290+
JanetCFunRegistry *reg = janet_registry_get(cfun);
291+
if (NULL != reg->name) {
292+
if (NULL != reg->name_prefix) {
293+
janet_table_put(t, janet_ckeywordv("name"), janet_wrap_string(janet_formatc("%s/%s", reg->name_prefix, reg->name)));
294+
} else {
295+
janet_table_put(t, janet_ckeywordv("name"), janet_cstringv(reg->name));
296+
}
297+
if (NULL != reg->source_file) {
298+
janet_table_put(t, janet_ckeywordv("source"), janet_cstringv(reg->source_file));
299+
}
300+
if (reg->source_line > 0) {
301+
janet_table_put(t, janet_ckeywordv("source-line"), janet_wrap_integer(reg->source_line));
302+
janet_table_put(t, janet_ckeywordv("source-column"), janet_wrap_integer(1));
303+
}
279304
}
280305
}
281306
janet_table_put(t, janet_ckeywordv("c"), janet_wrap_true());

0 commit comments

Comments
 (0)