Very close to a basic REPL now.

This commit is contained in:
Simon Brooke 2026-04-16 22:28:35 +01:00
parent 83537391a6
commit 4efe9eab87
23 changed files with 188 additions and 84 deletions

View file

@ -11,9 +11,14 @@
*/
#include <stdarg.h>
#include <stdlib.h>
#include "debug.h"
#include "io/fopen.h"
#include "io/io.h"
#include "io/print.h"
int verbosity = 0;
@ -45,14 +50,6 @@ void debug_print( wchar_t *message, int level, int indent ) {
#endif
}
void debug_print_object( struct pso_pointer object, int level, int indent ) {
// TODO: not yet implemented
}
void debug_dump_object( struct pso_pointer object, int level, int indent ) {
// TODO: not yet implemented
}
/**
* @brief print a 128 bit integer value to stderr, if `verbosity` matches `level`.
*
@ -133,5 +130,55 @@ void debug_printf( int level, int indent, wchar_t *format, ... ) {
#endif
}
// debug_dump_object, debug_print_binding, debug_print_exception, debug_print_object,
// not yet implemented but probably will be.
/**
* @brief print the object indicated by this `pointer` to stderr, if `verbosity`
* matches `level`.
*
* `verbosity` is a set of flags, see debug_print.h; so you can
* turn debugging on for only one part of the system.
*/
void debug_print_object( struct pso_pointer pointer, int level, int indent ) {
#ifdef DEBUG
if ( level & verbosity ) {
URL_FILE *ustderr = file_to_url_file( stderr );
fwide( stderr, 1 );
in_print( pointer, ustderr );
free( ustderr );
}
#endif
}
/**
* @brief Like `dump_object`, q.v., but protected by the verbosity mechanism.
*
* `verbosity` is a set of flags, see debug_print.h; so you can
* turn debugging on for only one part of the system.
*/
void debug_dump_object( struct pso_pointer pointer, int level, int indent ) {
//#ifdef DEBUG
// if ( level & verbosity ) {
// URL_FILE *ustderr = file_to_url_file( stderr );
// fwide( stderr, 1 );
// dump_object( ustderr, pointer );
// free( ustderr );
// }
//#endif
}
///**
// * Standardise printing of binding trace messages.
// */
//void debug_print_binding( struct cons_pointer key, struct cons_pointer val,
// bool deep, int level, int indent ) {
//#ifdef DEBUG
// // wchar_t * depth = (deep ? L"Deep" : L"Shallow");
//
// debug_print( ( deep ? L"Deep" : L"Shallow" ), level, indent );
// debug_print( L" binding `", level, indent );
// debug_print_object( key, level, indent );
// debug_print( L"` to `", level, indent );
// debug_print_object( val, level, indent );
// debug_print( L"`\n", level, indent );
//#endif
//}