001: /*
002: * MethodSelectorTable.java
003: *
004: * Created on January 1, 2007, 7:45 PM
005: *
006: * To change this template, choose Tools | Template Manager
007: * and open the template in the editor.
008: */
009:
010: package org.jruby.runtime;
011:
012: import org.jruby.RubyArray;
013: import org.jruby.RubyBignum;
014: import org.jruby.RubyClass;
015: import org.jruby.RubyFixnum;
016: import org.jruby.RubyHash;
017: import org.jruby.RubyModule;
018: import org.jruby.RubyRegexp;
019: import org.jruby.RubyString;
020: import org.jruby.RubySymbol;
021:
022: /**
023: *
024: * @author headius
025: */
026: public class MethodSelectorTable {
027: public final byte[][] table = new byte[ClassIndex.MAX_CLASSES][MethodIndex.MAX_METHODS];
028:
029: public void init() {
030: // Fixnum
031: table[ClassIndex.FIXNUM] = new byte[MethodIndex.MAX_METHODS];
032: table[ClassIndex.FIXNUM][MethodIndex.OP_PLUS] = RubyFixnum.OP_PLUS_SWITCHVALUE;
033: table[ClassIndex.FIXNUM][MethodIndex.OP_MINUS] = RubyFixnum.OP_MINUS_SWITCHVALUE;
034: table[ClassIndex.FIXNUM][MethodIndex.OP_LT] = RubyFixnum.OP_LT_SWITCHVALUE;
035: table[ClassIndex.FIXNUM][MethodIndex.TO_S] = RubyFixnum.TO_S_SWITCHVALUE;
036: table[ClassIndex.FIXNUM][MethodIndex.TO_I] = RubyFixnum.TO_I_SWITCHVALUE;
037: table[ClassIndex.FIXNUM][MethodIndex.TO_INT] = RubyFixnum.TO_INT_SWITCHVALUE;
038: table[ClassIndex.FIXNUM][MethodIndex.HASH] = RubyFixnum.HASH_SWITCHVALUE;
039: table[ClassIndex.FIXNUM][MethodIndex.OP_GT] = RubyFixnum.OP_GT_SWITCHVALUE;
040: table[ClassIndex.FIXNUM][MethodIndex.OP_TIMES] = RubyFixnum.OP_TIMES_SWITCHVALUE;
041: table[ClassIndex.FIXNUM][MethodIndex.OP_LE] = RubyFixnum.OP_LE_SWITCHVALUE;
042: table[ClassIndex.FIXNUM][MethodIndex.OP_SPACESHIP] = RubyFixnum.OP_SPACESHIP_SWITCHVALUE;
043: table[ClassIndex.FIXNUM][MethodIndex.INSPECT] = RubyFixnum.INSPECT_SWITCHVALUE;
044:
045: // Bignum
046: table[ClassIndex.BIGNUM] = new byte[MethodIndex.MAX_METHODS];
047: table[ClassIndex.BIGNUM][MethodIndex.OP_PLUS] = RubyBignum.OP_PLUS_SWITCHVALUE;
048: table[ClassIndex.BIGNUM][MethodIndex.OP_MINUS] = RubyBignum.OP_MINUS_SWITCHVALUE;
049: table[ClassIndex.BIGNUM][MethodIndex.OP_LT] = RubyBignum.OP_LT_SWITCHVALUE;
050: table[ClassIndex.BIGNUM][MethodIndex.TO_S] = RubyBignum.TO_S_SWITCHVALUE;
051: table[ClassIndex.BIGNUM][MethodIndex.TO_I] = RubyBignum.TO_I_SWITCHVALUE;
052: table[ClassIndex.BIGNUM][MethodIndex.HASH] = RubyBignum.HASH_SWITCHVALUE;
053: table[ClassIndex.BIGNUM][MethodIndex.EQUALEQUAL] = RubyBignum.EQUALEQUAL_SWITCHVALUE;
054: table[ClassIndex.BIGNUM][MethodIndex.OP_SPACESHIP] = RubyBignum.OP_SPACESHIP_SWITCHVALUE;
055: table[ClassIndex.BIGNUM][MethodIndex.INSPECT] = RubyBignum.INSPECT_SWITCHVALUE;
056:
057: // Array
058: table[ClassIndex.ARRAY] = new byte[MethodIndex.MAX_METHODS];
059: table[ClassIndex.ARRAY][MethodIndex.OP_PLUS] = RubyArray.OP_PLUS_SWITCHVALUE;
060: table[ClassIndex.ARRAY][MethodIndex.AREF] = RubyArray.AREF_SWITCHVALUE;
061: table[ClassIndex.ARRAY][MethodIndex.ASET] = RubyArray.ASET_SWITCHVALUE;
062: table[ClassIndex.ARRAY][MethodIndex.POP] = RubyArray.POP_SWITCHVALUE;
063: table[ClassIndex.ARRAY][MethodIndex.PUSH] = RubyArray.PUSH_SWITCHVALUE;
064: table[ClassIndex.ARRAY][MethodIndex.NIL_P] = RubyArray.NIL_P_SWITCHVALUE;
065: table[ClassIndex.ARRAY][MethodIndex.EQUALEQUAL] = RubyArray.EQUALEQUAL_SWITCHVALUE;
066: table[ClassIndex.ARRAY][MethodIndex.UNSHIFT] = RubyArray.UNSHIFT_SWITCHVALUE;
067: table[ClassIndex.ARRAY][MethodIndex.OP_LSHIFT] = RubyArray.OP_LSHIFT_SWITCHVALUE;
068: table[ClassIndex.ARRAY][MethodIndex.EMPTY_P] = RubyArray.EMPTY_P_SWITCHVALUE;
069: table[ClassIndex.ARRAY][MethodIndex.TO_S] = RubyArray.TO_S_SWITCHVALUE;
070: table[ClassIndex.ARRAY][MethodIndex.AT] = RubyArray.AT_SWITCHVALUE;
071: table[ClassIndex.ARRAY][MethodIndex.TO_ARY] = RubyArray.TO_ARY_SWITCHVALUE;
072: table[ClassIndex.ARRAY][MethodIndex.TO_A] = RubyArray.TO_A_SWITCHVALUE;
073: table[ClassIndex.ARRAY][MethodIndex.HASH] = RubyArray.HASH_SWITCHVALUE;
074: table[ClassIndex.ARRAY][MethodIndex.LENGTH] = RubyArray.LENGTH_SWITCHVALUE;
075: table[ClassIndex.ARRAY][MethodIndex.LAST] = RubyArray.LAST_SWITCHVALUE;
076: table[ClassIndex.ARRAY][MethodIndex.SHIFT] = RubyArray.SHIFT_SWITCHVALUE;
077: table[ClassIndex.ARRAY][MethodIndex.OP_SPACESHIP] = RubyArray.OP_SPACESHIP_SWITCHVALUE;
078: table[ClassIndex.ARRAY][MethodIndex.INSPECT] = RubyArray.INSPECT_SWITCHVALUE;
079:
080: // String
081: table[ClassIndex.STRING] = new byte[MethodIndex.MAX_METHODS];
082: table[ClassIndex.STRING][MethodIndex.OP_PLUS] = RubyString.OP_PLUS_SWITCHVALUE;
083: table[ClassIndex.STRING][MethodIndex.OP_LT] = RubyString.OP_LT_SWITCHVALUE;
084: table[ClassIndex.STRING][MethodIndex.AREF] = RubyString.AREF_SWITCHVALUE;
085: table[ClassIndex.STRING][MethodIndex.ASET] = RubyString.ASET_SWITCHVALUE;
086: table[ClassIndex.STRING][MethodIndex.NIL_P] = RubyString.NIL_P_SWITCHVALUE;
087: table[ClassIndex.STRING][MethodIndex.EQUALEQUAL] = RubyString.EQUALEQUAL_SWITCHVALUE;
088: table[ClassIndex.STRING][MethodIndex.OP_GE] = RubyString.OP_GE_SWITCHVALUE;
089: table[ClassIndex.STRING][MethodIndex.OP_LSHIFT] = RubyString.OP_LSHIFT_SWITCHVALUE;
090: table[ClassIndex.STRING][MethodIndex.EMPTY_P] = RubyString.EMPTY_P_SWITCHVALUE;
091: table[ClassIndex.STRING][MethodIndex.TO_S] = RubyString.TO_S_SWITCHVALUE;
092: table[ClassIndex.STRING][MethodIndex.TO_I] = RubyString.TO_I_SWITCHVALUE;
093: table[ClassIndex.STRING][MethodIndex.TO_STR] = RubyString.TO_STR_SWITCHVALUE;
094: table[ClassIndex.STRING][MethodIndex.TO_SYM] = RubyString.TO_SYM_SWITCHVALUE;
095: table[ClassIndex.STRING][MethodIndex.HASH] = RubyString.HASH_SWITCHVALUE;
096: table[ClassIndex.STRING][MethodIndex.OP_GT] = RubyString.OP_GT_SWITCHVALUE;
097: table[ClassIndex.STRING][MethodIndex.OP_TIMES] = RubyString.OP_TIMES_SWITCHVALUE;
098: table[ClassIndex.STRING][MethodIndex.OP_LE] = RubyString.OP_LE_SWITCHVALUE;
099: table[ClassIndex.STRING][MethodIndex.LENGTH] = RubyString.LENGTH_SWITCHVALUE;
100: table[ClassIndex.STRING][MethodIndex.OP_MATCH] = RubyString.MATCH_SWITCHVALUE;
101: table[ClassIndex.STRING][MethodIndex.OP_EQQ] = RubyString.EQQ_SWITCHVALUE;
102: table[ClassIndex.STRING][MethodIndex.OP_SPACESHIP] = RubyString.OP_SPACESHIP_SWITCHVALUE;
103: table[ClassIndex.STRING][MethodIndex.INSPECT] = RubyString.INSPECT_SWITCHVALUE;
104:
105: // Symbol
106: table[ClassIndex.SYMBOL] = new byte[MethodIndex.MAX_METHODS];
107: table[ClassIndex.SYMBOL][MethodIndex.NIL_P] = RubySymbol.NIL_P_SWITCHVALUE;
108: table[ClassIndex.SYMBOL][MethodIndex.EQUALEQUAL] = RubySymbol.EQUALEQUAL_SWITCHVALUE;
109: table[ClassIndex.SYMBOL][MethodIndex.TO_S] = RubySymbol.TO_S_SWITCHVALUE;
110: table[ClassIndex.SYMBOL][MethodIndex.TO_I] = RubySymbol.TO_I_SWITCHVALUE;
111: table[ClassIndex.SYMBOL][MethodIndex.TO_SYM] = RubySymbol.TO_SYM_SWITCHVALUE;
112: table[ClassIndex.SYMBOL][MethodIndex.HASH] = RubySymbol.HASH_SWITCHVALUE;
113: table[ClassIndex.SYMBOL][MethodIndex.INSPECT] = RubySymbol.INSPECT_SWITCHVALUE;
114:
115: // Regexp
116: table[ClassIndex.REGEXP] = new byte[MethodIndex.MAX_METHODS];
117: table[ClassIndex.REGEXP][MethodIndex.EQUALEQUAL] = RubyRegexp.EQUALEQUAL_SWITCHVALUE;
118: table[ClassIndex.REGEXP][MethodIndex.NIL_P] = RubyRegexp.NIL_P_SWITCHVALUE;
119: table[ClassIndex.REGEXP][MethodIndex.TO_S] = RubyRegexp.TO_S_SWITCHVALUE;
120: table[ClassIndex.REGEXP][MethodIndex.HASH] = RubyRegexp.HASH_SWITCHVALUE;
121: table[ClassIndex.REGEXP][MethodIndex.OP_MATCH] = RubyRegexp.MATCH_SWITCHVALUE;
122: table[ClassIndex.REGEXP][MethodIndex.OP_EQQ] = RubyRegexp.EQQ_SWITCHVALUE;
123: table[ClassIndex.REGEXP][MethodIndex.INSPECT] = RubyRegexp.INSPECT_SWITCHVALUE;
124:
125: // Hash
126: table[ClassIndex.HASH] = new byte[MethodIndex.MAX_METHODS];
127: table[ClassIndex.HASH][MethodIndex.AREF] = RubyHash.AREF_SWITCHVALUE;
128: table[ClassIndex.HASH][MethodIndex.ASET] = RubyHash.ASET_SWITCHVALUE;
129: table[ClassIndex.HASH][MethodIndex.DEFAULT] = RubyHash.DEFAULT_SWITCHVALUE;
130: table[ClassIndex.HASH][MethodIndex.NIL_P] = RubyHash.NIL_P_SWITCHVALUE;
131: table[ClassIndex.HASH][MethodIndex.EQUALEQUAL] = RubyHash.EQUALEQUAL_SWITCHVALUE;
132: table[ClassIndex.HASH][MethodIndex.EMPTY_P] = RubyHash.EMPTY_P_SWITCHVALUE;
133: table[ClassIndex.HASH][MethodIndex.TO_S] = RubyHash.TO_S_SWITCHVALUE;
134: table[ClassIndex.HASH][MethodIndex.TO_A] = RubyHash.TO_A_SWITCHVALUE;
135: table[ClassIndex.HASH][MethodIndex.HASH] = RubyHash.HASH_SWITCHVALUE;
136: table[ClassIndex.HASH][MethodIndex.LENGTH] = RubyHash.LENGTH_SWITCHVALUE;
137: table[ClassIndex.HASH][MethodIndex.TO_HASH] = RubyHash.TO_HASH_SWITCHVALUE;
138: table[ClassIndex.HASH][MethodIndex.EQL_P] = RubyHash.EQL_P_SWITCHVALUE;
139: table[ClassIndex.HASH][MethodIndex.INSPECT] = RubyHash.INSPECT_SWITCHVALUE;
140:
141: // Module
142: table[ClassIndex.MODULE] = new byte[MethodIndex.MAX_METHODS];
143: table[ClassIndex.MODULE][MethodIndex.OP_EQQ] = RubyModule.EQQ_SWITCHVALUE;
144: table[ClassIndex.MODULE][MethodIndex.INSPECT] = RubyModule.INSPECT_SWITCHVALUE;
145:
146: // Class
147: table[ClassIndex.CLASS] = new byte[MethodIndex.MAX_METHODS];
148: table[ClassIndex.CLASS][MethodIndex.OP_EQQ] = RubyClass.EQQ_SWITCHVALUE;
149: table[ClassIndex.CLASS][MethodIndex.INSPECT] = RubyClass.INSPECT_SWITCHVALUE;
150: }
151: }
|