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); }
/// <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) { }