mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-07 15:28:49 +00:00
Debug prints added
This commit is contained in:
parent
c4ffeb2fbf
commit
73edd5603d
3 changed files with 22 additions and 11 deletions
17
runtime/gc.c
17
runtime/gc.c
|
|
@ -52,18 +52,21 @@ void *alloc (size_t size) {
|
||||||
#ifdef DEBUG_VERSION
|
#ifdef DEBUG_VERSION
|
||||||
++cur_id;
|
++cur_id;
|
||||||
#endif
|
#endif
|
||||||
size_t bytes_sz = size;
|
size_t obj_size = size;
|
||||||
size = BYTES_TO_WORDS(size);
|
size = BYTES_TO_WORDS(size);
|
||||||
|
size_t padding = size * sizeof(size_t) - obj_size;
|
||||||
#if defined(DEBUG_VERSION) && defined(DEBUG_PRINT)
|
#if defined(DEBUG_VERSION) && defined(DEBUG_PRINT)
|
||||||
fprintf(stderr, "allocation of size %zu words (%zu bytes): ", size, bytes_sz);
|
fprintf(stderr, "allocation of size %zu words (%zu bytes): ", size, bytes_sz);
|
||||||
#endif
|
#endif
|
||||||
void *p = gc_alloc_on_existing_heap(size);
|
void *p = gc_alloc_on_existing_heap(size);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
fprintf(stderr, "Garbage collection is not implemented yet.\n");
|
// fprintf(stderr, "Garbage collection is not implemented yet.\n");
|
||||||
exit(149);
|
// exit(149);
|
||||||
// not enough place in the heap, need to perform GC cycle
|
// not enough place in the heap, need to perform GC cycle
|
||||||
// p = gc_alloc(size);
|
p = gc_alloc(size);
|
||||||
}
|
}
|
||||||
|
printf("Object allocated: content [%p, %p) padding [%p, %p)\n", p, p + obj_size, p + obj_size, p + size * sizeof(size_t));
|
||||||
|
fflush(stdout);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,6 +188,8 @@ void *gc_alloc_on_existing_heap (size_t size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void *gc_alloc (size_t size) {
|
void *gc_alloc (size_t size) {
|
||||||
|
printf("Reallocation!\n");
|
||||||
|
fflush(stdout);
|
||||||
#if defined(DEBUG_VERSION) && defined(DEBUG_PRINT)
|
#if defined(DEBUG_VERSION) && defined(DEBUG_PRINT)
|
||||||
fprintf(stderr, "===============================GC cycle has started\n");
|
fprintf(stderr, "===============================GC cycle has started\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -880,6 +885,7 @@ void *alloc_string (auint len) {
|
||||||
obj->id = cur_id;
|
obj->id = cur_id;
|
||||||
#endif
|
#endif
|
||||||
obj->forward_address = 0;
|
obj->forward_address = 0;
|
||||||
|
printf("Allocated string\n");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -893,6 +899,7 @@ void *alloc_array (auint len) {
|
||||||
obj->id = cur_id;
|
obj->id = cur_id;
|
||||||
#endif
|
#endif
|
||||||
obj->forward_address = 0;
|
obj->forward_address = 0;
|
||||||
|
printf("Allocated array\n");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -907,6 +914,7 @@ void *alloc_sexp (auint members) {
|
||||||
#endif
|
#endif
|
||||||
obj->forward_address = 0;
|
obj->forward_address = 0;
|
||||||
obj->tag = 0;
|
obj->tag = 0;
|
||||||
|
printf("Allocated sexp\n");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -921,5 +929,6 @@ void *alloc_closure (auint captured) {
|
||||||
obj->id = cur_id;
|
obj->id = cur_id;
|
||||||
#endif
|
#endif
|
||||||
obj->forward_address = 0;
|
obj->forward_address = 0;
|
||||||
|
printf("Allocated closure\n");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,9 @@
|
||||||
// # define MINIMUM_HEAP_CAPACITY (8)
|
// # define MINIMUM_HEAP_CAPACITY (8)
|
||||||
// #else
|
// #else
|
||||||
// # define MINIMUM_HEAP_CAPACITY (1 << 2)
|
// # define MINIMUM_HEAP_CAPACITY (1 << 2)
|
||||||
#define MINIMUM_HEAP_CAPACITY (1 << 30)
|
//#define MINIMUM_HEAP_CAPACITY (1 << 30)
|
||||||
|
//#define MINIMUM_HEAP_CAPACITY (30)
|
||||||
|
#define MINIMUM_HEAP_CAPACITY (30)
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
|
||||||
|
|
@ -786,9 +786,9 @@ extern void *Bclosure (aint bn, void *entry, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
aint i, ai;
|
aint i, ai;
|
||||||
#ifdef X86_64
|
#ifdef X86_64
|
||||||
register size_t *stack_frame asm("ebp");
|
|
||||||
#else
|
|
||||||
register size_t *stack_frame asm("rbp");
|
register size_t *stack_frame asm("rbp");
|
||||||
|
#else
|
||||||
|
register size_t *stack_frame asm("ebp");
|
||||||
#endif
|
#endif
|
||||||
size_t *argss;
|
size_t *argss;
|
||||||
data *r;
|
data *r;
|
||||||
|
|
@ -877,13 +877,13 @@ extern void *Bsexp (aint bn, ...) {
|
||||||
return (void *)((data *)r)->contents;
|
return (void *)((data *)r)->contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern long Btag (void *d, aint t, aint n) {
|
extern aint Btag (void *d, aint t, aint n) {
|
||||||
data *r;
|
data *r;
|
||||||
|
|
||||||
if (UNBOXED(d)) return BOX(0);
|
if (UNBOXED(d)) return BOX(0);
|
||||||
else {
|
else {
|
||||||
r = TO_DATA(d);
|
r = TO_DATA(d);
|
||||||
return (long)BOX(TAG(r->data_header) == SEXP_TAG && TO_SEXP(d)->tag == UNBOX(t)
|
return (aint)BOX(TAG(r->data_header) == SEXP_TAG && TO_SEXP(d)->tag == UNBOX(t)
|
||||||
&& LEN(r->data_header) == UNBOX(n));
|
&& LEN(r->data_header) == UNBOX(n));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1255,9 +1255,9 @@ extern void *Lhd (void *v) { return Belem(v, BOX(0)); }
|
||||||
extern void *Ltl (void *v) { return Belem(v, BOX(1)); }
|
extern void *Ltl (void *v) { return Belem(v, BOX(1)); }
|
||||||
|
|
||||||
/* Lread is an implementation of the "read" construct */
|
/* Lread is an implementation of the "read" construct */
|
||||||
extern long Lread () {
|
extern aint Lread () {
|
||||||
// int result = BOX(0);
|
// int result = BOX(0);
|
||||||
int64_t result = BOX(0);
|
aint result = BOX(0);
|
||||||
|
|
||||||
printf("> ");
|
printf("> ");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue