/** * Creates a function definition and declaration in one fell swoop, all in global scope. This * isn't javascript, you know. * * @param name Function name * @param returnType Function return type * @param paramTypes Function parameter types or empty list for void * @return Indication of success */ public boolean defineFunction(String name, Type returnType, List<Type> paramTypes) { SymbolTable root = this; // getRoot(); Symbol s = root.getSymbol(name); if (s != null) { if (s.isFunction() && !s.defined && paramTypes.equals(s.signature.y) && returnType.equals(s.signature.x)) { s.defined = true; return true; } else { return false; } } s = new Symbol(name, null, new Pair<Type, List<Type>>(returnType, paramTypes)); s.defined = true; root.putSymbol(s); return true; }