private void readInstantiatedField(Field field, TypeInstantiation inst) {
    CompoundType compound = inst.getBaseType();

    buffer.append(AccessorNameEmitter.getSetterName(field));
    buffer.append("(new ");
    buffer.append(compound.getName());
    buffer.append("(__in, __cc");
    appendArguments(buffer, inst);
    buffer.append("));");
  }
  /**
   * Emits a type cast for passing an argument to a parameterized type.
   *
   * @param type compound type with parameters
   * @param expr argument expression in type instantiation
   * @param paramIndex index of argument in argument list
   */
  private static boolean emitTypeCast(
      StringBuilder buffer, CompoundType type, Expression expr, int paramIndex) {
    boolean cast = false;
    Parameter param = type.getParameterAt(paramIndex);
    TypeInterface paramType = TypeReference.getBaseType(param.getType());

    if (paramType instanceof StdIntegerType) {
      StdIntegerType intType = (StdIntegerType) paramType;
      switch (intType.getType()) {
        case DataScriptParserTokenTypes.INT8:
          buffer.append("(byte)(");
          cast = true;
          break;

        case DataScriptParserTokenTypes.UINT8:
        case DataScriptParserTokenTypes.INT16:
          buffer.append("(short)(");
          cast = true;
          break;
        default:
          // nothing
      }
    }
    return cast;
  }
  public void buildParameterLists() {
    StringBuilder formal = new StringBuilder();
    StringBuilder actual = new StringBuilder();
    CompoundType compound = getCompoundType();
    for (Parameter param : compound.getParameters()) {
      String paramName = param.getName();
      TypeInterface paramType = TypeReference.getBaseType(param.getType());

      String typeName = TypeNameEmitter.getTypeName(paramType);
      formal.append(", ");
      formal.append(typeName);
      formal.append(" ");
      formal.append(paramName);

      actual.append(", ");
      actual.append(paramName);
    }
    formalParams = formal.toString();
    actualParams = actual.toString();
  }
 private void setParameters(String lhs, TypeInstantiation inst) {
   CompoundType compound = inst.getBaseType();
   Iterable<Expression> arguments = inst.getArguments();
   if (arguments != null) {
     int argIndex = 0;
     for (Expression arg : arguments) {
       Parameter param = compound.getParameterAt(argIndex);
       String setter = AccessorNameEmitter.getSetterName(param);
       buffer.append(lhs);
       buffer.append(".");
       buffer.append(setter);
       buffer.append("(");
       boolean cast = emitTypeCast(buffer, compound, arg, argIndex);
       String javaArg = exprEmitter.emit(arg);
       buffer.append(javaArg);
       if (cast) {
         buffer.append(")");
       }
       buffer.append(");\n                ");
       argIndex++;
     }
   }
 }
 private void readCompoundField(Field field, CompoundType type) {
   buffer.append(AccessorNameEmitter.getSetterName(field));
   buffer.append("(new ");
   buffer.append(type.getName());
   buffer.append("(__in, __cc));");
 }