Commit bbb36784 authored by Masaki Muranaka's avatar Masaki Muranaka

Add new API mrb_ptr_as_string().

parent 00c45e71
...@@ -43,6 +43,7 @@ void mrb_str_decref(mrb_state*, mrb_shared_string*); ...@@ -43,6 +43,7 @@ void mrb_str_decref(mrb_state*, mrb_shared_string*);
mrb_value mrb_str_literal(mrb_state*, mrb_value); mrb_value mrb_str_literal(mrb_state*, mrb_value);
void mrb_str_concat(mrb_state*, mrb_value, mrb_value); void mrb_str_concat(mrb_state*, mrb_value, mrb_value);
mrb_value mrb_str_plus(mrb_state*, mrb_value, mrb_value); mrb_value mrb_str_plus(mrb_state*, mrb_value, mrb_value);
mrb_value mrb_ptr_as_string(mrb_state *, void *);
mrb_value mrb_obj_as_string(mrb_state *mrb, mrb_value obj); mrb_value mrb_obj_as_string(mrb_state *mrb, mrb_value obj);
mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, int len); /* mrb_str_resize */ mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, int len); /* mrb_str_resize */
mrb_value mrb_string_value(mrb_state *mrb, mrb_value *ptr); /* StringValue */ mrb_value mrb_string_value(mrb_state *mrb, mrb_value *ptr); /* StringValue */
......
...@@ -1534,6 +1534,36 @@ mrb_obj_as_string(mrb_state *mrb, mrb_value obj) ...@@ -1534,6 +1534,36 @@ mrb_obj_as_string(mrb_state *mrb, mrb_value obj)
return str; return str;
} }
mrb_value
mrb_ptr_as_string(mrb_state *mrb, void *p)
{
struct RString *p_str;
char *p1;
char *p2;
intptr_t n = (intptr_t)p;
p_str = str_new(mrb, NULL, 2 + sizeof(uintptr_t) * CHAR_BIT / 4);
p1 = p_str->ptr;
*p1++ = '0';
*p1++ = 'x';
p2 = p1;
do {
*p2++ = mrb_digitmap[n % 16];
n /= 16;
} while (n > 0);
*p2 = '\0';
p_str->len = (mrb_int)(p2 - p_str->ptr);
while (p1 < p2) {
const char c = *p1;
*p1++ = *--p2;
*p2 = c;
}
return mrb_obj_value(p_str);
}
mrb_value mrb_value
mrb_check_string_type(mrb_state *mrb, mrb_value str) mrb_check_string_type(mrb_state *mrb, mrb_value str)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment