mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parse.y: setup_fake_str
* parse.y (setup_fake_str): extract function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6edde68b5d
commit
498c8763fe
1 changed files with 14 additions and 19 deletions
33
parse.y
33
parse.y
|
@ -10189,18 +10189,23 @@ sym_check_asciionly(VALUE str)
|
||||||
*/
|
*/
|
||||||
static ID intern_str(VALUE str);
|
static ID intern_str(VALUE str);
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
setup_fake_str(struct RString *fake_str, const char *name, long len)
|
||||||
|
{
|
||||||
|
fake_str->basic.flags = T_STRING|RSTRING_NOEMBED;
|
||||||
|
fake_str->basic.klass = rb_cString;
|
||||||
|
fake_str->as.heap.len = len;
|
||||||
|
fake_str->as.heap.ptr = (char *)name;
|
||||||
|
fake_str->as.heap.aux.capa = len;
|
||||||
|
return (VALUE)fake_str;
|
||||||
|
}
|
||||||
|
|
||||||
ID
|
ID
|
||||||
rb_intern3(const char *name, long len, rb_encoding *enc)
|
rb_intern3(const char *name, long len, rb_encoding *enc)
|
||||||
{
|
{
|
||||||
VALUE str;
|
|
||||||
st_data_t data;
|
st_data_t data;
|
||||||
struct RString fake_str;
|
struct RString fake_str;
|
||||||
fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
|
VALUE str = setup_fake_str(&fake_str, name, len);
|
||||||
fake_str.basic.klass = rb_cString;
|
|
||||||
fake_str.as.heap.len = len;
|
|
||||||
fake_str.as.heap.ptr = (char *)name;
|
|
||||||
fake_str.as.heap.aux.capa = len;
|
|
||||||
str = (VALUE)&fake_str;
|
|
||||||
rb_enc_associate(str, enc);
|
rb_enc_associate(str, enc);
|
||||||
OBJ_FREEZE(str);
|
OBJ_FREEZE(str);
|
||||||
|
|
||||||
|
@ -10523,13 +10528,8 @@ rb_check_id(volatile VALUE *namep)
|
||||||
|
|
||||||
if (rb_is_attrset_name(name)) {
|
if (rb_is_attrset_name(name)) {
|
||||||
struct RString fake_str;
|
struct RString fake_str;
|
||||||
const VALUE localname = (VALUE)&fake_str;
|
|
||||||
/* make local name by chopping '=' */
|
/* make local name by chopping '=' */
|
||||||
fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
|
const VALUE localname = setup_fake_str(&fake_str, RSTRING_PTR(name), RSTRING_LEN(name) - 1);
|
||||||
fake_str.basic.klass = rb_cString;
|
|
||||||
fake_str.as.heap.len = RSTRING_LEN(name) - 1;
|
|
||||||
fake_str.as.heap.ptr = RSTRING_PTR(name);
|
|
||||||
fake_str.as.heap.aux.capa = fake_str.as.heap.len;
|
|
||||||
rb_enc_copy(localname, name);
|
rb_enc_copy(localname, name);
|
||||||
OBJ_FREEZE(localname);
|
OBJ_FREEZE(localname);
|
||||||
|
|
||||||
|
@ -10547,12 +10547,7 @@ rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
|
||||||
{
|
{
|
||||||
st_data_t id;
|
st_data_t id;
|
||||||
struct RString fake_str;
|
struct RString fake_str;
|
||||||
const VALUE name = (VALUE)&fake_str;
|
const VALUE name = setup_fake_str(&fake_str, ptr, len);
|
||||||
fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
|
|
||||||
fake_str.basic.klass = rb_cString;
|
|
||||||
fake_str.as.heap.len = len;
|
|
||||||
fake_str.as.heap.ptr = (char *)ptr;
|
|
||||||
fake_str.as.heap.aux.capa = len;
|
|
||||||
rb_enc_associate(name, enc);
|
rb_enc_associate(name, enc);
|
||||||
|
|
||||||
sym_check_asciionly(name);
|
sym_check_asciionly(name);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue