Exemple #1
0
        //Определение типов данных и формирование порожденных параметров
        public void DefineDataTypes()
        {
            foreach (var node in Expr1.Nodes)
            {
                node.DefineType();
            }

            var last = Expr1.Nodes.Last();

            if (last.Type.DataType != DataType.Void)
            {
                var resVar = Vars["calc"];
                resVar.Type = resVar.Type.Add(last.Type);
            }
            foreach (var node in Expr2.Nodes)
            {
                node.DefineType();
            }
            last = Expr2.Nodes.Last();
            Type = last.Type;
            if (Type is ObjectType || Type is BaseObjectType)
            {
                MetSignals = Keeper.GetMetSignals(last);
                MetProps   = Keeper.GetMetProps(last);
            }
        }
Exemple #2
0
        //Сформировать используемые сигналы и свойства по входам типа объекта
        private void MakeUsedMetSignals()
        {
            for (int i = 0; i < Args.Length; i++)
            {
                var imet = Param.InputsList[i].MetSignals;
                if (imet != null)
                {
                    var amet = Keeper.GetMetSignals(Args[i]);
                    if (amet != null)
                    {
                        foreach (var m in imet.Values)
                        {
                            amet.Add(m);
                        }
                    }
                    if (Args[i].Type is TablikObject)
                    {
                        var ob   = (TablikObject)Args[i].Type;
                        var sigs = ob.ObjectType.Signals;
                        foreach (var sigCode in imet.Values)
                        {
                            if (ob.UsedSignals.Contains(sigs[sigCode]))
                            {
                                ob.UsedSignals.Add(sigs[sigCode]);
                            }
                        }
                    }
                }

                var iprop = Param.InputsList[i].MetProps;
                if (iprop != null)
                {
                    var aprop = Keeper.GetMetProps(Args[i]);
                    if (aprop != null)
                    {
                        foreach (var p in iprop.Values)
                        {
                            aprop.Add(p);
                        }
                    }
                    if (Args[i].Type is TablikObject)
                    {
                        var ob = (TablikObject)Args[i].Type;
                        foreach (var propCode in iprop.Values)
                        {
                            if (ob.UsedProps.ContainsKey(propCode))
                            {
                                ob.UsedProps.Add(propCode, ob.Props[propCode]);
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
        //Определение типа данных
        public override void DefineType()
        {
            var val = Args[0];

            Var.Type = Var.Type.Add(val.Type);
            if (Var.Type.DataType == DataType.Error)
            {
                AddError("Несовместимость типов данных при присвоении переменной");
            }
            Type = new SimpleType(DataType.Void);
            if (Var.Type is ObjectType || Var.Type is BaseObjectType)
            {
                Var.MetSignals = Keeper.GetMetSignals(val);
                Var.MetProps   = Keeper.GetMetProps(val);
            }
        }
Exemple #4
0
 //Определение типа данных
 public override void DefineType()
 {
     if (Parent.Type is TablikObject)
     {
         var ob = (TablikObject)Parent.Type;
         if (ob.Props.ContainsKey(Prop.Text))
         {
             var prop = ob.Props[Prop.Text];
             Type = new SimpleType(prop.DataType);
             if (!ob.UsedProps.ContainsKey(Prop.Text))
             {
                 ob.UsedProps.Add(Prop.Text, prop);
             }
         }
         else
         {
             AddError("Не найдено свойство", Prop);
         }
     }
     else if (Parent.Type is ObjectType || Parent.Type is BaseObjectType)
     {
         var metProps = Keeper.GetMetProps(Parent);
         if (((ITablikSignalType)Parent.Type).Connect.ObjectsColumns.ContainsKey(Prop.Text))
         {
             AddError("Не найдено свойство", Prop);
         }
         else
         {
             Type = new SimpleType(((ITablikSignalType)Parent.Type).Connect.ObjectsColumns[Prop.Text]);
             if (metProps != null)
             {
                 metProps.Add(Prop.Text);
             }
         }
     }
     else
     {
         AddError("Недопустимое получение свойства", Prop);
     }
 }