# Rb\_get\_interned

**URL:** <https://www.ruby-forum.com/t/rb-get-interned/107293>\
**Category:** Development\
**Created:** [June 20, 2007, 7:45am UTC](https://www.ruby-forum.com/t/rb-get-interned/107293 "2007-06-20T07:45:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [June 20, 2007, 7:45am UTC](https://www.ruby-forum.com/t/rb-get-interned/107293/1 "2007-06-20T07:45:35Z")

</div>

e$B$J$+$@$G$9!#e(B

e$B0JA0DI2C$5$l$?e(Brb\_sym\_interned\_p()e$B$O7k6I!"e(Bintern.he$B$K@k8@$@$1;D$7e(B  
e$B$F\>C$5$l$F$7$^$C$?$h$&$G$9$,!"JQ?t$dDj?t$,Dj5A$5$l$F$$$k$+$rD4e(B  
e$B$Y$h$&$H$9$k$@$1$G?7$7$$L\>A0$,EPO?$5$l$F$7$^$&$N$OL5BL$N$h$&$Je(B  
e$B5$$,$7$^$9!#e(B

ID rb\_get\_interned(const char \*name, long len);

e$B$N$h$&$J7A$G4{B8$NL\>A0$@$1$rC5$9$H$$$&$N$O$I$&$G$7$g$&$+!#e(B  
e$B$H$j$"$($:e(Bvariable.c:rb\_path2class()e$B$rNc$K!#e(B

# Index: parse.y

— parse.y (revision 12575)  
+++ parse.y (working copy)  
@@ -8418,17 +8418,57 @@ rb\_symname\_p(const char \*name)  
}

+static ID  
+id\_register(VALUE str, ID id)  
+{

- OBJ\_FREEZE(str);
- st\_add\_direct(global\_symbols.sym\_id, (st\_data\_t)str, id);
- st\_add\_direct(global\_symbols.id\_str, id, (st\_data\_t)str);
- return id;  
+}
- 

+static ID  
+get\_interned(VALUE str)  
+{

- st\_data\_t id;
- 
- if (st\_lookup(global\_symbols.sym\_id, (st\_data\_t)str, &id))
- return (ID)id;
- 
- if (RSTRING\_LEN(str) \> 0) {
- const char \*name = RSTRING\_PTR(str);
- char c = \*name;
- 
- if (c != ‘\_’ && c != ‘$’ && c != ‘@’ && ISASCII© && !ISALNUM©) {
- 

```
 /* operators */

```

- 

```
 int i;

```

- 
- 

```
 for (i = 0; op_tbl[i].token; i++) {

```

- if (\*op\_tbl[i].name == \*name &&
- 

```
   strcmp(op_tbl[i].name, name) == 0) {

```

- 

```
   return id_register(str, op_tbl[i].token);

```

- }
- 

```
 }

```

- }
- }
- 
- return 0;  
+}
- 

+ID  
+rb\_get\_interned(const char \*name, long len)  
+{

- return get\_interned(rb\_str\_new(name, len));  
+}
- 

ID  
rb\_intern2(const char \*name, long len)  
{  
const char \*m = name;

- VALUE str = rb\_str\_new(name, len);
- ID id;  
int last;

- VALUE str = rb\_str\_new(name, len);
- ID id = get\_interned(str);

- if (st\_lookup(global\_symbols.sym\_id, (st\_data\_t)str, (st\_data\_t  
\*)&id))
- return id;
- 

- if (id) return id;  
last = len-1;

- id = 0;  
switch (\*name) {  
case ‘$’:  
@@ -8447,23 +8487,9 @@ rb\_intern2(const char \*name, long len)  
break;  
default:
- if (name[0] != ‘\_’ && ISASCII(name[0]) && !ISALNUM(name[0])) {
- 

```
 /* operators */

```

- 

```
 int i;

```

- 
- 

```
 for (i=0; op_tbl[i].token; i++) {

```

- if (\*op\_tbl[i].name == \*name &&
- 

```
   strcmp(op_tbl[i].name, name) == 0) {

```

- 

```
   id = op_tbl[i].token;

```

- 

```
   goto id_register;

```

- }
- 

```
 }

```

- }
- 
- if (name[last] == ‘=’) {

- if (name[last] == ‘=’ && last \> 1 && name[last-1] != ‘=’) {  
/\* attribute assignment \*/  
id = rb\_intern2(name, last);  
if (id \> tLAST\_TOKEN && !is\_attrset\_id(id)) {

- id = rb\_id\_attrset(id);
- goto id\_register;

- return id\_register(str, rb\_id\_attrset(id));  
}  
id = ID\_ATTRSET;  
@@ -8485,9 +8511,5 @@ rb\_intern2(const char \*name, long len)  
new\_id:  
id |= ++global\_symbols.last\_id \<\< ID\_SCOPE\_SHIFT;

- id\_register:
- OBJ\_FREEZE(str);
- st\_add\_direct(global\_symbols.sym\_id, (st\_data\_t)str, id);
- st\_add\_direct(global\_symbols.id\_str, id, (st\_data\_t)str);
- return id;

- return id\_register(str, id);  
}

# Index: variable.c

— variable.c (revision 12575)  
+++ variable.c (working copy)  
@@ -237,5 +237,6 @@ rb\_path2class(const char \*path)  
while (\*p) {  
while (\*p && \*p != ‘:’) p++;

- id = rb\_intern2(pbeg, p-pbeg);

- id = rb\_get\_interned(pbeg, p-pbeg);
- if (!id) goto undefined\_class;  
if (p[0] == ‘:’) {  
if (p[1] != ‘:’) goto undefined\_class;  
Index: include/ruby/intern.h  
===================================================================  
— include/ruby/intern.h (revision 12575)  
+++ include/ruby/intern.h (working copy)  
@@ -408,5 +409,4 @@ int rb\_is\_local\_id(ID);  
int rb\_is\_junk\_id(ID);  
int rb\_symname\_p(const char\*);  
-int rb\_sym\_interned\_p(VALUE);  
void rb\_gc\_mark\_symbols(void);  
VALUE rb\_backref\_get(void);  
Index: include/ruby/ruby.h  
===================================================================  
— include/ruby/ruby.h (revision 12575)  
+++ include/ruby/ruby.h (working copy)  
@@ -614,4 +614,5 @@ void rb\_gc\_unregister\_address(VALUE\*);  
ID rb\_intern(const char\*);  
ID rb\_intern2(const char\*, long);  
+ID rb\_get\_interned(const char\*, long);  
const char \*rb\_id2name(ID);  
ID rb\_to\_id(VALUE);

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [June 20, 2007, 8:37am UTC](https://www.ruby-forum.com/t/rb-get-interned/107293/2 "2007-06-20T08:37:39Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:31028] rb\_get\_interned”  
on Wed, 20 Jun 2007 14:44:57 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|e$B0JA0DI2C$5$l$?e(Brb\_sym\_interned\_p()e$B$O7k6I!"e(Bintern.he$B$K@k8@$@$1;D$7e(B  
|e$B$F\>C$5$l$F$7$^$C$?$h$&$G$9$,!"JQ?t$dDj?t$,Dj5A$5$l$F$$$k$+$rD4e(B  
|e$B$Y$h$&$H$9$k$@$1$G?7$7$$L\>A0$,EPO?$5$l$F$7$^$&$N$OL5BL$N$h$&$Je(B  
|e$B5$$,$7$^$9!#e(B

e$B5$;}$A$O$o$+$j$^$9!)e(B

| ID rb\_get\_interned(const char \*name, long len);  
|  
|e$B$N$h$&$J7A$G4{B8$NL\>A0$@$1$rC5$9$H$$$&$N$O$I$&$G$7$g$&$+!#e(B  
|e$B$H$j$"$($:e(Bvariable.c:rb\_path2class()e$B$rNc$K!#e(B

e$BL\>A0$,5$$KF~$i$J$$!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [June 20, 2007, 9:32am UTC](https://www.ruby-forum.com/t/rb-get-interned/107293/3 "2007-06-20T09:32:42Z")

</div>

e$B$J$+$@$G$9!#e(B

At Wed, 20 Jun 2007 15:36:20 +0900,  
Yukihiro M. wrote in [ruby-dev:31029]:

> | ID rb\_get\_interned(const char \*name, long len);  
> |  
> |e$B$N$h$&$J7A$G4{B8$NL\>A0$@$1$rC5$9$H$$$&$N$O$I$&$G$7$g$&$+!#e(B
> 
> e$BL\>A0$,5$$KF~$i$J$$!#e(B

e$B0z?t$Oe(BOK?

rb\_registered\_id()  
rb\_interned\_p()  
e$B$H$+!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [June 20, 2007, 6:42pm UTC](https://www.ruby-forum.com/t/rb-get-interned/107293/4 "2007-06-20T18:42:11Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:31030] Re: rb\_get\_interned”  
on Wed, 20 Jun 2007 16:31:39 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|\> | ID rb\_get\_interned(const char \*name, long len);  
|\> |  
|\> |e$B$N$h$&$J7A$G4{B8$NL\>A0$@$1$rC5$9$H$$$&$N$O$I$&$G$7$g$&$+!#e(B  
|\>  
|\> e$BL\>A0$,5$$KF~$i$J$$!#e(B  
|  
|e$B0z?t$Oe(BOK?  
|  
|rb\_registered\_id()  
|rb\_interned\_p()  
|e$B$H$+!#e(B

e$B$&!\<$s!“$=$l$@$C$?$i=c?h$K85!9$Ne(Brb\_sym\_interned\_p()e$B$rI|3h$5$;e(B  
e$B$k$N$,$h$$$h$&$K;W$$$^$9!#0z?t$K$D$$$F$O!“e(BM17Ne$B2=$7$?;~$K%(%se(B  
e$B%3!\<%G%#%s%0\>pJs$rF@$k$3$H$,$G$-$k$h$&$Ke(BVALUEe$B$G$”$kJ}$,$”$j$,e(B  
e$B$?$$$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [June 21, 2007, 3:26am UTC](https://www.ruby-forum.com/t/rb-get-interned/107293/5 "2007-06-21T03:26:06Z")

</div>

e$B$J$+$@$G$9!#e(B

At Thu, 21 Jun 2007 01:41:25 +0900,  
Yukihiro M. wrote in [ruby-dev:31032]:

> |e$B$H$+!#e(B
> 
> e$B$&!\<$s!"$=$l$@$C$?$i=c?h$K85!9$Ne(Brb\_sym\_interned\_p()e$B$rI|3h$5$;e(B  
> e$B$k$N$,$h$$$h$&$K;W$$$^$9!#0z?t$K$D$$$F$O!“e(BM17Ne$B2=$7$?;~$K%(%se(B  
> e$B%3!\<%G%#%s%0\>pJs$rF@$k$3$H$,$G$-$k$h$&$Ke(BVALUEe$B$G$”$kJ}$,$"$j$,e(B  
> e$B$?$$$G$9!#e(B

e$B$H$J$k$He(Brb\_intern2()e$B$O$I$&$J$k$s$G$7$g$&!#e(Brb\_str\_intern()e$B$rBeBXe(B  
e$B$Ke(B?

e$B$b$&$R$H$D!"e(Brb\_sym\_interned\_p()e$B$NI|3h$bH?BP$G$O$J$$$s$G$9$,!"e(BID  
e$B$rJV$94X?t$H$7$F$O$A$g$C$HL\>A0$K0cOB46$J$$$G$9$+!#e(B
