public override void InAArrayTempType(AArrayTempType node)
 {
     if (node.GetIntDim() == null && !Util.HasAncestor<ANewExp>(node))
     {
         node = node;
         /*bool valid = true;
         int val = FoldInt(node.GetDimention(), ref valid);
         if (!valid)
         {
             errors.Add(new ErrorCollection.Error(node.GetToken(), "The dimension must be a constant expression."));
             throw new ParserException(null, null);
         }
         node.SetIntDim(new TIntegerLiteral(val.ToString()));*/
     }
     base.InAArrayTempType(node);
 }
 public override void CaseAArrayTempType(AArrayTempType node)
 {
     bool prevFolding = folding;
     int prevValue = value;
     bool wasANewExp = isANewExp;
     isANewExp = Util.HasAncestor<ANewExp>(node);
     if (!isANewExp)
     {
         folding = true;
         value = 0;
         base.CaseAArrayTempType(node);
         if (value <= 0)
         {
             // Using a predefined constant sometimes evaluates to 0. This is a very temporary "fix"
             if (value < 0)
                 errors.Add(new ErrorCollection.Error(node.GetToken(), "Array dimention must be greater than 0."));
             value = 1;
         }
         node.SetIntDim(new TIntegerLiteral(value.ToString()));
     }
     folding = prevFolding;
     value = prevValue;
     isANewExp = wasANewExp;
 }
 public virtual void OutAArrayTempType(AArrayTempType node)
 {
     DefaultOut(node);
 }
 public virtual void InAArrayTempType(AArrayTempType node)
 {
     DefaultIn(node);
 }
 public virtual void CaseAArrayTempType(AArrayTempType node)
 {
     DefaultCase(node);
 }
 public override void CaseAArrayTempType(AArrayTempType node)
 {
     InAArrayTempType(node);
     if (node.GetIntDim() != null)
     {
         node.GetIntDim().Apply(this);
     }
     if (node.GetDimention() != null)
     {
         node.GetDimention().Apply(this);
     }
     if (node.GetType() != null)
     {
         node.GetType().Apply(this);
     }
     if (node.GetToken() != null)
     {
         node.GetToken().Apply(this);
     }
     OutAArrayTempType(node);
 }
 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;
 }
 public override void OutAArrayTempType(AArrayTempType node)
 {
     if (node.Parent() is APointerType && Util.GetAncestor<ANewExp>(node) == null)
     {
         errors.Add(new ErrorCollection.Error(node.GetToken(), currentSourceFile, LocRM.GetString("ErrorText150")));
     }
     base.OutAArrayTempType(node);
 }
 public override void CaseAArrayTempType(AArrayTempType node)
 {
     node.GetType().Apply(this);
     Write("[" + node.GetIntDim().Text + "]");
 }
        public override void CaseAArrayTempType(AArrayTempType node)
        {
            /*if (node.GetDimention() is ALvalueExp && ((ALvalueExp)node.GetDimention()).GetLvalue() is AAmbiguousNameLvalue)
            {
                AAmbiguousNameLvalue lvalue = (AAmbiguousNameLvalue) ((ALvalueExp) node.GetDimention()).GetLvalue();
                ASimpleName name = (ASimpleName) lvalue.GetAmbiguous();
                if (name.GetIdentifier().Text == "PlayerData")
                    node = node;
            }*/
            if (!isInANewExp && !data.IsLiteCompile)
            {
                bool wasFolding = foldIntegerConstants;
                bool foldFailedBefore = foldingFailed;

                foldIntegerConstants = true;
                foldingFailed = false;
                integerConstant = 0;
                integerConstantToken = node.GetToken();
                CheckValidConstExp(node.GetDimention());
                base.CaseAArrayTempType(node);
                foldIntegerConstants = false;
                if (!foldingFailed)
                    node.SetIntDim(new TIntegerLiteral(integerConstant.ToString()));

                foldIntegerConstants = wasFolding;
                foldingFailed = foldFailedBefore;

            }
            else
            {
                base.CaseAArrayTempType(node);
            }
        }
Example #11
0
 ArrayList New255()
 {
     ArrayList nodeList = new ArrayList();
     ArrayList nodeArrayList4 = (ArrayList) Pop();
     ArrayList nodeArrayList3 = (ArrayList) Pop();
     ArrayList nodeArrayList2 = (ArrayList) Pop();
     ArrayList nodeArrayList1 = (ArrayList) Pop();
     TLBracket tlbracketNode2 = (TLBracket)nodeArrayList2[0];
     PType ptypeNode3 = (PType)nodeArrayList1[0];
     PExp pexpNode4 = (PExp)nodeArrayList3[0];
     AArrayTempType ptypeNode1 = new AArrayTempType (
       tlbracketNode2,
       ptypeNode3,
       pexpNode4,
       null
     );
     nodeList.Add(ptypeNode1);
     return nodeList;
 }