remove experimental code in #if false .. #endif
[mono.git] / mcs / mcs / support.cs
old mode 100755 (executable)
new mode 100644 (file)
index c040ebe..85ede8b
@@ -21,6 +21,7 @@ namespace Mono.CSharp {
        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);
@@ -107,8 +108,6 @@ namespace Mono.CSharp {
 
                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)
@@ -130,6 +129,12 @@ namespace Mono.CSharp {
                                return is_varargs ? pi.Length + 1 : pi.Length;
                        }
                }
+
+               public bool HasParams {
+                       get {
+                               return this.last_arg_is_params;
+                       }
+               }
                
        }
 
@@ -159,6 +164,12 @@ namespace Mono.CSharp {
                        }
                }
 
+               public bool HasParams {
+                       get {
+                               return Parameters.ArrayParameter != null;
+                       }
+               }
+
                Parameter GetParameter (int pos)
                {
                        Parameter [] fixed_pars = Parameters.FixedParameters;
@@ -381,10 +392,20 @@ namespace Mono.CSharp {
                                // 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;
                                }