blob: 5302f233aac6cdfea9f734b1f3b90575d88633e8 [file] [log] [blame]
/*
* MethodIndex.java
*
* Created on January 1, 2007, 7:39 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package org.jruby.runtime;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author headius
*/
public class MethodIndex {
public static final int NO_INDEX = 0;
public static final int OP_PLUS = 1;
public static final int OP_MINUS = 2;
public static final int OP_LT = 3;
public static final int AREF = 4;
public static final int ASET = 5;
public static final int POP = 6;
public static final int PUSH = 7;
public static final int NIL_P = 8;
public static final int EQUALEQUAL = 9;
public static final int UNSHIFT = 10;
public static final int OP_GE = 11;
public static final int OP_LSHIFT = 12;
public static final int EMPTY_P = 13;
public static final int TO_S = 14;
public static final int TO_I = 15;
public static final int AT = 16;
public static final int TO_STR = 17;
public static final int TO_ARY = 18;
public static final int TO_INT = 19;
public static final int TO_F = 20;
public static final int TO_SYM = 21;
public static final int TO_A = 22;
public static final int HASH = 23;
public static final int OP_GT = 24;
public static final int OP_TIMES = 25;
public static final int OP_LE = 26;
public static final int OP_SPACESHIP = 27;
public static final int LENGTH = 28;
public static final int OP_MATCH = 29;
public static final int OP_EQQ = 30;
public static final int LAST = 31;
public static final int SHIFT = 32;
public static final int EQL_P = 33;
public static final int TO_HASH = 34;
public static final int MAX_METHODS = 35;
public static final String[] NAMES = new String[MAX_METHODS];
public static final Map NUMBERS = new HashMap();
static {
NAMES[NO_INDEX] = "";
NAMES[OP_PLUS] = "+";
NAMES[OP_MINUS] = "-";
NAMES[OP_LT] = "<";
NAMES[AREF] = "[]";
NAMES[ASET] = "[]=";
NAMES[POP] = "pop";
NAMES[PUSH] = "push";
NAMES[NIL_P] = "nil?";
NAMES[EQUALEQUAL] = "==";
NAMES[UNSHIFT] = "unshift";
NAMES[OP_GE] = ">=";
NAMES[OP_LSHIFT] = "<<";
NAMES[EMPTY_P] = "empty?";
NAMES[TO_S] = "to_s";
NAMES[TO_I] = "to_i";
NAMES[AT] = "at";
NAMES[TO_STR] = "to_str";
NAMES[TO_ARY] = "to_ary";
NAMES[TO_INT] = "to_int";
NAMES[TO_F] = "to_f";
NAMES[TO_SYM] = "to_sym";
NAMES[TO_A] = "to_a";
NAMES[HASH] = "hash";
NAMES[OP_GT] = ">";
NAMES[OP_TIMES] = "*";
NAMES[OP_LE] = "<=";
NAMES[OP_SPACESHIP] = "<=>";
NAMES[LENGTH] = "length";
NAMES[OP_MATCH] = "=~";
NAMES[OP_EQQ] = "===";
NAMES[LAST] = "last";
NAMES[SHIFT] = "shift";
NAMES[EQL_P] = "eql?";
NAMES[TO_HASH] = "to_hash";
for (int i = 0; i < MAX_METHODS; i++) {
NUMBERS.put(NAMES[i], new Integer(i));
}
}
/** Creates a new instance of MethodIndex */
public MethodIndex() {
}
public static int getIndex(String methodName) {
// fast lookup for the length 1 messages
switch (methodName.length()) {
case 1:
switch (methodName.charAt(0)) {
case '+': return OP_PLUS;
case '-': return OP_MINUS;
case '<': return OP_LT;
case '>': return OP_GT;
case '*': return OP_TIMES;
default: return NO_INDEX;
}
default:
if (NUMBERS.containsKey(methodName)) return ((Integer)NUMBERS.get(methodName)).intValue();
return NO_INDEX;
}
}
}