mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
GCC seemed to not fill array of computed gotos.
This is expected as per the C standard, but segfaulted unless all 255 labels were added.
This commit is contained in:
parent
a8afc5b81f
commit
8cda06b995
187
src/core/vm.c
187
src/core/vm.c
@ -58,7 +58,7 @@ JANET_THREAD_LOCAL jmp_buf *janet_vm_jmp_buf = NULL;
|
|||||||
* a switch inside an infinite loop. For GCC/clang, we use
|
* a switch inside an infinite loop. For GCC/clang, we use
|
||||||
* computed gotos. */
|
* computed gotos. */
|
||||||
#if defined(__GNUC__) && !defined(__EMSCRIPTEN__)
|
#if defined(__GNUC__) && !defined(__EMSCRIPTEN__)
|
||||||
/*#define JANET_USE_COMPUTED_GOTOS*/
|
#define JANET_USE_COMPUTED_GOTOS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef JANET_USE_COMPUTED_GOTOS
|
#ifdef JANET_USE_COMPUTED_GOTOS
|
||||||
@ -291,6 +291,191 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in, JanetFiberStatus status)
|
|||||||
&&label_JOP_NUMERIC_GREATER_THAN,
|
&&label_JOP_NUMERIC_GREATER_THAN,
|
||||||
&&label_JOP_NUMERIC_GREATER_THAN_EQUAL,
|
&&label_JOP_NUMERIC_GREATER_THAN_EQUAL,
|
||||||
&&label_JOP_NUMERIC_EQUAL,
|
&&label_JOP_NUMERIC_EQUAL,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
|
&&label_unknown_op,
|
||||||
&&label_unknown_op
|
&&label_unknown_op
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -156,11 +156,11 @@
|
|||||||
(assert (= (|(+ $0 $1 $3 $2 $6) 0 1 2 3 4 5 6) 12) "function shorthand 9")
|
(assert (= (|(+ $0 $1 $3 $2 $6) 0 1 2 3 4 5 6) 12) "function shorthand 9")
|
||||||
|
|
||||||
# Simple function break
|
# Simple function break
|
||||||
(debug/fbreak map)
|
(debug/fbreak map 1)
|
||||||
(def f (fiber/new (fn [] (map inc [1 2 3])) :a))
|
(def f (fiber/new (fn [] (map inc [1 2 3])) :a))
|
||||||
(resume f)
|
(resume f)
|
||||||
(assert (= :debug (fiber/status f)) "debug/fbreak")
|
(assert (= :debug (fiber/status f)) "debug/fbreak")
|
||||||
(debug/unfbreak map)
|
(debug/unfbreak map 1)
|
||||||
(map inc [1 2 3])
|
(map inc [1 2 3])
|
||||||
|
|
||||||
(end-suite)
|
(end-suite)
|
||||||
|
Loading…
Reference in New Issue
Block a user