src/main/java/org/ucmtwine/proxy/ScriptProxy.java
private void writeFunctionTables(List<String> functionNames, List<ParameterMarshaller> functionParams,
      List<Integer> returnTypes) {
    m_functionTable = functionNames.toArray(new String[functionNames.size()]);

    int maxParams = 0;

    // find the max of all parameter counts
    for (int i = 0; i < functionParams.size(); i++) {
      int paramCount = functionParams.get(i).getParameterCount(false);
      if (paramCount > maxParams) {
        maxParams = paramCount;
      }
    }

    m_functionDefinitionTable = new int[functionParams.size()][maxParams + ParameterMarshaller.EXTRA_FUNC_DEF_VALUES];

    // output params now
    for (int i = 0; i < functionParams.size(); i++) {
      m_functionDefinitionTable[i] = functionParams.get(i).getFunctionDefinitionArray(i, maxParams, returnTypes.get(i));
    }
  }
private void writeFunctionTables(List<String> functionNames, List<ParameterMarshaller> functionParams,
      List<Integer> returnTypes) {
    m_functionTable = functionNames.toArray(new String[functionNames.size()]);

    int maxParams = 0;

    // find the max of all parameter counts
    for (int i = 0; i < functionParams.size(); i++) {
      int paramCount = functionParams.get(i).getParameterCount(false);
      if (paramCount > maxParams) {
        maxParams = paramCount;
      }
    }

    m_functionDefinitionTable = new int[functionParams.size()][maxParams + ParameterMarshaller.EXTRA_FUNC_DEF_VALUES];

    // output params now
    for (int i = 0; i < functionParams.size(); i++) {
      m_functionDefinitionTable[i] = functionParams.get(i).getFunctionDefinitionArray(i, maxParams, returnTypes.get(i));
    }
  }
Build a static int[m][n] array of function info from a dynamic array where
n changes size. The last parameter will always remain the last parameter
but any short rows will pad their parameter types as -1 (type not
specified)

@param functionParams