public override void CaseAGenericType(AGenericType node)
 {
     ContainsNestedGenerics = true;
     base.CaseAGenericType(node);
 }
예제 #2
0
 internal GenericTypes_Cast(AGenericType obj)
 {
     this.obj = obj;
 }
예제 #3
0
 public virtual void OutAGenericType(AGenericType node)
 {
     DefaultOut(node);
 }
 public override void OutAGenericType(AGenericType node)
 {
     if (!(node.GetBase() is ANamedType))
     {
         errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText44")));
         return;
     }
     ANamedType Base = (ANamedType) node.GetBase();
     if (!data.StructTypeLinks.ContainsKey(Base))
     {
         errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText44")));
         return;
     }
     AStructDecl str = data.StructTypeLinks[Base];
     if (str.GetGenericVars().Count != node.GetGenericTypes().Count)
     {
         errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText45"),
                                              false, new ErrorCollection.Error(str.GetName(), LocRM.GetString("ErrorText46") + Util.GetTypeName(str))));
         return;
     }
     LookForGenericVar finder = new LookForGenericVar();
     foreach (PType genericType in node.GetGenericTypes())
     {
         genericType.Apply(finder);
         if (finder.ContainsGenericVar || finder.ContainsNestedGenerics)
         {
             //if (finder.ContainsGenericVar)
                 structsWithGenerics.Add(Util.GetAncestor<AStructDecl>(node));
             if (finder.ContainsNestedGenerics)
             {
                 if (!Util.HasAncestor<AStructDecl>(node) || Util.GetAncestor<AStructDecl>(node).GetGenericVars().Count == 0)
                     needAnotherPass = true;
             }
             return;
         }
     }
     if (!Refferences.ContainsKey(str))
         Refferences[str] = new List<AGenericType>();
     Refferences[str].Add(node);
     base.OutAGenericType(node);
 }
예제 #5
0
 public virtual void CaseAGenericType(AGenericType node)
 {
     DefaultCase(node);
 }
예제 #6
0
 public virtual void InAGenericType(AGenericType node)
 {
     DefaultIn(node);
 }
예제 #7
0
 public override void CaseAGenericType(AGenericType node)
 {
     InAGenericType(node);
     {
         Object[] temp = new Object[node.GetGenericTypes().Count];
         node.GetGenericTypes().CopyTo(temp, 0);
         for (int i = temp.Length - 1; i >= 0; i--)
         {
             ((PType)temp[i]).Apply(this);
         }
     }
     if (node.GetBase() != null)
     {
         node.GetBase().Apply(this);
     }
     if (node.GetToken() != null)
     {
         node.GetToken().Apply(this);
     }
     OutAGenericType(node);
 }
예제 #8
0
 private PType LvalueToType(PLvalue lvalue, IList dynamicOpList, TLt genericToken, IList genericTypes)
 {
     PType type = LvalueToType(lvalue);
     if (genericToken != null)
     {
         type = new AGenericType(genericToken, type, new ArrayList());
         while (genericTypes.Count > 0)
         {
             ((AGenericType) type).GetGenericTypes().Add(genericTypes[0]);
         }
     }
     foreach (PShadyDynamicOps op in dynamicOpList)
     {
         if (op is APointerShadyDynamicOps)
         {
             APointerShadyDynamicOps aop = (APointerShadyDynamicOps) op;
             type = new APointerType(aop.GetToken(), type);
         }
         else if (op is AArrayShadyDynamicOps)
         {
             AArrayShadyDynamicOps aop = (AArrayShadyDynamicOps)op;
             if (aop.GetExp() == null)
                 type = new ADynamicArrayType(aop.GetToken(), type);
             else
                 type = new AArrayTempType(aop.GetToken(), type, aop.GetExp(), null);
         }
     }
     return type;
 }
예제 #9
0
 ArrayList New259()
 {
     ArrayList nodeList = new ArrayList();
     ArrayList nodeArrayList4 = (ArrayList) Pop();
     ArrayList nodeArrayList3 = (ArrayList) Pop();
     ArrayList nodeArrayList2 = (ArrayList) Pop();
     ArrayList nodeArrayList1 = (ArrayList) Pop();
     TypedList listNode5 = new TypedList();
     TLt tltNode2 = (TLt)nodeArrayList2[0];
     PType ptypeNode3 = (PType)nodeArrayList1[0];
     TypedList listNode4 = (TypedList)nodeArrayList3[0];
     if ( listNode4 != null )
     {
     listNode5.AddAll(listNode4);
     }
     AGenericType ptypeNode1 = new AGenericType (
       tltNode2,
       ptypeNode3,
       listNode5
     );
     nodeList.Add(ptypeNode1);
     return nodeList;
 }