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