Skip to content

Instantly share code, notes, and snippets.

@yamori813
Created January 1, 2021 00:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamori813/d05a3801ab51c0bf44d5d9a04d93d09c to your computer and use it in GitHub Desktop.
Save yamori813/d05a3801ab51c0bf44d5d9a04d93d09c to your computer and use it in GitHub Desktop.
diff --git a/src/hash.c b/src/hash.c
index b800a251..298eab26 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -12,6 +12,20 @@
#include <mruby/string.h>
#include <mruby/variable.h>
+#ifdef MRB_HASH_DEBUG
+//# include <stdio.h>
+//# define xprintf(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
+int xprintf(const char * restrict format, ...);
+#else
+# define xprintf(fmt, ...) (void)0
+#endif
+#define DBGPUT(fmt, ...) xprintf("#%03d| " fmt "\n", __LINE__, __VA_ARGS__)
+#define DBGBEG(func) DBGPUT("[%s] BEGIN", func)
+#define DBGEND(func) DBGPUT("[%s] END", func)
+#define DBGVAR(specifier, var) DBGPUT(" %s: %08x", specifier, var)
+#define DBGVAR32(var) DBGPUT(" u: %08x", var)
+#define DBGVAR64(var) DBGPUT(" llu: %08x %08x", var>>32, var&0xffffffff)
+
/*
* === Glossary
*
@@ -356,12 +370,20 @@ entry_delete(hash_entry* entry)
static uint32_t
ea_next_capa_for(uint32_t size, uint32_t max_capa)
{
+DBGVAR32(size);
+DBGVAR32(max_capa);
+DBGVAR32(U32(AR_DEFAULT_CAPA));
if (size < AR_DEFAULT_CAPA) {
return AR_DEFAULT_CAPA;
}
else {
+DBGVAR64(U64(size));
uint64_t capa = U64(size) * EA_INCREASE_RATIO, inc = capa - size;
+DBGVAR64(capa);
+DBGVAR64(inc);
if (EA_MAX_INCREASE < inc) capa = size + EA_MAX_INCREASE;
+DBGVAR64(capa);
+DBGVAR64(U64(max_capa));
return capa <= max_capa ? U32(capa) : max_capa;
}
}
@@ -391,7 +413,13 @@ ea_compress(hash_entry *ea, uint32_t n_used)
static hash_entry*
ea_adjust(mrb_state *mrb, hash_entry *ea, uint32_t *capap, uint32_t max_capa)
{
+DBGVAR("p", ea);
+DBGVAR32(*capap);
+DBGVAR32(max_capa);
+DBGBEG("ea_next_capa_for");
*capap = ea_next_capa_for(*capap, max_capa);
+DBGVAR32(*capap);
+DBGEND("ea_next_capa_for");
return ea_resize(mrb, ea, *capap);
}
@@ -446,8 +474,16 @@ ar_free(mrb_state *mrb, struct RHash *h)
static void
ar_adjust_ea(mrb_state *mrb, struct RHash *h, uint32_t size, uint32_t max_ea_capa)
{
+DBGVAR("p", h);
+DBGVAR32(size);
+DBGVAR32(max_ea_capa);
uint32_t ea_capa = size;
+DBGVAR32(ea_capa);
+DBGBEG("ea_adjust");
hash_entry *ea = ea_adjust(mrb, ar_ea(h), &ea_capa, max_ea_capa);
+DBGVAR32(ea_capa);
+DBGVAR("p", ea);
+DBGEND("ea_adjust");
ar_set_ea(h, ea);
ar_set_ea_capa(h, ea_capa);
}
@@ -491,7 +527,9 @@ ar_set(mrb_state *mrb, struct RHash *h, mrb_value key, mrb_value val)
return;
}
else {
+DBGBEG("ar_adjust_ea");
ar_adjust_ea(mrb, h, size, AR_MAX_SIZE);
+DBGEND("ar_adjust_ea");
}
}
else {
#530| [ar_adjust_ea] BEGIN
#477| p: 800e9fc8
#478| u: 00000000
#479| u: 00000010
#481| u: 00000000
#482| [ea_adjust] BEGIN
#416| p: 00000000
#417| u: 00000000
#418| u: 00000010
#419| [ea_next_capa_for] BEGIN
#373| u: 00000000
#374| u: 00000010
#375| u: 00000004
#421| u: 00000004
#422| [ea_next_capa_for] END
#484| u: 00000004
#485| p: 800f1a10
#486| [ea_adjust] END
#532| [ar_adjust_ea] END
#530| [ar_adjust_ea] BEGIN
#477| p: 800e9fc8
#478| u: 00000004
#479| u: 00000010
#481| u: 00000004
#482| [ea_adjust] BEGIN
#416| p: 800f1a10
#417| u: 00000004
#418| u: 00000010
#419| [ea_next_capa_for] BEGIN
#373| u: 00000004
#374| u: 00000010
#375| u: 00000004
#380| llu: 00000000 00000000
unknown exception
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment