Exemple #1
0
        private DcParameter BuildDcParameterFromContext(DcParser.ParameterContext context)
        {
            DcParameter parameter;

            uint divisor = 1;

            if (context.divisor != null)
            {
                divisor = uint.Parse(context.divisor.Text);
            }

            DcLongRange?paramRange = null;

            if (context.parameter_range() != null)
            {
                paramRange = new DcLongRange();
                ReadRangeArgumentsIntoRange(context.parameter_range().range_arguments(), paramRange);
            }

            // Array parameters
            var array = context.array;

            if (array != null)
            {
                var elementType = CreateParameterFromName(context.type.Text, divisor, paramRange);

                var range = new DcUIntRange();
                if (context.array.range != null)
                {
                    ReadRangeArgumentsIntoRange(context.array.range, range);
                }

                parameter = new DcArrayParameter(elementType, range);

                array = array.next;
                while (array != null)
                {
                    range = new DcUIntRange();
                    if (context.array.range != null)
                    {
                        ReadRangeArgumentsIntoRange(context.array.range, range);
                    }

                    parameter.AppendArraySpecification(range);
                    array = array.next;
                }
            }
            else
            {
                parameter = CreateParameterFromName(context.type.Text, divisor, paramRange);
            }

            parameter.Name = context.name?.Text ?? "";

            if (context.default_value() != null)
            {
                var bw = new SpanBufferWriter(stackalloc byte[512]);
                bw.WriteValueConstant(parameter, context.default_value().value);
                parameter.DefaultValue    = bw.Data.ToArray();
                parameter.HasDefaultValue = true;
            }

            return(parameter);
        }
Exemple #2
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="DcParser.parameter"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitParameter([NotNull] DcParser.ParameterContext context)
 {
 }