Created
January 1, 2021 00:50
-
-
Save yamori813/d05a3801ab51c0bf44d5d9a04d93d09c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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