Exemple #1
0
        public override void WriteFixedArrayDeclaration(FixedArrayDeclaration s)
        {
            BeginLine();

            var fat = (FixedArrayType)s.Variable.ValueType;

            WriteType(s.Source, fat.ElementType);
            Write(" " + s.Variable.Name + "[");

            if (fat.OptionalSize != null)
            {
                WriteExpression(fat.OptionalSize);
            }
            else if (s.OptionalInitializer != null)
            {
                Write(s.OptionalInitializer.Length);
            }
            else
            {
                Log.Error(s.Source, ErrorCode.I0000, "Unknown length of 'fixed' array");
            }

            EndLine("];");

            if (s.OptionalInitializer != null)
            {
                for (int i = 0; i < s.OptionalInitializer.Length; i++)
                {
                    BeginLine(s.Variable.Name + "[" + i + "] = ");
                    WriteExpression(s.OptionalInitializer[i]);
                    EndLine(";");
                }
            }
        }
Exemple #2
0
        StageValue ProcessFixedArrayDeclaration(FixedArrayDeclaration s)
        {
            Expression[] initializer = null;

            var minStage = MetaStage.Const;
            var maxStage = MetaStage.Max;

            if (s.OptionalInitializer != null)
            {
                var stageValues = new StageValue[s.OptionalInitializer.Length];

                for (int i = 0; i < stageValues.Length; i++)
                {
                    var v = stageValues[i] = ProcessValue(s.OptionalInitializer[i]);

                    if (v.MinStage > minStage)
                    {
                        minStage = v.MinStage;
                    }

                    if (v.MaxStage < maxStage)
                    {
                        maxStage = v.MaxStage;
                    }
                }

                initializer = new Expression[stageValues.Length];

                if (maxStage < minStage)
                {
                    maxStage = minStage;
                }

                for (int i = 0; i < stageValues.Length; i++)
                {
                    initializer[i] = ProcessStage(stageValues[i], minStage, maxStage).Value;
                }
            }

            return(new StageValue(new PlaceholderArray(s.Source, s.Variable.ValueType, initializer), minStage, maxStage));
        }
        public virtual void WriteFixedArrayDeclaration(FixedArrayDeclaration s)
        {
            UnsupportedStatement(s);

            /*
             * BeginLine();
             *
             * var fat = (FixedArrayType)s.Variable.DataType;
             *
             * WriteDataType(s.Source, fat.ElementType);
             * Write(" " + s.Variable.Name + "[");
             *
             * if (fat.OptionalSize != null)
             *  WriteExpression(fat.OptionalSize);
             *
             * Write("]");
             *
             * if (s.OptionalInitializer != null)
             * {
             *  EndLine(" =");
             *  PushScope();
             *
             *  foreach (var init in s.OptionalInitializer)
             *  {
             *      BeginLine();
             *      WriteExpression(init);
             *      EndLine(",");
             *  }
             *
             *  PopScopeSemicolon();
             * }
             * else
             * {
             *  EndLine(";");
             * }
             */
        }