diff options
Diffstat (limited to 'mcs/mbas/parameter.cs')
-rw-r--r-- | mcs/mbas/parameter.cs | 419 |
1 files changed, 0 insertions, 419 deletions
diff --git a/mcs/mbas/parameter.cs b/mcs/mbas/parameter.cs deleted file mode 100644 index 9ad2daa7b6d..00000000000 --- a/mcs/mbas/parameter.cs +++ /dev/null @@ -1,419 +0,0 @@ -// -// parameter.cs: Parameter definition. -// -// Author: Miguel de Icaza (miguel@gnu.org) -// -// Licensed under the terms of the GNU GPL -// -// (C) 2001 Ximian, Inc (http://www.ximian.com) -// -// -// -using System; -using System.Reflection; -using System.Reflection.Emit; -using System.Collections; - -namespace Mono.CSharp { - - - /// <summary> - /// Represents a single method parameter - /// </summary> - public class Parameter { - [Flags] - public enum Modifier : byte { - NONE = 0, - REF = 1, - OUT = 2, - PARAMS = 4, - } - - public readonly string TypeName; - public readonly string Name; - public readonly Modifier ModFlags; - public Attributes OptAttributes; - public Type parameter_type; - - public Parameter (string type, string name, Modifier mod, Attributes attrs) - { - Name = name; - ModFlags = mod; - TypeName = type; - OptAttributes = attrs; - } - - // <summary> - // Resolve is used in method definitions - // </summary> - public bool Resolve (DeclSpace ds, Location l) - { - parameter_type = RootContext.LookupType (ds, TypeName, false, l); - return parameter_type != null; - } - - // <summary> - // ResolveAndDefine is used by delegate declarations, because - // they happen during the initial tree resolution process - // </summary> - public bool ResolveAndDefine (DeclSpace ds) - { - parameter_type = ds.FindType (TypeName); - return parameter_type != null; - } - - public Type ExternalType (DeclSpace ds, Location l) - { - if ((ModFlags & (Parameter.Modifier.REF | Parameter.Modifier.OUT)) != 0){ - string n = parameter_type.FullName + "&"; - - Type t = RootContext.LookupType (ds, n, false, l); - - return t; - } - - return parameter_type; - } - - public Type ParameterType { - get { - return parameter_type; - } - } - - public ParameterAttributes Attributes { - get { - switch (ModFlags){ - case Modifier.NONE: - return ParameterAttributes.None; - case Modifier.REF: - return ParameterAttributes.None; - case Modifier.OUT: - return ParameterAttributes.Out; - case Modifier.PARAMS: - return 0; - } - - return ParameterAttributes.None; - } - } - - /// <summary> - /// Returns the signature for this parameter evaluating it on the - /// @tc context - /// </summary> - public string GetSignature (DeclSpace ds, Location loc) - { - if (parameter_type == null){ - if (!Resolve (ds, loc)) - return null; - } - - return ExternalType (ds, loc).FullName; - } - } - - /// <summary> - /// Represents the methods parameters - /// </summary> - public class Parameters { - public Parameter [] FixedParameters; - public readonly Parameter ArrayParameter; - string signature; - Type [] types; - Location loc; - - static Parameters empty_parameters; - - public Parameters (Parameter [] fixed_parameters, Parameter array_parameter, Location l) - { - FixedParameters = fixed_parameters; - ArrayParameter = array_parameter; - loc = l; - } - - /// <summary> - /// This is used to reuse a set of empty parameters, because they - /// are common - /// </summary> - public static Parameters GetEmptyReadOnlyParameters () - { - if (empty_parameters == null) - empty_parameters = new Parameters (null, null, Location.Null); - - return empty_parameters; - } - - public bool Empty { - get { - return (FixedParameters == null) && (ArrayParameter == null); - } - } - - public void ComputeSignature (DeclSpace ds) - { - signature = ""; - if (FixedParameters != null){ - for (int i = 0; i < FixedParameters.Length; i++){ - Parameter par = FixedParameters [i]; - - signature += par.GetSignature (ds, loc); - } - } - // - // Note: as per the spec, the `params' arguments (ArrayParameter) - // are not used in the signature computation for a method - // - } - - static void error100 (string name) - { - Report.Error ( - 100, "The parameter name `" + name + "' is a duplicate"); - } - - public bool VerifyArgs () - { - int count; - int i, j; - - if (FixedParameters == null) - return true; - - count = FixedParameters.Length; - string array_par_name = ArrayParameter != null ? ArrayParameter.Name : null; - for (i = 0; i < count; i++){ - string base_name = FixedParameters [i].Name; - - for (j = i + 1; j < count; j++){ - if (base_name != FixedParameters [j].Name) - continue; - error100 (base_name); - return false; - } - - if (base_name == array_par_name){ - error100 (base_name); - return false; - } - } - return true; - } - - /// <summary> - /// Returns the signature of the Parameters evaluated in - /// the @tc environment - /// </summary> - public string GetSignature (DeclSpace ds) - { - if (signature == null){ - VerifyArgs (); - ComputeSignature (ds); - } - - return signature; - } - - /// <summary> - /// Returns the paramenter information based on the name - /// </summary> - public Parameter GetParameterByName (string name, out int idx) - { - idx = 0; - int i = 0; - - if (FixedParameters != null){ - foreach (Parameter par in FixedParameters){ - if (par.Name == name){ - idx = i; - return par; - } - i++; - } - } - - if (ArrayParameter != null){ - if (name == ArrayParameter.Name){ - idx = i; - return ArrayParameter; - } - } - - return null; - } - - bool ComputeParameterTypes (DeclSpace ds) - { - int extra = (ArrayParameter != null) ? 1 : 0; - int i = 0; - int pc; - - if (FixedParameters == null) - pc = extra; - else - pc = extra + FixedParameters.Length; - - types = new Type [pc]; - - if (!VerifyArgs ()){ - FixedParameters = null; - return false; - } - - bool failed = false; - if (FixedParameters != null){ - foreach (Parameter p in FixedParameters){ - Type t = null; - - if (p.Resolve (ds, loc)) - t = p.ExternalType (ds, loc); - else - failed = true; - - types [i] = t; - i++; - } - } - - if (failed) - types = null; - - if (extra > 0){ - if (ArrayParameter.Resolve (ds, loc)) - types [i] = ArrayParameter.ExternalType (ds, loc); - else - return false; - } - - return true; - } - - // - // This variant is used by Delegates, because they need to - // resolve/define names, instead of the plain LookupType - // - public bool ComputeAndDefineParameterTypes (DeclSpace ds) - { - int extra = (ArrayParameter != null) ? 1 : 0; - int i = 0; - int pc; - - if (FixedParameters == null) - pc = extra; - else - pc = extra + FixedParameters.Length; - - types = new Type [pc]; - - if (!VerifyArgs ()){ - FixedParameters = null; - return false; - } - - bool ok_flag = true; - - if (FixedParameters != null){ - foreach (Parameter p in FixedParameters){ - Type t = null; - - if (p.ResolveAndDefine (ds)) - t = p.ExternalType (ds, loc); - else - ok_flag = false; - - types [i] = t; - i++; - } - } - - if (extra > 0){ - if (ArrayParameter.ResolveAndDefine (ds)) - types [i] = ArrayParameter.ExternalType (ds, loc); - else - ok_flag = false; - } - - // - // invalidate the cached types - // - if (!ok_flag){ - types = null; - } - - return ok_flag; - } - - /// <summary> - /// Returns the argument types as an array - /// </summary> - static Type [] no_types = new Type [0]; - - public Type [] GetParameterInfo (DeclSpace ds) - { - if (types != null) - return types; - - if (FixedParameters == null && ArrayParameter == null) - return no_types; - - if (ComputeParameterTypes (ds) == false){ - types = null; - return null; - } - - return types; - } - - /// <summary> - /// Returns the type of a given parameter, and stores in the `is_out' - /// boolean whether this is an out or ref parameter. - /// - /// Note that the returned type will not contain any dereference in this - /// case (ie, you get "int" for a ref int instead of "int&" - /// </summary> - public Type GetParameterInfo (DeclSpace ds, int idx, out bool is_out) - { - is_out = false; - - if (!VerifyArgs ()){ - FixedParameters = null; - return null; - } - - if (FixedParameters == null && ArrayParameter == null) - return null; - - if (types == null) - if (ComputeParameterTypes (ds) == false){ - is_out = false; - return null; - } - - // - // If this is a request for the variable lenght arg. - // - int array_idx = (FixedParameters != null ? FixedParameters.Length : 0); - if (idx == array_idx){ - is_out = false; - return types [idx]; - } - - // - // Otherwise, it is a fixed parameter - // - Parameter p = FixedParameters [idx]; - is_out = ((p.ModFlags & (Parameter.Modifier.REF | Parameter.Modifier.OUT)) != 0); - - return p.ParameterType; - } - - public CallingConventions GetCallingConvention () - { - // For now this is the only correc thing to do - return CallingConventions.Standard; - } - } -} - - - |