Eric Wong <normalperson / yhbt.net> wrote:
> For some method names (include?/delete/key?); I see them often used with
> both core (Array/Hash) and non-core (Set/GDBM) classes.
> We need to be careful with common method names and string literal.
>
> Maybe we may use dynamic instruction rewriting if we detect uses on
> non-core classes and dynamically rewrite opt_str_lit back to putstring.

I think the following solves the problem of improper optimization to
applied to non-core classes:

	http://bogomips.org/ruby.git/patch?id=ab08e19d7a70a0fe

We could even expand the idea for existing opt_* insns.

Having the recv_info array stick around indefinitely might get
wasteful, though.  I suppose we could walk iseq->mark_ary to
pluck it out.

> Note: opt_str_lit has the same insn length as putstring;
> we may rewrite iseq->iseq at runtime.

I'll still try to DRY it up more to make testing easier.

Full diff: http://80x24.org/spew/m/opt-str-lit-v3%40m.txt
(broken out: "opt_str_lit-3" branch on git://bogomips.org/ruby.git)