public override void OutAIfExp(AIfExp node) { if (!Util.HasAncestor<PStm>(node)) errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText178"))); base.OutAIfExp(node); }
public override void CaseAIfExp(AIfExp node) { InAIfExp(node); if (node.GetElse() != null) { node.GetElse().Apply(this); } if (node.GetThen() != null) { node.GetThen().Apply(this); } if (node.GetCond() != null) { node.GetCond().Apply(this); } if (node.GetToken() != null) { node.GetToken().Apply(this); } OutAIfExp(node); }
public override void OutAIfExp(AIfExp node) { PType thenType = data.ExpTypes[node.GetThen()]; PType elseType = data.ExpTypes[node.GetElse()]; if (thenType is ANamedType && elseType is ANamedType) { ANamedType aThenType = (ANamedType) thenType; ANamedType aElseType = (ANamedType) elseType; if (aThenType.IsPrimitive("int") && aElseType.IsPrimitive("byte")) { data.ExpTypes[node] = thenType; return; } } if (Assignable(thenType, elseType)) data.ExpTypes[node] = elseType; else if (Assignable(data.ExpTypes[node.GetElse()], data.ExpTypes[node.GetThen()])) data.ExpTypes[node] = data.ExpTypes[node.GetThen()]; else { errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText135"))); //So execution can continue data.ExpTypes[node] = data.ExpTypes[node.GetThen()]; } base.OutAIfExp(node); }