1
0
mirror of https://github.com/janet-lang/janet synced 2025-08-04 04:53:57 +00:00

Add some debug information to more builtin functions.

This commit is contained in:
Calvin Rose 2018-06-09 20:41:02 -04:00
parent 2a87dada47
commit f0f5af24c2
3 changed files with 17 additions and 13 deletions

View File

@ -246,7 +246,7 @@ value."
:let (tuple 'let verb (doone (+ i 2))) :let (tuple 'let verb (doone (+ i 2)))
:when (tuple 'if verb (doone (+ i 2))) :when (tuple 'if verb (doone (+ i 2)))
(error ("unexpected loop predicate: " verb))) (error ("unexpected loop predicate: " verb)))
(switch (switch
verb verb
:range (do :range (do
(def [start end _inc] (ast.unwrap1 object)) (def [start end _inc] (ast.unwrap1 object))
@ -293,7 +293,7 @@ value."
(def $accum (gensym "accum")) (def $accum (gensym "accum"))
(tuple 'do (tuple 'do
(tuple 'def $accum @[]) (tuple 'def $accum @[])
(tuple 'loop head (tuple 'loop head
(tuple array.push $accum (tuple array.push $accum
(tuple.prepend body 'do))) (tuple.prepend body 'do)))
$accum)) $accum))
@ -734,7 +734,7 @@ in the same manner, and so on. Useful for expressing pipelines of data."
"Get the number of occurences of each value in a indexed structure." "Get the number of occurences of each value in a indexed structure."
[ind] [ind]
(def freqs @{}) (def freqs @{})
(loop (loop
[x :in ind] [x :in ind]
(def n (get freqs x)) (def n (get freqs x))
(put freqs x (if n (+ 1 n) 1))) (put freqs x (if n (+ 1 n) 1)))
@ -1016,8 +1016,9 @@ onvalue."
} :in st] } :in st]
(file.write stdout " in") (file.write stdout " in")
(when c (file.write stdout " cfunction")) (when c (file.write stdout " cfunction"))
(when name (file.write stdout (string " " name))) (if name
(when func (file.write stdout (string " " func))) (file.write stdout (string " " name))
(when func (file.write stdout (string " " func))))
(when pc (file.write stdout (string " (pc=" pc ")"))) (when pc (file.write stdout (string " (pc=" pc ")")))
(when tail (file.write stdout " (tailcall)")) (when tail (file.write stdout " (tailcall)"))
(file.write stdout "\n")))) (file.write stdout "\n"))))
@ -1060,7 +1061,7 @@ environment is needed, use run-context."
(def last (get parts (- (length parts) 1))) (def last (get parts (- (length parts) 1)))
(def normname (string.replace-all "." "/" path)) (def normname (string.replace-all "." "/" path))
(array.push (array.push
(map (fn [x] (map (fn [x]
(def y (string.replace "??" last x)) (def y (string.replace "??" last x))
(string.replace "?" normname y)) (string.replace "?" normname y))
paths) paths)
@ -1104,7 +1105,7 @@ returned from compiling and running the file."
(put cache path newenv) (put cache path newenv)
(put loading path true) (put loading path true)
(def f (find-mod path)) (def f (find-mod path))
(if f (if f
(do (do
# Normal dst module # Normal dst module
(defn chunks [buf] (file.read f 1024 buf)) (defn chunks [buf] (file.read f 1024 buf))
@ -1115,7 +1116,7 @@ returned from compiling and running the file."
(file.close f) (file.close f)
(put loading path nil) (put loading path nil)
newenv) newenv)
(do (do
# Try native module # Try native module
(def n (find-native path)) (def n (find-native path))
(if (not n) (if (not n)

View File

@ -983,6 +983,7 @@ DstCompileResult dst_compile(Dst source, DstTable *env, int flags) {
if (c.result.status == DST_COMPILE_OK) { if (c.result.status == DST_COMPILE_OK) {
DstFuncDef *def = dstc_pop_funcdef(&c); DstFuncDef *def = dstc_pop_funcdef(&c);
def->name = dst_cstring("[thunk]");
c.result.funcdef = def; c.result.funcdef = def;
} }

View File

@ -60,6 +60,7 @@ static const DstReg cfuns[] = {
/* Utility for inline assembly */ /* Utility for inline assembly */
static DstFunction *dst_quick_asm( static DstFunction *dst_quick_asm(
const char *name,
int32_t arity, int32_t arity,
int varargs, int varargs,
int32_t slots, int32_t slots,
@ -71,6 +72,7 @@ static DstFunction *dst_quick_asm(
def->slotcount = slots; def->slotcount = slots;
def->bytecode = malloc(bytecode_size); def->bytecode = malloc(bytecode_size);
def->bytecode_length = bytecode_size / sizeof(uint32_t); def->bytecode_length = bytecode_size / sizeof(uint32_t);
def->name = dst_cstring(name);
if (!def->bytecode) { if (!def->bytecode) {
DST_OUT_OF_MEMORY; DST_OUT_OF_MEMORY;
} }
@ -105,11 +107,11 @@ DstTable *dst_stl_env(int flags) {
/* Load main functions */ /* Load main functions */
dst_env_cfuns(env, cfuns); dst_env_cfuns(env, cfuns);
dst_env_def(env, "debug", dst_wrap_function(dst_quick_asm(0, 0, 1, debug_asm, sizeof(debug_asm)))); dst_env_def(env, "debug", dst_wrap_function(dst_quick_asm("debug", 0, 0, 1, debug_asm, sizeof(debug_asm))));
dst_env_def(env, "error", dst_wrap_function(dst_quick_asm(1, 0, 1, error_asm, sizeof(error_asm)))); dst_env_def(env, "error", dst_wrap_function(dst_quick_asm("error", 1, 0, 1, error_asm, sizeof(error_asm))));
dst_env_def(env, "apply1", dst_wrap_function(dst_quick_asm(2, 0, 2, apply_asm, sizeof(apply_asm)))); dst_env_def(env, "apply1", dst_wrap_function(dst_quick_asm("apply1", 2, 0, 2, apply_asm, sizeof(apply_asm))));
dst_env_def(env, "yield", dst_wrap_function(dst_quick_asm(1, 0, 2, yield_asm, sizeof(yield_asm)))); dst_env_def(env, "yield", dst_wrap_function(dst_quick_asm("yield", 1, 0, 2, yield_asm, sizeof(yield_asm))));
dst_env_def(env, "resume", dst_wrap_function(dst_quick_asm(2, 0, 2, resume_asm, sizeof(resume_asm)))); dst_env_def(env, "resume", dst_wrap_function(dst_quick_asm("resume", 2, 0, 2, resume_asm, sizeof(resume_asm))));
dst_env_def(env, "VERSION", dst_cstringv(DST_VERSION)); dst_env_def(env, "VERSION", dst_cstringv(DST_VERSION));