X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmbas%2Finterface.cs;h=61204498e3a5be8684c68e6e3f007d990ec6aa7a;hb=ffbfd01518734e113823e048e1f8b8e753c2337c;hp=ed04dea14be0f36126d3b4c34abba9e6cccad0c7;hpb=a8ef2806b43ec0b5e237014c33dcdcfe9742b9d6;p=mono.git
diff --git a/mcs/mbas/interface.cs b/mcs/mbas/interface.cs
index ed04dea14be..61204498e3a 100644
--- a/mcs/mbas/interface.cs
+++ b/mcs/mbas/interface.cs
@@ -1,859 +1,181 @@
-//
-// interface.cs: Interface handler
-//
-// 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.Collections;
-using System;
-using System.IO;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace Mono.CSharp {
-
- ///
- /// Interfaces
- ///
- public class Interface : DeclSpace {
- const MethodAttributes interface_method_attributes =
- MethodAttributes.Public |
- MethodAttributes.Abstract |
- MethodAttributes.HideBySig |
- MethodAttributes.NewSlot |
- MethodAttributes.Virtual;
-
- const MethodAttributes property_attributes =
- MethodAttributes.Public |
- MethodAttributes.Abstract |
- MethodAttributes.HideBySig |
- MethodAttributes.NewSlot |
- MethodAttributes.SpecialName |
- MethodAttributes.Virtual;
-
- ArrayList bases;
-
- ArrayList defined_method;
- ArrayList defined_indexer;
- ArrayList defined_events;
- ArrayList defined_properties;
-
- ArrayList method_builders;
- ArrayList property_builders;
-
- Attributes OptAttributes;
-
- // These will happen after the semantic analysis
-
- // Hashtable defined_indexers;
- // Hashtable defined_methods;
-
- ///
- /// Modifiers allowed in a class declaration
- ///
- public const int AllowedModifiers =
- Modifiers.NEW |
- Modifiers.PUBLIC |
- Modifiers.PROTECTED |
- Modifiers.INTERNAL |
- Modifiers.UNSAFE |
- Modifiers.PRIVATE;
-
- public Interface (TypeContainer parent, string name, int mod, Attributes attrs, Location l)
- : base (parent, name, l)
- {
- ModFlags = Modifiers.Check (AllowedModifiers, mod, Modifiers.PRIVATE, l);
- OptAttributes = attrs;
-
- method_builders = new ArrayList ();
- property_builders = new ArrayList ();
- }
-
- public AdditionResult AddMethod (InterfaceMethod imethod)
- {
- string name = imethod.Name;
- Object value = defined_names [name];
-
- if (value != null){
- if (!(value is InterfaceMethod))
- return AdditionResult.NameExists;
- }
-
- if (defined_method == null)
- defined_method = new ArrayList ();
-
- defined_method.Add (imethod);
- if (value == null)
- DefineName (name, imethod);
-
- return AdditionResult.Success;
- }
-
- public AdditionResult AddProperty (InterfaceProperty iprop)
- {
- AdditionResult res;
- string name = iprop.Name;
-
- if ((res = IsValid (name)) != AdditionResult.Success)
- return res;
-
- DefineName (name, iprop);
-
- if (defined_properties == null)
- defined_properties = new ArrayList ();
-
- defined_properties.Add (iprop);
- return AdditionResult.Success;
- }
-
- public AdditionResult AddEvent (InterfaceEvent ievent)
- {
- string name = ievent.Name;
- AdditionResult res;
-
- if ((res = IsValid (name)) != AdditionResult.Success)
- return res;
-
- DefineName (name, ievent);
-
- if (defined_events == null)
- defined_events = new ArrayList ();
-
- defined_events.Add (ievent);
- return AdditionResult.Success;
- }
-
- public bool AddIndexer (InterfaceIndexer iindexer)
- {
- if (defined_indexer == null)
- defined_indexer = new ArrayList ();
-
- defined_indexer.Add (iindexer);
- return true;
- }
-
- public ArrayList InterfaceMethods {
- get {
- return defined_method;
- }
- }
-
- public ArrayList InterfaceProperties {
- get {
- return defined_properties;
- }
- }
-
- public ArrayList InterfaceEvents {
- get {
- return defined_events;
- }
- }
-
- public ArrayList InterfaceIndexers {
- get {
- return defined_indexer;
- }
- }
-
- public ArrayList Bases {
- get {
- return bases;
- }
-
- set {
- bases = value;
- }
- }
-
- public bool IsTopLevel {
- get {
- if (Parent != null){
- if (Parent.Parent == null)
- return true;
- }
- return false;
- }
- }
-
- public virtual TypeAttributes InterfaceAttr {
- get {
- TypeAttributes x = TypeAttributes.Interface | TypeAttributes.Abstract;
-
- if (IsTopLevel == false) {
-
- if ((ModFlags & Modifiers.PROTECTED) != 0
- && (ModFlags & Modifiers.INTERNAL) != 0)
- x |= TypeAttributes.NestedFamORAssem;
- else if ((ModFlags & Modifiers.PROTECTED) != 0)
- x |= TypeAttributes.NestedFamily;
- else if ((ModFlags & Modifiers.INTERNAL) != 0)
- x |= TypeAttributes.NestedAssembly;
- else if ((ModFlags & Modifiers.PUBLIC) != 0)
- x |= TypeAttributes.NestedPublic;
- else
- x |= TypeAttributes.NestedPrivate;
- } else {
- if ((ModFlags & Modifiers.PUBLIC) != 0)
- x |= TypeAttributes.Public;
- else if ((ModFlags & Modifiers.PRIVATE) != 0)
- x |= TypeAttributes.NotPublic;
- }
-
- if ((ModFlags & Modifiers.ABSTRACT) != 0)
- x |= TypeAttributes.Abstract;
-
- if ((ModFlags & Modifiers.SEALED) != 0)
- x |= TypeAttributes.Sealed;
-
- return x;
- }
- }
-
- void Error111 (InterfaceMemberBase ib)
- {
- Report.Error (
- 111,
- "Interface `" + Name + "' already contains a definition with the " +
- "same return value and parameter types for member `" + ib.Name + "'");
- }
-
- bool RegisterMethod (MethodBase mb, InternalParameters ip, Type [] types)
- {
- if (!TypeManager.RegisterMethod (mb, ip, types))
- return false;
-
- method_builders.Add (mb);
- return true;
- }
-
- public MethodInfo [] GetMethods ()
- {
- int n = method_builders.Count;
- MethodInfo [] mi = new MethodInfo [n];
-
- method_builders.CopyTo (mi, 0);
-
- return mi;
- }
-
- // Hack around System.Reflection as found everywhere else
- public MemberInfo [] FindMembers (MemberTypes mt, BindingFlags bf, MemberFilter filter, object criteria)
- {
- ArrayList members = new ArrayList ();
-
- if ((mt & MemberTypes.Method) != 0) {
- foreach (MethodBuilder mb in method_builders)
- if (filter (mb, criteria))
- members.Add (mb);
- }
-
- if ((mt & MemberTypes.Property) != 0) {
- foreach (PropertyBuilder pb in property_builders)
- if (filter (pb, criteria))
- members.Add (pb);
- }
-
- if ((bf & BindingFlags.DeclaredOnly) == 0){
- MemberInfo [] parent_mi;
-
- parent_mi = TypeContainer.FindMembers (
- TypeBuilder.BaseType, mt, bf, filter, criteria);
-
- if (parent_mi != null)
- members.AddRange (parent_mi);
- }
-
- // The rest of the cases, if any, are unhandled at present.
-
- int count = members.Count;
-
- if (count > 0) {
- MemberInfo [] mi = new MemberInfo [count];
- members.CopyTo (mi, 0);
- return mi;
- }
-
- return null;
- }
-
- //
- // Populates the methods in the interface
- //
- void PopulateMethod (InterfaceMethod im)
- {
- Type return_type = RootContext.LookupType (this, im.ReturnType, false, im.Location);
- Type [] arg_types = im.ParameterTypes (this);
- MethodBuilder mb;
- Parameter [] p;
- int i;
-
- if (return_type == null)
- return;
-
- if (return_type.IsPointer && !UnsafeOK (this))
- return;
-
- foreach (Type t in arg_types){
-
- if (t == null)
- return;
-
- if (t.IsPointer && !UnsafeOK (this))
- return;
- }
-
- //
- // Create the method
- //
- mb = TypeBuilder.DefineMethod (
- im.Name, interface_method_attributes,
- return_type, arg_types);
-
- InternalParameters ip = new InternalParameters (arg_types, im.Parameters);
-
- if (!RegisterMethod (mb, ip, arg_types)) {
- Error111 (im);
- return;
- }
-
- //
- // Define each type attribute (in/out/ref) and
- // the argument names.
- //
- p = im.Parameters.FixedParameters;
- if (p != null){
- for (i = 0; i < p.Length; i++)
- mb.DefineParameter (i + 1, p [i].Attributes, p [i].Name);
-
- if (i != arg_types.Length)
- Console.WriteLine ("Implement the type definition for params");
- }
- }
-
- //
- // Populates the properties in the interface
- //
- void PopulateProperty (InterfaceProperty ip)
- {
- PropertyBuilder pb;
- MethodBuilder get = null, set = null;
- Type prop_type = RootContext.LookupType (this, ip.Type, false, ip.Location);
- Type [] setter_args = new Type [1];
-
- if (prop_type == null)
- return;
-
- if (prop_type.IsPointer && !UnsafeOK (this))
- return;
-
- setter_args [0] = prop_type;
-
- //
- // FIXME: properties are missing the following
- // flags: hidebysig newslot specialname
- //
- pb = TypeBuilder.DefineProperty (
- ip.Name, PropertyAttributes.None,
- prop_type, null);
-
- if (ip.HasGet){
- get = TypeBuilder.DefineMethod (
- "get_" + ip.Name, property_attributes ,
- prop_type, null);
-
- //
- // HACK because System.Reflection.Emit is lame
- //
- Type [] null_types = null;
- InternalParameters inp = new InternalParameters
- (null_types, Parameters.GetEmptyReadOnlyParameters ());
-
- if (!RegisterMethod (get, inp, null)) {
- Error111 (ip);
- return;
- }
-
- pb.SetGetMethod (get);
- }
-
- if (ip.HasSet){
- setter_args [0] = prop_type;
-
- set = TypeBuilder.DefineMethod (
- "set_" + ip.Name, property_attributes,
- TypeManager.void_type, setter_args);
-
- set.DefineParameter (1, ParameterAttributes.None, "value");
- pb.SetSetMethod (set);
-
- //
- // HACK because System.Reflection.Emit is lame
- //
- Parameter [] parms = new Parameter [1];
- parms [0] = new Parameter (ip.Type, "value", Parameter.Modifier.NONE, null);
- InternalParameters ipp = new InternalParameters (
- Parent, new Parameters (parms, null, Location.Null));
-
- if (!RegisterMethod (set, ipp, setter_args)) {
- Error111 (ip);
- return;
- }
- }
-
- TypeManager.RegisterProperty (pb, get, set);
- property_builders.Add (pb);
- }
-
- //
- // Populates the events in the interface
- //
- void PopulateEvent (InterfaceEvent ie)
- {
- //
- // FIXME: We need to do this after delegates have been
- // declared or we declare them recursively.
- //
- }
-
- //
- // Populates the indexers in the interface
- //
- void PopulateIndexer (InterfaceIndexer ii)
- {
- PropertyBuilder pb;
- Type prop_type = RootContext.LookupType (this, ii.Type, false, ii.Location);
- Type [] arg_types = ii.ParameterTypes (this);
- Type [] value_arg_types;
-
- if (prop_type == null)
- return;
-
- if (prop_type.IsPointer && !UnsafeOK (this))
- return;
-
- //
- // Sets up the extra invisible `value' argument for setters.
- //
- if (arg_types != null){
- int count = arg_types.Length;
- value_arg_types = new Type [count + 1];
-
- arg_types.CopyTo (value_arg_types, 0);
- value_arg_types [count] = prop_type;
-
- foreach (Type t in arg_types){
- if (t.IsPointer && !UnsafeOK (this))
- return;
- }
- } else {
- value_arg_types = new Type [1];
-
- value_arg_types [1] = prop_type;
- }
-
- pb = TypeBuilder.DefineProperty (
- "Item", PropertyAttributes.None,
- prop_type, arg_types);
-
- if (ii.HasGet){
- MethodBuilder get_item;
- Parameter [] p = ii.Parameters.FixedParameters;
-
- get_item = TypeBuilder.DefineMethod (
- "get_Item", property_attributes, prop_type, arg_types);
- pb.SetGetMethod (get_item);
- //
- // HACK because System.Reflection.Emit is lame
- //
- InternalParameters ip = new InternalParameters (
- arg_types, ii.Parameters);
-
- if (!RegisterMethod (get_item, ip, arg_types)) {
- Error111 (ii);
- return;
- }
-
- if (p != null){
- for (int i = 0; i < p.Length; i++)
- get_item.DefineParameter (
- i + 1,
- p [i].Attributes, p [i].Name);
- }
- }
-
- if (ii.HasSet){
- Parameter [] p = ii.Parameters.FixedParameters;
- MethodBuilder set_item;
- int i = 0;
-
- set_item = TypeBuilder.DefineMethod (
- "set_Item", property_attributes,
- TypeManager.void_type, value_arg_types);
- pb.SetSetMethod (set_item);
- //
- // HACK because System.Reflection.Emit is lame
- //
- InternalParameters ip = new InternalParameters (
- value_arg_types, ii.Parameters);
- if (!RegisterMethod (set_item, ip, value_arg_types)) {
- Error111 (ii);
- return;
- }
-
- if (p != null){
- for (; i < p.Length; i++)
- set_item.DefineParameter (
- i + 1,
- p [i].Attributes, p [i].Name);
- }
-
- set_item.DefineParameter (i + 1, ParameterAttributes.None, "value");
- }
- }
-
- ///
- /// Performs the semantic analysis for all the interface members
- /// that were declared
- ///
- bool SemanticAnalysis ()
- {
- Hashtable methods = new Hashtable ();
-
-
- if (defined_method != null){
- foreach (InterfaceMethod im in defined_method){
- string sig = im.GetSignature (this);
-
- //
- // If there was an undefined Type on the signatures
- //
- if (sig == null)
- continue;
-
- if (methods [sig] != null){
- Error111 (im);
- return false;
- }
- }
- }
-
- //
- // FIXME: Here I should check i
- //
- return true;
- }
-
- //
- // Returns the Type that represents the interface whose name
- // is `name'.
- //
-
- Type GetInterfaceTypeByName (object builder, string name)
- {
- Interface parent;
- Type t = RootContext.LookupType (this, name, false, Location);
-
- if (t != null) {
- if (t.IsInterface)
- return t;
-
- string cause;
-
- if (t.IsValueType)
- cause = "is a struct";
- else if (t.IsClass)
- cause = "is a class";
- else
- cause = "Should not happen.";
-
- Report.Error (527, Location, "`"+name+"' " + cause +
- ", need an interface instead");
-
- return null;
- }
-
- Tree tree = RootContext.Tree;
- parent = (Interface) tree.Interfaces [name];
- if (parent == null){
- string cause = null;
- Hashtable container;
-
- container = tree.Classes;
- if (container != null && container [name] != null)
- cause = "is a class";
- else {
- container = tree.Structs;
-
- if (container != null && container [name] != null)
- cause = "is a struct";
- }
-
- if (cause == null){
- Report.Error (246, Location, "Can not find type `"+name+"'");
- } else {
- Report.Error (527, Location, "`"+name+"' " + cause +
- ", need an interface instead");
- }
- return null;
- }
-
- t = parent.DefineInterface (builder);
- if (t == null){
- Report.Error (529,
- "Inherited interface `"+name+"' is circular");
- return null;
- }
-
- return t;
- }
-
- //
- // Returns the list of interfaces that this interface implements
- // Or null if it does not implement any interface.
- //
- // Sets the error boolean accoringly.
- //
- Type [] GetInterfaceBases (object builder, out bool error)
- {
- Type [] tbases;
- int i;
-
- error = false;
- if (Bases == null)
- return null;
-
- tbases = new Type [Bases.Count];
- i = 0;
-
- foreach (string name in Bases){
- Type t;
-
- t = GetInterfaceTypeByName (builder, name);
- if (t == null){
- error = true;
- return null;
- }
-
- tbases [i++] = t;
- }
-
- return tbases;
- }
-
- //
- //
- // Defines the Interface in the appropriate ModuleBuilder or TypeBuilder
- //
- // TODO:
- // Rework the way we recurse, because for recursive
- // definitions of interfaces (A:B and B:A) we report the
- // error twice, rather than once.
-
- public TypeBuilder DefineInterface (object parent_builder)
- {
- Type [] ifaces;
- bool error;
-
- if (InTransit)
- return null;
-
- InTransit = true;
-
- ifaces = GetInterfaceBases (parent_builder, out error);
-
- if (error)
- return null;
-
- if (parent_builder is ModuleBuilder) {
- ModuleBuilder builder = (ModuleBuilder) parent_builder;
-
- TypeBuilder = builder.DefineType (
- Name,
- InterfaceAttr,
- (Type)null, // Parent Type
- ifaces);
- RootContext.RegisterOrder (this);
- } else {
- TypeBuilder builder = (System.Reflection.Emit.TypeBuilder) parent_builder;
-
- TypeBuilder = builder.DefineNestedType (
- Basename,
- InterfaceAttr,
- (Type) null, //parent type
- ifaces);
-
- TypeContainer tc = TypeManager.LookupTypeContainer (builder);
- tc.RegisterOrder (this);
- }
-
- RootContext.TypeManager.AddUserInterface (Name, TypeBuilder, this);
- InTransit = false;
-
- return TypeBuilder;
- }
-
- ///
- /// Performs semantic analysis, and then generates the IL interfaces
- ///
- public override bool Define (TypeContainer parent)
- {
- if (!SemanticAnalysis ())
- return false;
-
- if (defined_method != null){
- foreach (InterfaceMethod im in defined_method)
- PopulateMethod (im);
- }
-
- if (defined_properties != null){
- foreach (InterfaceProperty ip in defined_properties)
- PopulateProperty (ip);
- }
-
- if (defined_events != null)
- foreach (InterfaceEvent ie in defined_events)
- PopulateEvent (ie);
-
- if (defined_indexer != null) {
- foreach (InterfaceIndexer ii in defined_indexer)
- PopulateIndexer (ii);
-
- CustomAttributeBuilder cb = EmitDefaultMemberAttr (parent, ModFlags, Location);
- TypeBuilder.SetCustomAttribute (cb);
- }
-
- return true;
- }
-
- public static CustomAttributeBuilder EmitDefaultMemberAttr (TypeContainer parent, int flags,
- Location loc)
- {
- EmitContext ec = new EmitContext (parent, loc, null, null, flags);
-
- Expression ml = Expression.MemberLookup (ec, TypeManager.default_member_type,
- ".ctor", MemberTypes.Constructor,
- BindingFlags.Public | BindingFlags.Instance,
- Location.Null);
-
- if (!(ml is MethodGroupExpr)) {
- Console.WriteLine ("Internal error !!!!");
- return null;
- }
-
- MethodGroupExpr mg = (MethodGroupExpr) ml;
-
- MethodBase constructor = mg.Methods [0];
-
- string [] vals = { "Item" };
-
- CustomAttributeBuilder cb = new CustomAttributeBuilder ((ConstructorInfo) constructor, vals);
-
- return cb;
- }
-
- }
-
- public class InterfaceMemberBase {
- public readonly string Name;
- public readonly bool IsNew;
- public Attributes OptAttributes;
-
- public InterfaceMemberBase (string name, bool is_new, Attributes attrs)
- {
- Name = name;
- IsNew = is_new;
- OptAttributes = attrs;
- }
- }
-
- public class InterfaceProperty : InterfaceMemberBase {
- public readonly bool HasSet;
- public readonly bool HasGet;
- public readonly string Type;
- public readonly string type;
- public readonly Location Location;
-
- public InterfaceProperty (string type, string name,
- bool is_new, bool has_get, bool has_set,
- Attributes attrs, Location loc)
- : base (name, is_new, attrs)
- {
- Type = type;
- HasGet = has_get;
- HasSet = has_set;
- Location = loc;
- }
- }
-
- public class InterfaceEvent : InterfaceMemberBase {
- public readonly string Type;
-
- public InterfaceEvent (string type, string name, bool is_new, Attributes attrs)
- : base (name, is_new, attrs)
- {
- Type = type;
- }
- }
-
- public class InterfaceMethod : InterfaceMemberBase {
- public readonly string ReturnType;
- public readonly Parameters Parameters;
- public readonly Location Location;
-
- public InterfaceMethod (string return_type, string name, bool is_new, Parameters args,
- Attributes attrs, Location l)
- : base (name, is_new, attrs)
- {
- this.ReturnType = return_type;
- this.Parameters = args;
- Location = l;
- }
-
- ///
- /// Returns the signature for this interface method
- ///
- public string GetSignature (DeclSpace ds)
- {
- Type ret = RootContext.LookupType (ds, ReturnType, false, Location);
- string args = Parameters.GetSignature (ds);
-
- if ((ret == null) || (args == null))
- return null;
-
- return (IsNew ? "new-" : "") + ret.FullName + "(" + args + ")";
- }
-
- public Type [] ParameterTypes (DeclSpace ds)
- {
- return Parameters.GetParameterInfo (ds);
- }
- }
-
- public class InterfaceIndexer : InterfaceMemberBase {
- public readonly bool HasGet, HasSet;
- public readonly Parameters Parameters;
- public readonly string Type;
- public readonly Location Location;
-
- public InterfaceIndexer (string type, Parameters args, bool do_get, bool do_set,
- bool is_new, Attributes attrs, Location loc)
- : base ("", is_new, attrs)
- {
- Type = type;
- Parameters = args;
- HasGet = do_get;
- HasSet = do_set;
- Location = loc;
- }
-
- public Type [] ParameterTypes (DeclSpace ds)
- {
- return Parameters.GetParameterInfo (ds);
- }
- }
-}
+//
+// interface.cs: Interface handler
+//
+// Author: Miguel de Icaza (miguel@gnu.org)
+// Anirban Bhattacharjee (banirban@novell.com)
+//
+// Licensed under the terms of the GNU GPL
+//
+// (C) 2001 Ximian, Inc (http://www.ximian.com)
+//
+
+#define CACHE
+
+/*This file will go off shortly
+ * after copying the interface class
+ * in class.cs file
+ */
+
+using System.Collections;
+using System;
+using System.IO;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace Mono.MonoBASIC {
+
+ ///
+ /// Interfaces
+ ///
+
+
+ ///
+ /// Interfaces
+ ///
+ public class Interface : Mono.MonoBASIC.Class /*TypeContainer , IMemberContainer */
+ {
+ ///
+ /// Modifiers allowed in a class declaration
+ ///
+ public new const int AllowedModifiers =
+ Modifiers.NEW |
+ Modifiers.PUBLIC |
+ Modifiers.PROTECTED |
+ Modifiers.INTERNAL |
+ Modifiers.PRIVATE;
+
+ public Interface (TypeContainer parent, string name, int mod,
+ Attributes attrs, Location l)
+ : base (parent, name, 0, attrs, l)
+ {
+ int accmods;
+
+ if (parent.Parent == null)
+ accmods = Modifiers.INTERNAL;
+ else
+ accmods = Modifiers.PUBLIC;
+
+ this.ModFlags = Modifiers.Check (AllowedModifiers, mod, accmods, l);
+ this.ModFlags |= Modifiers.ABSTRACT;
+ }
+
+ public override AttributeTargets AttributeTargets {
+ get {
+ return AttributeTargets.Interface;
+ }
+ }
+
+ public override TypeAttributes TypeAttr
+ {
+ get
+ {
+ return base.TypeAttr |
+ TypeAttributes.AutoLayout |
+ TypeAttributes.Abstract |
+ TypeAttributes.Interface;
+ }
+ }
+ }
+
+/*
+ public class InterfaceMemberBase {
+ public readonly string Name;
+ public readonly bool IsNew;
+ public Attributes OptAttributes;
+
+ public InterfaceMemberBase (string name, bool is_new, Attributes attrs)
+ {
+ Name = name;
+ IsNew = is_new;
+ OptAttributes = attrs;
+ }
+ }
+
+ public class InterfaceProperty : InterfaceMemberBase {
+ public readonly bool HasSet;
+ public readonly bool HasGet;
+ public readonly Location Location;
+ public Expression Type;
+
+ public InterfaceProperty (Expression type, string name,
+ bool is_new, bool has_get, bool has_set,
+ Attributes attrs, Location loc)
+ : base (name, is_new, attrs)
+ {
+ Type = type;
+ HasGet = has_get;
+ HasSet = has_set;
+ Location = loc;
+ }
+ }
+*/
+/* public class InterfaceEvent : InterfaceMemberBase {
+ public readonly Location Location;
+ public Expression Type;
+
+ public InterfaceEvent (Expression type, string name, bool is_new, Attributes attrs,
+ Location loc)
+ : base (name, is_new, attrs)
+ {
+ Type = type;
+ Location = loc;
+ }
+ }
+/*
+ public class InterfaceMethod : InterfaceMemberBase {
+ public readonly Expression ReturnType;
+ public readonly Parameters Parameters;
+ public readonly Location Location;
+
+ public InterfaceMethod (Expression return_type, string name, bool is_new, Parameters args,
+ Attributes attrs, Location l)
+ : base (name, is_new, attrs)
+ {
+ this.ReturnType = return_type;
+ this.Parameters = args;
+ Location = l;
+ }
+
+ ///
+ /// Returns the signature for this interface method
+ ///
+ public string GetSignature (DeclSpace ds)
+ {
+ Type ret = ds.ResolveType (ReturnType, false, Location);
+ string args = Parameters.GetSignature (ds);
+
+ if ((ret == null) || (args == null))
+ return null;
+
+ return (IsNew ? "new-" : "") + ret.FullName + "(" + args + ")";
+ }
+
+ public Type [] ParameterTypes (DeclSpace ds)
+ {
+ return Parameters.GetParameterInfo (ds);
+ }
+ }
+
+ public class InterfaceIndexer : InterfaceMemberBase {
+ public readonly bool HasGet, HasSet;
+ public readonly Parameters Parameters;
+ public readonly Location Location;
+ public Expression Type;
+
+ public InterfaceIndexer (Expression type, Parameters args, bool do_get, bool do_set,
+ bool is_new, Attributes attrs, Location loc)
+ : base ("", is_new, attrs)
+ {
+ Type = type;
+ Parameters = args;
+ HasGet = do_get;
+ HasSet = do_set;
+ Location = loc;
+ }
+
+ public Type [] ParameterTypes (DeclSpace ds)
+ {
+ return Parameters.GetParameterInfo (ds);
+ }
+ }*/
+}