diff --git a/src/encode.c b/src/encode.c index b8506a9b6014b4a0d16963083cee26ddfbe0d407..c1f8134ac96290c71efd1e99694f6562247f0734 100644 --- a/src/encode.c +++ b/src/encode.c @@ -562,25 +562,24 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc INT_TYPE i=val->u.integer; if (i != (INT32)i) { - /* Reuse the id. */ - data->counter.u.integer--; - /* Make sure we don't find ourselves again below... */ - map_delete(data->encoded, val); - + MP_INT tmp; + char *buffer; + mpz_init( &tmp ); + mpz_set_si( &tmp, i ); /* Encode as a bignum */ - push_int(i); - convert_stack_top_to_bignum(); - encode_value2(Pike_sp-1,data, 0); - pop_stack(); - - /* Restore the entry we removed above. */ - mapping_insert(data->encoded, val, &entry_id); - goto encode_done; + buffer = alloca( mpz_sizeinbase(&tmp, 36) + 2 ); + mpz_get_str( buffer, 36, &tmp ); + mpz_clear( &tmp ); + code_entry(TAG_OBJECT, 2, data); + push_text( buffer ); + encode_value2( Pike_sp-1, data, 0 ); + pop_stack(); + /* mapping_insert(data->encoded, val, &entry_id); */ } else code_entry(TAG_INT, i,data); } -#else +#else code_entry(TAG_INT, val->u.integer,data); #endif break;