MASTER_HEADERS = $(PLAF_MASTER_HEADERS) \
vm/assert.hpp \
+ vm/debug.hpp \
vm/layouts.hpp \
vm/platform.hpp \
vm/primitives.hpp \
void reset_context_objects();
void reset();
void fix_stacks();
- void scrub_stacks(gc_info* info, cell index);
cell peek() { return *(cell*)datastack; }
namespace factor {
+bool factor_print_p = true;
+
ostream& operator<<(ostream& out, const string* str) {
for (cell i = 0; i < string_capacity(str); i++)
out << (char)str->data()[i];
--- /dev/null
+namespace factor {
+
+extern bool factor_print_p;
+
+}
+
+#ifdef FACTOR_DEBUG
+
+#define FACTOR_PRINT(x) \
+ do { \
+ if (factor_print_p) { \
+ std::cerr \
+ << std::setw(28) << std::left << __FILE__ \
+ << " " << std::setw(4) << std::right << __LINE__ \
+ << " " << std::setw(20) << std::left << __FUNCTION__ \
+ << " " << x \
+ << std::endl; \
+ } \
+ } while (0)
+#define FACTOR_PRINT_MARK FACTOR_PRINT("")
+
+#else
+#define FACTOR_PRINT(fmt, ...) ((void)0)
+#define FACTOR_PRINT_MARK ((void)0)
+#endif
bool tail_call_site = tail_call_site_p(return_address.value);
#ifdef PIC_DEBUG
- std::cout << "Inline cache miss at " << (tail_call_site ? "tail" : "non-tail")
- << " call site 0x" << std::hex << return_address.value << std::dec
- << std::endl;
+ FACTOR_PRINT("Inline cache miss at "
+ << (tail_call_site ? "tail" : "non-tail")
+ << " call site 0x" << std::hex << return_address.value
+ << std::dec);
print_callstack();
#endif
set_call_target(return_address.value, xt);
#ifdef PIC_DEBUG
- std::cout << "Updated " << (tail_call_site ? "tail" : "non-tail")
- << " call site 0x" << std::hex << return_address.value << std::dec
- << " with 0x" << std::hex << (cell)xt << std::dec << std::endl;
+ FACTOR_PRINT("Updated " << (tail_call_site ? "tail" : "non-tail")
+ << " call site 0x" << std::hex << return_address.value << std::dec
+ << " with 0x" << std::hex << (cell)xt << std::dec);
print_callstack();
#endif
}
/* Factor headers */
#include "assert.hpp"
+#include "debug.hpp"
#include "layouts.hpp"
#include "platform.hpp"
#include "utilities.hpp"
for (cell loc = 0; loc < count; loc++) {
if (bitmap_p(bitmap, base + loc)) {
#ifdef DEBUG_GC_MAPS
- std::cout << "scrubbing stack location " << loc << std::endl;
+ FACTOR_PRINT("scrubbing stack location " << loc);
#endif
*((cell*)stack - loc) = 0;
}
return;
#ifdef DEBUG_GC_MAPS
- std::cout << "call frame code block " << compiled << " with offset "
- << return_address << std::endl;
+ FACTOR_PRINT("call frame code block " << compiled << " with offset "
+ << return_address);
#endif
cell* stack_pointer = (cell*)frame_top;
uint8_t* bitmap = info->gc_info_bitmap();
uint32_t base_pointer = info->lookup_base_pointer(callsite, spill_slot);
if (base_pointer != (uint32_t)-1) {
#ifdef DEBUG_GC_MAPS
- std::cout << "visiting derived root " << spill_slot
- << " with base pointer " << base_pointer << std::endl;
+ FACTOR_PRINT("visiting derived root " << spill_slot
+ << " with base pointer " << base_pointer);
#endif
stack_pointer[spill_slot] -= stack_pointer[base_pointer];
}
for (cell spill_slot = 0; spill_slot < info->gc_root_count; spill_slot++) {
if (bitmap_p(bitmap, callsite_gc_roots + spill_slot)) {
#ifdef DEBUG_GC_MAPS
- std::cout << "visiting GC root " << spill_slot << std::endl;
+ FACTOR_PRINT("visiting GC root " << spill_slot);
#endif
visitor->visit_handle(stack_pointer + spill_slot);
}