/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.mmtk.harness.lang.parser; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.mmtk.harness.lang.Trace; import org.mmtk.harness.lang.ast.Method; import org.mmtk.harness.lang.ast.NormalMethod; /** * Parser method table. */ public class MethodTable { private Map<String, Method> table = new HashMap<String, Method>(); MethodTable(Method...methods) { for (Method method : methods) { add(method); } } /** * Add a new method * @param m The method to add */ public void add(Method m) { Trace.trace(Trace.Item.PARSER,"defining method %s", m.getName()); if (SymbolTable.reservedWords.contains(m.getName())) throw new RuntimeException(m.getName() + " is a reserved word"); if (table.containsKey(m.getName())) throw new RuntimeException("Method " + m.getName() + " already defined"); table.put(m.getName(), m); } /** * @param name The name of the method * @return The method with the given name */ public Method get(String name) { if (!table.containsKey(name)) throw new RuntimeException("Method " + name + " not found"); return table.get(name); } /** * @return The normal (ie not intrinsic) methods */ public Iterable<NormalMethod> normalMethods() { List<NormalMethod> result = new ArrayList<NormalMethod>(); for (Method m : table.values()) { if (m instanceof NormalMethod) { result.add((NormalMethod)m); } } return result; } }