コード例 #1
0
ファイル: SeqTypeFinder.java プロジェクト: henriknj/overture
  @Override
  public SSeqType caseAUnionType(AUnionType type) throws AnalysisException {
    // return AUnionTypeAssistantTC.getSeq(type);
    if (!type.getSeqDone()) {
      type.setSeqDone(true); // Mark early to avoid recursion.
      // type.setSeqType(PTypeAssistantTC.getSeq(AstFactory.newAUnknownType(type.getLocation())));
      type.setSeqType(
          af.createPTypeAssistant().getSeq(AstFactory.newAUnknownType(type.getLocation())));
      PTypeSet set = new PTypeSet(af);

      for (PType t : type.getTypes()) {
        if (af.createPTypeAssistant().isSeq(t)) {
          set.add(t.apply(THIS).getSeqof());
        }
      }

      type.setSeqType(
          set.isEmpty()
              ? null
              : AstFactory.newASeqSeqType(type.getLocation(), set.getType(type.getLocation())));
    }

    return type.getSeqType();
  }