public interface ParameterData {
Type ParameterType (int pos);
int Count { get; }
+ bool HasParams { get; }
string ParameterName (int pos);
string ParameterDesc (int pos);
Parameter.Modifier ParameterModifier (int pos);
public Parameter.Modifier ParameterModifier (int pos)
{
- int len = pi.Length;
-
if (last_arg_is_params && pos >= pi.Length - 1)
return Parameter.Modifier.PARAMS;
else if (is_varargs && pos >= pi.Length)
return is_varargs ? pi.Length + 1 : pi.Length;
}
}
+
+ public bool HasParams {
+ get {
+ return this.last_arg_is_params;
+ }
+ }
}
}
}
+ public bool HasParams {
+ get {
+ return Parameters.ArrayParameter != null;
+ }
+ }
+
Parameter GetParameter (int pos)
{
Parameter [] fixed_pars = Parameters.FixedParameters;
// buffer.
if ((value >= buffer_start) && (value < buffer_start + buffer_size)) {
int byte_offset = value - buffer_start;
+
+ // pos is an index into a char
+ // buffer so it might be
+ // greater than the buffer
+ // length now, if the buffer
+ // contains multibyte chars
pos = byte_offset;
- // encoded characters can take more than 1 byte length
- while (reader.CurrentEncoding.GetByteCount (buffer, 0, pos) > byte_offset)
+
+ // encoded characters can take
+ // more than 1 byte length.
+ while ((pos > buffer.Length) ||
+ reader.CurrentEncoding.GetByteCount (buffer, 0, pos) > byte_offset) {
pos--;
+ }
return;
}