Пример #1
0
  /**
   * 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;
  }