Invert debugging-related build flags
This commit is contained in:
parent
2e378eca19
commit
900e8fb487
30
Makefile
30
Makefile
@ -50,14 +50,40 @@ else
|
||||
CFLAGS += -DNO_RLINE
|
||||
endif
|
||||
|
||||
ifndef KRK_DISABLE_DEBUG
|
||||
CFLAGS += -DKRK_ENABLE_DEBUG
|
||||
ifdef KRK_DISABLE_DEBUG
|
||||
CFLAGS += -DKRK_DISABLE_DEBUG
|
||||
endif
|
||||
|
||||
ifdef KRK_DISABLE_THREADS
|
||||
CFLAGS += -DKRK_DISABLE_THREADS
|
||||
endif
|
||||
|
||||
ifdef KRK_NO_DISASSEMBLY
|
||||
CFLAGS += -DKRK_NO_DISASSEMBLY=1
|
||||
endif
|
||||
|
||||
ifdef KRK_NO_TRACING
|
||||
CFLAGS += -DKRK_NO_TRACING=1
|
||||
endif
|
||||
|
||||
ifdef KRK_NO_SCAN_TRACING
|
||||
CFLAGS += -DKRK_NO_SCAN_TRACING=1
|
||||
endif
|
||||
|
||||
ifdef KRK_NO_STRESS_GC
|
||||
CFLAGS += -DKRK_NO_STRESS_GC=1
|
||||
endif
|
||||
|
||||
.PHONY: help
|
||||
|
||||
help:
|
||||
@echo "Configuration options available:"
|
||||
@echo " KRK_NO_... Compile without support for debugging features..."
|
||||
@echo " DISASSEMBLY=1 Do not enable disassembly at compile time."
|
||||
@echo " TRACING=1 Do not enable runtime tracing."
|
||||
@echo " SCAN_TRACING=1 Do not enable lexer debugging."
|
||||
@echo " STRESS_GC=1 Do not enable eager GC stress testing."
|
||||
@echo " KRK_DISABLE_THREADS=1 Disable threads on platforms that otherwise support them."
|
||||
@echo " KRK_DISABLE_RLINE=1 Do not build with the rich line editing library enabled."
|
||||
@echo " KRK_DISABLE_DEBUG=1 Disable debugging features (might be faster)."
|
||||
@echo " KRK_DISABLE_DOCS=1 Do not include docstrings for builtins."
|
||||
|
@ -26,6 +26,12 @@ WASM builds can be built from [kuroko-lang/kuroko-wasm-repl](https://github.com/
|
||||
|
||||
Kuroko can be built with the Asyncify option and as a worker.
|
||||
|
||||
### Fully Static
|
||||
|
||||
Normally, the main interpreter binary statically links with the VM library, but is otherwise built as a dynamic executable and links to shared libraries for libc, pthreads, and so on. To build a fully static binary, adding `-static` to `CFLAGS` and building only the `kuroko` target should suffice.
|
||||
|
||||
Whether a static build supports importing C extension modules depends on the specifics of your target platform.
|
||||
|
||||
## Extend and Embed Kuroko
|
||||
|
||||
Kuroko is easy to embed in a host application or extend with C modules. Please see [the documentation on our website](https://kuroko-lang.github.io/docs/embedding.html) for further information.
|
||||
|
@ -77,7 +77,7 @@ typedef enum {
|
||||
typedef void (*ParseFn)(int);
|
||||
|
||||
typedef struct {
|
||||
#ifdef ENABLE_SCAN_TRACING
|
||||
#ifndef KRK_NO_SCAN_TRACING
|
||||
const char * name;
|
||||
#endif
|
||||
ParseFn prefix;
|
||||
@ -313,7 +313,7 @@ static void advance() {
|
||||
if (parser.eatingWhitespace &&
|
||||
(parser.current.type == TOKEN_INDENTATION || parser.current.type == TOKEN_EOL)) continue;
|
||||
|
||||
#ifdef ENABLE_SCAN_TRACING
|
||||
#ifndef KRK_NO_SCAN_TRACING
|
||||
if (krk_currentThread.flags & KRK_THREAD_ENABLE_SCAN_TRACING) {
|
||||
fprintf(stderr, " [%s<%d> %d:%d '%.*s']\n",
|
||||
getRule(parser.current.type)->name,
|
||||
@ -442,7 +442,7 @@ static KrkCodeObject * endCompiler() {
|
||||
args++;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_DISASSEMBLY
|
||||
#ifndef KRK_NO_DISASSEMBLY
|
||||
if ((krk_currentThread.flags & KRK_THREAD_ENABLE_DISASSEMBLY) && !parser.hadError) {
|
||||
krk_disassembleCodeObject(stderr, function, function->name ? function->name->chars : "(module)");
|
||||
}
|
||||
@ -1012,7 +1012,7 @@ static void block(size_t indentation, const char * blockName) {
|
||||
advance();
|
||||
}
|
||||
};
|
||||
#ifdef ENABLE_SCAN_TRACING
|
||||
#ifndef KRK_NO_SCAN_TRACING
|
||||
if (krk_currentThread.flags & KRK_THREAD_ENABLE_SCAN_TRACING) {
|
||||
fprintf(stderr, "\n\nfinished with block %s (ind=%d) on line %d, sitting on a %s (len=%d)\n\n",
|
||||
blockName, (int)indentation, (int)parser.current.line,
|
||||
@ -1340,7 +1340,7 @@ static KrkToken classDeclaration() {
|
||||
advance(); /* Pass the indentation */
|
||||
method(currentIndentation);
|
||||
}
|
||||
#ifdef ENABLE_SCAN_TRACING
|
||||
#ifndef KRK_NO_SCAN_TRACING
|
||||
if (krk_currentThread.flags & KRK_THREAD_ENABLE_SCAN_TRACING) fprintf(stderr, "Exiting from class definition on %s\n", getRule(parser.current.type)->name);
|
||||
#endif
|
||||
/* Exit from block */
|
||||
@ -2751,7 +2751,7 @@ static void dict(int canAssign) {
|
||||
consume(TOKEN_RIGHT_BRACE,"Expected } at end of dict expression.");
|
||||
}
|
||||
|
||||
#ifndef ENABLE_SCAN_TRACING
|
||||
#ifdef KRK_NO_SCAN_TRACING
|
||||
# define RULE(token, a, b, c) [token] = {a, b, c}
|
||||
#else
|
||||
# define RULE(token, a, b, c) [token] = {# token, a, b, c}
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <kuroko/util.h>
|
||||
#include <kuroko/compiler.h>
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
|
||||
/**
|
||||
* When tracing is enabled, we will present the elements on the stack with
|
||||
|
@ -359,7 +359,7 @@ _cleanup:
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
static char * lastDebugCommand = NULL;
|
||||
static int debuggerHook(KrkCallFrame * frame) {
|
||||
|
||||
@ -849,7 +849,7 @@ _finishArgs:
|
||||
findInterpreter(argv);
|
||||
krk_initVM(flags);
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
krk_debug_registerCallback(debuggerHook);
|
||||
#endif
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include "chunk.h"
|
||||
#include "object.h"
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
|
||||
/**
|
||||
* @brief Print a disassembly of 'func' to the stream 'f'.
|
||||
|
@ -26,17 +26,10 @@ typedef int krk_integer_type;
|
||||
# define ENABLE_THREADING
|
||||
#endif
|
||||
|
||||
#ifdef STRICTLY_NO_THREADS
|
||||
#ifdef KRK_DISABLE_THREADS
|
||||
# undef ENABLE_THREADING
|
||||
#endif
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
# define ENABLE_DISASSEMBLY
|
||||
# define ENABLE_TRACING
|
||||
# define ENABLE_SCAN_TRACING
|
||||
# define ENABLE_STRESS_GC
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32
|
||||
# define PATH_SEP "/"
|
||||
# ifndef STATIC_ONLY
|
||||
|
@ -9,7 +9,7 @@ void * krk_reallocate(void * ptr, size_t old, size_t new) {
|
||||
vm.bytesAllocated += new - old;
|
||||
|
||||
if (new > old && ptr != krk_currentThread.stack && &krk_currentThread == vm.threads && !(vm.globalFlags & KRK_GLOBAL_GC_PAUSED)) {
|
||||
#ifdef ENABLE_STRESS_GC
|
||||
#ifndef KRK_NO_STRESS_GC
|
||||
if (vm.globalFlags & KRK_GLOBAL_ENABLE_STRESS_GC) {
|
||||
krk_collectGarbage();
|
||||
}
|
||||
|
10
src/vm.c
10
src/vm.c
@ -62,7 +62,7 @@ __thread KrkThreadState krk_currentThread;
|
||||
KrkThreadState krk_currentThread;
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_TRACING) && !defined(__EMSCRIPTEN__)
|
||||
#if !defined(KRK_NO_TRACING) && !defined(__EMSCRIPTEN__)
|
||||
# define FRAME_IN(frame) if (vm.globalFlags & KRK_GLOBAL_CALLGRIND) { clock_gettime(CLOCK_MONOTONIC, &frame->in_time); }
|
||||
# define FRAME_OUT(frame) \
|
||||
if (vm.globalFlags & KRK_GLOBAL_CALLGRIND && !(frame->closure->function->flags & KRK_CODEOBJECT_FLAGS_IS_GENERATOR)) { \
|
||||
@ -1016,7 +1016,7 @@ int krk_isFalsey(KrkValue value) {
|
||||
return 0; /* Assume anything else is truthy */
|
||||
}
|
||||
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
KRK_FUNC(set_tracing,{
|
||||
if (hasKw) {
|
||||
KrkValue test;
|
||||
@ -1234,7 +1234,7 @@ void krk_initVM(int flags) {
|
||||
_createAndBind_timeMod();
|
||||
_createAndBind_osMod();
|
||||
_createAndBind_fileioMod();
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
_createAndBind_disMod();
|
||||
#endif
|
||||
#ifdef ENABLE_THREADING
|
||||
@ -2023,7 +2023,7 @@ static KrkValue run() {
|
||||
KrkCallFrame* frame = &krk_currentThread.frames[krk_currentThread.frameCount - 1];
|
||||
|
||||
while (1) {
|
||||
#ifdef ENABLE_TRACING
|
||||
#ifndef KRK_NO_TRACING
|
||||
if (unlikely(krk_currentThread.flags & (KRK_THREAD_ENABLE_TRACING | KRK_THREAD_SINGLE_STEP | KRK_THREAD_SIGNALLED))) {
|
||||
if (krk_currentThread.flags & KRK_THREAD_ENABLE_TRACING) {
|
||||
krk_debug_dumpStack(stderr, frame);
|
||||
@ -2357,7 +2357,7 @@ _finishReturn: (void)0;
|
||||
break;
|
||||
}
|
||||
case OP_BREAKPOINT: {
|
||||
#ifdef KRK_ENABLE_DEBUG
|
||||
#ifndef KRK_DISABLE_DEBUG
|
||||
/* First off, halt execution. */
|
||||
krk_debugBreakpointHandler();
|
||||
if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) goto _finishException;
|
||||
|
Loading…
Reference in New Issue
Block a user