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