Esempio n. 1
0
  @Override
  protected String getMangledNameWithGenerics(boolean convertArrays) {
    StringBuilder builder = new StringBuilder("_L");

    // to distinguish generics that have the same type name, we have to add packages as well
    for (ModifiedType modifiedType : types) {
      Type type = modifiedType.getType();
      if (type
          instanceof
          TypeParameter) // always print _T to avoid problems with CanEqual<T> and CanEqual<V>
      builder.append("_T");
      else if (type instanceof ArrayType) // only convert the first layer
      {
        if (convertArrays)
          builder.append(((ArrayType) type).convertToGeneric().getMangledNameWithGenerics(false));
        else builder.append(type.getMangledNameWithGenerics(true));
      } else builder.append(type.getMangledNameWithGenerics(true));
      // Type type = modifiedType.getType();
      // shadow.typecheck.Package _package = type.getPackage();
      // builder.append(type.getPackage().getMangledName() + type.getMangledNameWithGenerics());
    }

    builder.append("_R");

    return builder.toString();
  }
Esempio n. 2
0
  public void setNodeType(SimpleNode node) {
    if (types.size() == 1) {
      ModifiedType modifiedType = types.get(0);
      node.setType(modifiedType.getType());
      if (modifiedType.getModifiers().isNullable()) node.addModifier(Modifiers.NULLABLE);

      if (modifiedType.getModifiers().isReadonly()) node.addModifier(Modifiers.READONLY);

      if (modifiedType.getModifiers().isImmutable()) node.addModifier(Modifiers.IMMUTABLE);
    } else node.setType(this);
  }
Esempio n. 3
0
  @Override
  public SequenceType partiallyReplace(List<ModifiedType> values, List<ModifiedType> replacements) {
    SequenceType temp = new SequenceType();

    for (int i = 0; i < types.size(); i++) {
      ModifiedType type = types.get(i);
      if (type != null) {
        SimpleModifiedType dummy =
            new SimpleModifiedType(
                type.getType().partiallyReplace(values, replacements), type.getModifiers());
        temp.add(dummy);
      } else temp.add(null);
    }

    return temp;
  }
Esempio n. 4
0
  public String toString(String begin, String end, int options) {
    StringBuilder builder = new StringBuilder(begin);
    boolean first = true;

    for (ModifiedType type : types) {
      if (first) first = false;
      else builder.append(",");

      if (type != null) {
        builder.append(type.getModifiers().toString());
        builder.append(type.getType().toString(options));
      }
    }

    builder.append(end);

    return builder.toString();
  }
Esempio n. 5
0
  public boolean canAccept(
      ModifiedType inputType, SubstitutionKind substitutionType, List<TypeCheckException> errors) {
    if (substitutionType.equals(SubstitutionKind.BINDING)) {
      SequenceType input = new SequenceType();
      input.add(inputType);
      return canAccept(input, substitutionType, errors);
    } else {
      if (inputType.getType() instanceof SequenceType)
        return canAccept((SequenceType) inputType.getType(), substitutionType, errors);

      // for splats
      for (ModifiedType modifiedType : types) {
        if (!BaseChecker.checkAssignment(
            modifiedType, inputType, AssignmentType.EQUAL, substitutionType, errors)) return false;
      }

      return true;
    }
  }
Esempio n. 6
0
 public Modifiers getModifiers(int i) {
   ModifiedType modifiedType = types.get(i);
   return modifiedType == null ? null : modifiedType.getModifiers();
 }
Esempio n. 7
0
 public Type getType(int i) {
   ModifiedType modifiedType = types.get(i);
   return modifiedType == null ? null : modifiedType.getType();
 }