# Method\_missing in Ruby 1.9.0

**URL:** <https://www.ruby-forum.com/t/method-missing-in-ruby-1-9-0/67375>\
**Category:** Development\
**Created:** [September 3, 2006, 3:01am UTC](https://www.ruby-forum.com/t/method-missing-in-ruby-1-9-0/67375 "2006-09-03T03:01:34Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [September 3, 2006, 3:01am UTC](https://www.ruby-forum.com/t/method-missing-in-ruby-1-9-0/67375/1 "2006-09-03T03:01:34Z")

</div>

e$B=uED$G$9!#e(B

e$B\<!$N%9%/%j%W%H$,!"e(Bruby 1.9.0 (2006-09-03)e$B$Ge(B  
falsee$B$H=PNO$5$l$^$9!#e(B  
class Foo  
def method\_missing(id, \*arg)  
p id # =\> false  
end  
end

foo = Foo.new  
foo.visible = true

e$B\<B9T7k2Le(B  
W: ~/work\>ruby19 -v mm.rb  
ruby 1.9.0 (2006-09-03) [i386-cygwin]  
false  
W: ~/work\>ruby -v mm.rb  
ruby 1.8.5 (2006-09-01) [i386-cygwin]  
:visible=

e$B=uEDe(B e$B2m5\*e(B

---

<div class="post-metadata">

**Author:** ![Masaki\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/58956e/32.png) [@Masaki\_S](https://www.ruby-forum.com/u/Masaki_S)\
**Post date:** [September 4, 2006, 2:43pm UTC](https://www.ruby-forum.com/t/method-missing-in-ruby-1-9-0/67375/2 "2006-09-04T14:43:27Z")

</div>

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

At Sun, 3 Sep 2006 09:55:59 +0900,  
Masaki S. wrote in [ruby-dev:29420]:

> e$B\<!$N%9%/%j%W%H$,!"e(Bruby 1.9.0 (2006-09-03)e$B$Ge(B falsee$B$H=PNO$5$l$^$9!#e(B  
> class Foo  
> def method\_missing(id, \*arg)  
> p id # =\> false  
> end  
> end
> 
> foo = Foo.new  
> foo.visible = true

e$B$?$^$?$^e(Bfalse(== 0)e$B$K$J$C$?$@$1$G!"\<B:]$K$OITDjCM$G$9$M!#e(B

# Index: gc.c

RCS file: /cvs/ruby/src/ruby/gc.c,v  
retrieving revision 1.248  
diff -p -U 2 -r1.248 gc.c  
— gc.c 2 Sep 2006 15:05:27 -0000 1.248  
+++ gc.c 3 Sep 2006 01:12:58 -0000  
@@ -1382,5 +1382,5 @@ garbage\_collect(void)  
#endif  
rb\_gc\_mark\_threads();

- rb\_gc\_mark\_symbols();

- rb\_gc\_mark\_symbols(0);

- 

```
  enum lex_state_e state = lex_state;
  lex_state = EXPR_ARG;
  return tLAMBDA;

```

@@ -8379,4 +8378,13 @@ rb\_symname\_p(const char \*name)  
}

+static void  
+register\_symid(VALUE sym, ID id)  
+{

- RBASIC(sym)-\>klass = rb\_cSymbol;
- OBJ\_FREEZE(sym);
- st\_add\_direct(global\_symbols.sym\_id, (st\_data\_t)sym, id);
- st\_add\_direct(global\_symbols.id\_sym, id, (st\_data\_t)sym);  
+}
- 

ID  
rb\_intern2(const char \*name, long len)  
@@ -8451,8 +8459,5 @@ rb\_intern2(const char \*name, long len)  
id |= ++global\_symbols.last\_id \<\< ID\_SCOPE\_SHIFT;  
id\_register:

- RBASIC(sym)-\>klass = rb\_cSymbol;
- OBJ\_FREEZE(sym);
- st\_add\_direct(global\_symbols.sym\_id, (st\_data\_t)sym, id);
- st\_add\_direct(global\_symbols.id\_sym, id, (st\_data\_t)sym);

- register\_symid(sym, id);  
return id;  
}  
@@ -8467,12 +8472,25 @@ VALUE  
rb\_id2sym(ID id)  
{

- VALUE data;

- VALUE sym;

- st\_data\_t data;

- if (!RBASIC(data)-\>klass) {
- 

```
  RBASIC(data)->klass = rb_cSymbol;

```

- sym = (VALUE)data;
- if (!RBASIC(sym)-\>klass) {
- 

```
  RBASIC(sym)->klass = rb_cSymbol;

```

}

- return data;  
}

- else {
- if (!is\_attrset\_id(id)) return Qnil;
- id &= ~ID\_SCOPE\_MASK;
- if (!st\_lookup(global\_symbols.id\_sym, (id | ID\_LOCAL), &data) &&
- 

```
  !st_lookup(global_symbols.id_sym, (id | ID_CONST), &data)) {

```

- 

```
  return Qnil;

```

- }
- sym = rb\_str\_dup((VALUE)data);
- rb\_str\_cat(sym, “=”, 1);
- register\_symid(sym, (id | ID\_ATTRSET));
- }
- return sym;  
}

@@ -8490,6 +8508,5 @@ const char \*  
rb\_id2name(ID id)  
{

- const char \*name;
- st\_data\_t data;

- VALUE sym;

- if (st\_lookup(global\_symbols.id\_sym, id, &data))
- return RSTRING\_PTR(data);
- 
- if (is\_attrset\_id(id)) {
- ID id2 = (id & ~ID\_SCOPE\_MASK) | ID\_LOCAL;
- 
- 

```
 again:

```

- name = rb\_id2name(id2);
- if (name) {
- 

```
  char *buf = ALLOCA_N(char, strlen(name)+2);

```

- 
- 

```
  strcpy(buf, name);

```

- 

```
  strcat(buf, "=");

```

- 

```
  rb_intern(buf);

```

- 

```
  return rb_id2name(id);

```

- }
- if (is\_local\_id(id2)) {
- 

```
  id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;

```

- 

```
  goto again;

```

- }

- sym = rb\_id2sym(id);
- if (!NIL\_P(sym)) {
- return RSTRING\_PTR(sym);  
}  
return 0;
