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); } }
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; }