// Holds the events
ArrayList events;
- // Holds AddHandlers stements for events
+ // Holds AddHandlers statements for events
ArrayList handlers;
// The emit context for toplevel objects.
//
// The indexer name for this class
//
- public string IndexerName;
+ public string DefaultPropName;
public TypeContainer (TypeContainer parent, string name, Attributes attrs, Location l)
: base (parent, name, attrs, l)
{
- string n;
types = new ArrayList ();
+
+ base_class_name = null;
+ /* string n;
+
if (parent == null)
n = "";
else
n = parent.Name;
- base_class_name = null;
-
- //Console.WriteLine ("New class " + name + " inside " + n);
+ Console.WriteLine ("New class " + name + " inside " + n);*/
}
public AdditionResult AddConstant (Const constant)
if (value != null && (!(value is Method)))
return AdditionResult.NameExists;
- if (basename == Basename)
- return AdditionResult.EnclosingClash;
-
if (methods == null)
methods = new ArrayList ();
AdditionResult res;
string basename = prop.Name;
+ string fullname = Name + "." + basename;
+
+ Object value = defined_names [fullname];
+
+ if (value != null && (!(value is Property)))
+ return AdditionResult.NameExists;
+
if ((res = IsValid (basename)) != AdditionResult.Success)
return res;
properties.Insert (0, prop);
else
properties.Add (prop);
- DefineName (Name + "." + basename, prop);
+
+ if (value == null)
+ DefineName (Name + "." + basename, prop);
return AdditionResult.Success;
}
public bool EmitFieldInitializers (EmitContext ec)
{
ArrayList fields;
- ILGenerator ig = ec.ig;
+ //ILGenerator ig = ec.ig;
Expression instance_expr;
if (ec.IsStatic){
"'NotInheritable' class " + TypeManager.MonoBASIC_Name (parent));
if (!AsAccessible (parent, ModFlags))
- Report.Error (30389, Location,
+ Report.Error (30389, Location,
"Inconsistent accessibility: base class `" +
TypeManager.MonoBASIC_Name (parent) + "' is less " +
"accessible than class `" +
}
if (is_class == false && !t.IsInterface){
- Report.Error (527, "In Struct `" + Name + "', type `"+
+ Report.Error (527, Location, "In Struct `" + Name + "', type `"+
name +"' is not an interface");
error = true;
return null;
if (t.IsSealed) {
if (t.IsValueType)
- Report.Error (30258, "class `"+ Name +
+ Report.Error (30258, Location, "class `"+ Name +
"': a class can not inherit from a struct/enum");
- /*Report.Error (509, "class `"+ Name +
+ /*Report.Error (509, Location, "class `"+ Name +
"': Cannot inherit from sealed class `"+
bases [i]);*/
error = true;
if (t.IsClass) {
if (parent != null){
- Report.Error (30121, Name + ": A class cannot inherit " +
+ Report.Error (30121, Location, Name + ": A class cannot inherit " +
"more than one class");
error = true;
return null;
for (int x = 0; x < j; x++) {
if (t == ifaces [x]) {
- Report.Error (528, "`" + name + "' is already listed in interface list");
+ Report.Error (528,Location, "`" + name + "' is already listed in interface list");
error = true;
return null;
}
(base_class_type == TypeManager.attribute_type ||
base_class_type.IsSubclassOf (TypeManager.attribute_type))) {
RootContext.RegisterAttribute (this);
- } else
- RootContext.RegisterOrder (this);
+ }
+ else
+ {
+ if ( this is Interface)
+ RootContext.RegisterOrder ((Interface) this);
+ else
+ RootContext.RegisterOrder (this);
+ }
if (Interfaces != null) {
foreach (Interface iface in Interfaces)
continue;
if ((p.ModFlags & static_mask) != static_flags)
continue;
-
+
MemberInfo pb = p.PropertyBuilder;
if (pb != null && filter (pb, criteria) == true)
foreach (Property p in properties)
p.Emit (this);
- if (this.IndexerName != null) {
- CustomAttributeBuilder cb = new CustomAttributeBuilder (TypeManager.default_member_ctor, new string [] { IndexerName });
+ if (this.DefaultPropName != null) {
+ CustomAttributeBuilder cb = new CustomAttributeBuilder (TypeManager.default_member_ctor, new string [] { DefaultPropName });
TypeBuilder.SetCustomAttribute (cb);
}
foreach (Field f in fields) {
if ((f.ModFlags & Modifiers.PUBLIC) != 0)
continue;
+
+ if (f.Name.StartsWith(@"$STATIC$"))
+ continue;
if (f.status == 0){
Report.Warning (
{
const int vao = (Modifiers.VIRTUAL | Modifiers.ABSTRACT | Modifiers.OVERRIDE);
const int va = (Modifiers.VIRTUAL | Modifiers.ABSTRACT);
- const int nv = (Modifiers.SHADOWS | Modifiers.VIRTUAL);
+ //const int nv = (Modifiers.SHADOWS | Modifiers.VIRTUAL);
bool ok = true;
string name = MakeName (n);
if ((flags & Modifiers.PRIVATE) != 0){
if ((flags & vao) != 0){
Report.Error (
- 31408, loc, name +
+ 30266, loc, name +
": Members marked as Overridable or Overrides can not be Private");
ok = false;
}
// and return the new level.
static AccessLevel CheckAccessLevel (AccessLevel level, int flags)
{
- AccessLevel old_level = level;
+ //AccessLevel old_level = level;
if ((flags & Modifiers.INTERNAL) != 0) {
if ((flags & Modifiers.PROTECTED) != 0) {
WarningNotHiding (parent);*/
if ((ModFlags & Modifiers.OVERRIDE) != 0){
- Report.Error (30284, Location,
+ Report.Error (30398, Location,
parent.MakeName (Name) +
" : No suitable methods found to override");
}
TypeManager.ExpandAllInterfaces (tbases, ref bases);
foreach (Type tbase in bases) {
+ /*
string bname = tbase.Name;
if (bname.LastIndexOf(".") != -1)
bname = bname.Substring(bname.LastIndexOf("."));
+ */
- if (bname == iname) {
+ //if (bname == iname) {
+ if (tbase == InterfaceType) {
iface_found = true;
break;
}
TypeManager.MonoBASIC_Name (MemberType) + "' is less " +
"accessible than property `" + Name + "'");
else if (this is Method)
- Report.Error (50, Location,
+ Report.Error (30508, Location,
"Inconsistent accessibility: return type `" +
TypeManager.MonoBASIC_Name (MemberType) + "' is less " +
"accessible than method `" + Name + "'");
"' causes a cycle in the structure layout");
return false;
}
- FieldBuilder = parent.TypeBuilder.DefineField (
- Name, t, Modifiers.FieldAttr (ModFlags));
+
+ //Local Static Variable
+ if (Name.StartsWith(@"$STATIC$"))
+ FieldBuilder = parent.TypeBuilder.DefineField (
+ Name, t, Modifiers.FieldAttr (ModFlags) | FieldAttributes.SpecialName);
+ else
+ FieldBuilder = parent.TypeBuilder.DefineField (
+ Name, t, Modifiers.FieldAttr (ModFlags));
TypeManager.RegisterFieldBase (FieldBuilder, this);
return true;
if ((ModFlags & Modifiers.READONLY) != 0)
retval = MemberType;
- string report_name;
+ //string report_name;
MethodSignature base_ms;
/*
base_name = TypeManager.IndexerPropertyName (container.TypeBuilder.BaseType);
base_ms = new MethodSignature (base_name, retval, ParameterTypes);
} else */ {
- report_name = Name;
+ //report_name = Name;
ms = base_ms = new MethodSignature (Name, retval, ParameterTypes);
}
MethodSignature.inheritable_property_signature_filter,
base_ms);
-
if (mi_instance.Count > 0)
mi = mi_instance;
else if (mi_static.Count > 0)
if (mi != null && mi.Count > 0)
parent_member = (PropertyInfo) mi [0];
-
if (parent_member is PropertyInfo) {
PropertyInfo parent_property = (PropertyInfo)parent_member;
/*if ((ModFlags & Modifiers.NEW) != 0)
WarningNotHiding (container);
*/
- if ((ModFlags & Modifiers.OVERRIDE) != 0) {
-
- /*
- if (this is Indexer)
- Report.Error (115, Location,
- container.MakeName (Name) +
- " no suitable indexers found to override");
- else
- */
- Report.Error (115, Location,
- container.MakeName (Name) +
- " no suitable properties found to override");
- return false;
- }
if ((ModFlags & ( Modifiers.NEW | Modifiers.SHADOWS | Modifiers.OVERRIDE )) == 0) {
if ((ModFlags & Modifiers.NONVIRTUAL) != 0) {
Modifiers.WRITEONLY |
Modifiers.SHADOWS;
- string set_parameter_name;
- Parameters get_params;
- Parameters set_params;
+ //string set_parameter_name;
+ //Parameters get_params;
+ //Parameters set_params;
public Property (Expression type, string name, int mod_flags,
Accessor get_block, Accessor set_block,
public override bool Define (TypeContainer parent)
{
- Type [] s_parameters=null;
+ /*Type [] s_parameters=null;
Parameter [] s_parms;
- InternalParameters s_ip=null;
+ InternalParameters s_ip=null;*/
if ((parent is Struct) && ((ModFlags & Modifiers.PROTECTED) != 0))
Report.Error (30435, Location,
"'Property' inside a 'Structure' can not be declared as " +
"'Protected' or 'Protected Friend'");
+ if (((ModFlags & Modifiers.DEFAULT) != 0) && (Parameters == null || Parameters.CountStandardParams () == 0)) {
+ Report.Error (31048, Location, "Properties with no required " +
+ "parameters cannot be declared 'Default'");
+ return false;
+ }
+
if (!DoDefine (parent))
return false;
public MethodBuilder Define (TypeContainer parent)
{
- EventAttributes e_attr = EventAttributes.RTSpecialName | EventAttributes.SpecialName;
+ //EventAttributes e_attr = EventAttributes.RTSpecialName | EventAttributes.SpecialName;
Type [] parameter_types = new Type [1];
parameter_types [0] = parent_event.MemberType;
Parameter [] parms = new Parameter [1];
parms [0] = new Parameter (Type, /* was "value" */ this.Name, Parameter.Modifier.NONE, null);
- InternalParameters ip = new InternalParameters (
+ /*InternalParameters ip = new InternalParameters (
parent, new Parameters (parms, null, Location));
+ */
if (!CheckBase (parent))
return false;