fixed a gc bug in bigint.c

This commit is contained in:
hyunghwan.chung 2018-12-27 15:46:19 +00:00
parent 83cfbb0b30
commit 53c0783da8
2 changed files with 23 additions and 20 deletions

View File

@ -1892,7 +1892,10 @@ moo_oop_t moo_mulints (moo_t* moo, moo_oop_t x, moo_oop_t y)
} }
normal: normal:
moo_pushtmp (moo, &x);
moo_pushtmp (moo, &y);
z = multiply_unsigned_integers (moo, x, y); z = multiply_unsigned_integers (moo, x, y);
moo_poptmps (moo, 2);
if (!z) return MOO_NULL; if (!z) return MOO_NULL;
if (MOO_OBJ_GET_CLASS(x) != MOO_OBJ_GET_CLASS(y)) if (MOO_OBJ_GET_CLASS(x) != MOO_OBJ_GET_CLASS(y))
MOO_OBJ_SET_CLASS(z, moo->_large_negative_integer); MOO_OBJ_SET_CLASS(z, moo->_large_negative_integer);

View File

@ -976,7 +976,7 @@ void moo_gc (moo_t* moo)
* if the symbol has not moved to the new heap, the symbol * if the symbol has not moved to the new heap, the symbol
* is not referenced by any other objects than the symbol * is not referenced by any other objects than the symbol
* table itself */ * table itself */
compact_symbol_table (moo, old_nil); /*compact_symbol_table (moo, old_nil); <---- this causes a problem when gc debugging is on, debug it */
/* move the symbol table itself */ /* move the symbol table itself */
moo->symtab = (moo_oop_dic_t)moo_moveoop(moo, (moo_oop_t)moo->symtab); moo->symtab = (moo_oop_dic_t)moo_moveoop(moo, (moo_oop_t)moo->symtab);