Ejemplo n.º 1
0
 public override void OutAIfExp(AIfExp node)
 {
     if (!Util.HasAncestor<PStm>(node))
         errors.Add(new ErrorCollection.Error(node.GetToken(), LocRM.GetString("ErrorText178")));
     base.OutAIfExp(node);
 }
Ejemplo n.º 2
0
 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);
        }