Skip to content

Commit bd08b29

Browse files
committed
* compile.c (iseq_specialized_instruction): DRY and replace chain
of if-else with switch for special instructions. based on a patch by Vasfed. ruby#105 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 43aa8a1 commit bd08b29

File tree

2 files changed

+33
-55
lines changed

2 files changed

+33
-55
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Mon Mar 19 15:20:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
2+
3+
* compile.c (iseq_specialized_instruction): DRY and replace chain
4+
of if-else with switch for special instructions. based on a
5+
patch by Vasfed. https://github.com/ruby/ruby/pull/105
6+
17
Mon Mar 19 15:05:54 2012 URABE Shyouhei <shyouhei@ruby-lang.org>
28

39
* test/test_pty.rb: same as r29280, skip tests when PTY allocation

compile.c

Lines changed: 27 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1870,68 +1870,40 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj)
18701870
VALUE block = OPERAND_AT(iobj, 2);
18711871
VALUE flag = OPERAND_AT(iobj, 3);
18721872

1873-
/* TODO: should be more sophisticated search */
1873+
#define SP_INSN(opt) insn_set_specialized_instruction(iseq, iobj, BIN(opt_##opt))
1874+
18741875
if (block == 0 && flag == INT2FIX(0)) {
1875-
if (argc == 0) {
1876-
if (mid == idLength) {
1877-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_length));
1878-
}
1879-
else if (mid == idSize) {
1880-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_size));
1881-
}
1882-
else if (mid == idSucc) {
1883-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_succ));
1884-
}
1885-
else if (mid == idNot) {
1886-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_not));
1887-
}
1888-
}
1889-
else if (argc == 1) {
1890-
if (0) {
1891-
}
1892-
else if (mid == idPLUS) {
1893-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_plus));
1894-
}
1895-
else if (mid == idMINUS) {
1896-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_minus));
1897-
}
1898-
else if (mid == idMULT) {
1899-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_mult));
1900-
}
1901-
else if (mid == idDIV) {
1902-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_div));
1876+
switch (argc) {
1877+
case 0:
1878+
switch (mid) {
1879+
case idLength: SP_INSN(length); break;
1880+
case idSize: SP_INSN(size); break;
1881+
case idSucc: SP_INSN(succ); break;
1882+
case idNot: SP_INSN(not); break;
19031883
}
1904-
else if (mid == idMOD) {
1905-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_mod));
1906-
}
1907-
else if (mid == idEq) {
1908-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_eq));
1909-
}
1910-
else if (mid == idNeq) {
1911-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_neq));
1912-
}
1913-
else if (mid == idLT) {
1914-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_lt));
1915-
}
1916-
else if (mid == idLE) {
1917-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_le));
1918-
}
1919-
else if (mid == idGT) {
1920-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_gt));
1921-
}
1922-
else if (mid == idGE) {
1923-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_ge));
1924-
}
1925-
else if (mid == idLTLT) {
1926-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_ltlt));
1927-
}
1928-
else if (mid == idAREF) {
1929-
insn_set_specialized_instruction(iseq, iobj, BIN(opt_aref));
1884+
break;
1885+
case 1:
1886+
switch (mid) {
1887+
case idPLUS: SP_INSN(plus); break;
1888+
case idMINUS: SP_INSN(minus); break;
1889+
case idMULT: SP_INSN(mult); break;
1890+
case idDIV: SP_INSN(div); break;
1891+
case idMOD: SP_INSN(mod); break;
1892+
case idEq: SP_INSN(eq); break;
1893+
case idNeq: SP_INSN(neq); break;
1894+
case idLT: SP_INSN(lt); break;
1895+
case idLE: SP_INSN(le); break;
1896+
case idGT: SP_INSN(gt); break;
1897+
case idGE: SP_INSN(ge); break;
1898+
case idLTLT: SP_INSN(ltlt); break;
1899+
case idAREF: SP_INSN(aref); break;
19301900
}
1901+
break;
19311902
}
19321903
}
19331904
}
19341905
return COMPILE_OK;
1906+
#undef SP_INSN
19351907
}
19361908

19371909
static int

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy