Skip to content

Commit 2155057

Browse files
authored
Reduce Array#include? allocations for literals
1 parent 6803354 commit 2155057

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

compile.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4357,7 +4357,9 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj)
43574357
INSN *niobj = (INSN *)iobj->link.next;
43584358
if ((IS_INSN_ID(niobj, getlocal) ||
43594359
IS_INSN_ID(niobj, getinstancevariable) ||
4360-
IS_INSN_ID(niobj, putself)) &&
4360+
IS_INSN_ID(niobj, putself) ||
4361+
IS_INSN_ID(niobj, putobject) ||
4362+
IS_INSN_ID(niobj, putnil)) &&
43614363
IS_NEXT_INSN_ID(&niobj->link, send)) {
43624364

43634365
LINK_ELEMENT *sendobj = &(niobj->link); // Below we call ->next;

test/ruby/test_optimization.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,13 @@ def test_opt_duparray_send_include_p
11191119
'@c = :b; [:a, :b].include?(@c)',
11201120
'@c = "b"; %i[a b].include?(@c.to_sym)',
11211121
'[:a, :b].include?(self) == false',
1122+
"[:a, :b].include?(:a)",
1123+
"[true, false].include?(false)",
1124+
"[1, nil].include?(nil)",
1125+
"# frozen_string_literal: true\n['a', 'b'].include?('a')",
1126+
"# frozen_string_literal: true\n['a', 'b'].include?('c') == false",
1127+
"# frozen_string_literal: true\n['a', 'b'].include?(2) == false",
1128+
"# frozen_string_literal: true\n['a', 'b'].include?(/a/) == false",
11221129
].each do |code|
11231130
iseq = RubyVM::InstructionSequence.compile(code)
11241131
insn = iseq.disasm

0 commit comments

Comments
 (0)