/* * 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; } } }