Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions ext/msgpack/unpacker.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ static inline int object_complete(msgpack_unpacker_t* uk, VALUE object)
return PRIMITIVE_OBJECT_COMPLETE;
}

static inline int object_complete_symbol(msgpack_unpacker_t* uk, VALUE object)
static inline int object_complete_frozen(msgpack_unpacker_t* uk, VALUE object)
{
uk->last_object = object;
reset_head_byte(uk);
Expand All @@ -222,9 +222,9 @@ static inline int object_complete_ext(msgpack_unpacker_t* uk, int ext_type, VALU
{
if (uk->optimized_symbol_ext_type && ext_type == uk->symbol_ext_type) {
if (RB_UNLIKELY(NIL_P(str))) { // empty extension is returned as Qnil
return object_complete_symbol(uk, ID2SYM(rb_intern3("", 0, rb_utf8_encoding())));
return object_complete_frozen(uk, ID2SYM(rb_intern3("", 0, rb_utf8_encoding())));
}
return object_complete_symbol(uk, rb_str_intern(str));
return object_complete_frozen(uk, rb_str_intern(str));
}

int ext_flags;
Expand Down Expand Up @@ -398,7 +398,7 @@ static inline int read_raw_body_begin(msgpack_unpacker_t* uk, int raw_type)
int ret;
if ((uk->optimized_symbol_ext_type && uk->symbol_ext_type == raw_type)) {
VALUE symbol = msgpack_buffer_read_top_as_symbol(UNPACKER_BUFFER_(uk), length, raw_type != RAW_TYPE_BINARY);
ret = object_complete_symbol(uk, symbol);
ret = object_complete_frozen(uk, symbol);
} else if (is_reading_map_key(uk) && raw_type == RAW_TYPE_STRING) {
/* don't use zerocopy for hash keys but get a frozen string directly
* because rb_hash_aset freezes keys and it causes copying */
Expand All @@ -409,7 +409,7 @@ static inline int read_raw_body_begin(msgpack_unpacker_t* uk, int raw_type)
} else {
key = msgpack_buffer_read_top_as_symbol(UNPACKER_BUFFER_(uk), length, true);
}
ret = object_complete_symbol(uk, key);
ret = object_complete_frozen(uk, key);
} else {
if (uk->use_key_cache) {
key = msgpack_buffer_read_top_as_interned_string(UNPACKER_BUFFER_(uk), &uk->key_cache, length);
Expand Down Expand Up @@ -450,10 +450,10 @@ static int read_primitive(msgpack_unpacker_t* uk)

SWITCH_RANGE_BEGIN(b)
SWITCH_RANGE(b, 0x00, 0x7f) // Positive Fixnum
return object_complete(uk, INT2NUM(b));
return object_complete_frozen(uk, INT2NUM(b));

SWITCH_RANGE(b, 0xe0, 0xff) // Negative Fixnum
return object_complete(uk, INT2NUM((int8_t)b));
return object_complete_frozen(uk, INT2NUM((int8_t)b));

SWITCH_RANGE(b, 0xa0, 0xbf) // FixRaw / fixstr
size_t count = b & 0x1f;
Expand All @@ -478,15 +478,15 @@ static int read_primitive(msgpack_unpacker_t* uk)
SWITCH_RANGE(b, 0xc0, 0xdf) // Variable
switch(b) {
case 0xc0: // nil
return object_complete(uk, Qnil);
return object_complete_frozen(uk, Qnil);

//case 0xc1: // string

case 0xc2: // false
return object_complete(uk, Qfalse);
return object_complete_frozen(uk, Qfalse);

case 0xc3: // true
return object_complete(uk, Qtrue);
return object_complete_frozen(uk, Qtrue);

case 0xc7: // ext 8
{
Expand Down Expand Up @@ -542,14 +542,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
{
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
uint8_t u8 = cb.u8;
return object_complete(uk, INT2NUM((int)u8));
return object_complete_frozen(uk, INT2NUM((int)u8));
}

case 0xcd: // unsigned int 16
{
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
uint16_t u16 = _msgpack_be16(cb.u16);
return object_complete(uk, INT2NUM((int)u16));
return object_complete_frozen(uk, INT2NUM((int)u16));
}

case 0xce: // unsigned int 32
Expand All @@ -570,14 +570,14 @@ static int read_primitive(msgpack_unpacker_t* uk)
{
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 1);
int8_t i8 = cb.i8;
return object_complete(uk, INT2NUM((int)i8));
return object_complete_frozen(uk, INT2NUM((int)i8));
}

case 0xd1: // signed int 16
{
READ_CAST_BLOCK_OR_RETURN_EOF(cb, uk, 2);
int16_t i16 = _msgpack_be16(cb.i16);
return object_complete(uk, INT2NUM((int)i16));
return object_complete_frozen(uk, INT2NUM((int)i16));
}

case 0xd2: // signed int 32
Expand Down
Loading