protected override bool DoDefineMembers ()
{
- if (!PopulateType ())
- throw new InternalErrorException ();
-
members_defined = true;
if (!base.DoDefineMembers ())
return true;
}
- protected override bool DoPopulateType ()
+ protected override bool DoResolveMembers ()
{
if (CompilerGenerated != null) {
foreach (CompilerGeneratedClass c in CompilerGenerated) {
- if (!c.PopulateType ())
+ if (!c.ResolveMembers ())
return false;
}
}
- return true;
+ return base.DoResolveMembers ();
}
public GenericMethod GenericMethod {
throw new InternalErrorException ("Helper class already defined!");
}
- public override void EmitType ()
- {
- Report.Debug (64, "COMPILER GENERATED EMIT TYPE", this, CompilerGenerated);
- base.EmitType ();
- }
-
protected class CapturedVariable : Field
{
public CapturedVariable (CompilerGeneratedClass helper, string name,
protected abstract ScopeInitializerBase CreateScopeInitializer ();
- protected override bool DoPopulateType ()
+ protected override bool DoResolveMembers ()
{
- Report.Debug (64, "SCOPE INFO RESOLVE TYPE", this, GetType (), IsGeneric,
+ Report.Debug (64, "SCOPE INFO RESOLVE MEMBERS", this, GetType (), IsGeneric,
Parent.IsGeneric, GenericMethod);
if (IsGeneric) {
if (Host != this)
scope_instance = Host.CaptureScope (this);
- return base.DoPopulateType ();
+ return base.DoResolveMembers ();
}
protected abstract class ScopeInitializerBase : ExpressionStatement
method = DoCreateMethodHost (ec);
- if (RootScope == null)
- return method.Define ();
- else
+ if (RootScope != null)
return true;
+
+ if (!method.ResolveMembers ())
+ return false;
+ return method.Define ();
}
protected abstract Method DoCreateMethodHost (EmitContext ec);
ArrayList type_bases;
- bool type_populated;
- bool type_populated_ok;
+ bool members_resolved;
+ bool members_resolved_ok;
bool members_defined;
bool members_defined_ok;
part.TypeBuilder = TypeBuilder;
}
- if (!CreateAnonymousHelpers ()) {
+ if (!(this is CompilerGeneratedClass)) {
+ if (!ResolveMembers ()) {
+ error = true;
+ return null;
+ }
+ }
+
+ if (!DefineNestedTypes ()) {
error = true;
return null;
}
- DefineNestedTypes ();
-
return TypeBuilder;
}
- protected bool CreateAnonymousHelpers ()
+ public bool ResolveMembers ()
+ {
+ if (members_resolved)
+ return members_resolved_ok;
+
+ members_resolved_ok = DoResolveMembers ();
+ members_resolved = true;
+
+ return members_resolved_ok;
+ }
+
+ protected virtual bool DoResolveMembers ()
{
if (methods != null) {
foreach (Method method in methods) {
- if (!method.CreateAnonymousHelpers ())
+ if (!method.ResolveMembers ())
return false;
}
}
if (operators != null) {
foreach (Operator o in operators) {
- if (!o.CreateAnonymousHelpers ())
+ if (!o.ResolveMembers ())
return false;
}
}
if (properties != null) {
foreach (PropertyBase p in properties) {
- if (!p.Get.IsDummy && !p.Get.CreateAnonymousHelpers ())
+ if (!p.Get.IsDummy && !p.Get.ResolveMembers ())
return false;
- if (!p.Set.IsDummy && !p.Set.CreateAnonymousHelpers ())
+ if (!p.Set.IsDummy && !p.Set.ResolveMembers ())
return false;
}
}
if (indexers != null) {
foreach (PropertyBase p in indexers) {
- if (!p.Get.IsDummy && !p.Get.CreateAnonymousHelpers ())
+ if (!p.Get.IsDummy && !p.Get.ResolveMembers ())
return false;
- if (!p.Set.IsDummy && !p.Set.CreateAnonymousHelpers ())
+ if (!p.Set.IsDummy && !p.Set.ResolveMembers ())
return false;
}
}
Report.Error (1530, loc, "Keyword `new' is not allowed on namespace elements");
}
- protected bool PopulateType ()
- {
- if (type_populated)
- return type_populated_ok;
-
- type_populated_ok = DoPopulateType ();
- type_populated = true;
-
- return type_populated_ok;
- }
-
- protected virtual bool DoPopulateType ()
- {
- return true;
- }
-
/// <summary>
/// Populates our TypeBuilder with fields and methods
/// </summary>
anonymous_methods.Add (anonymous);
}
- bool base_defined;
-
protected bool DefineGenericMethod ()
{
- if (base_defined)
- return true;
-
if (!DoDefineBase ())
return false;
return false;
}
- base_defined = true;
return true;
}
- public bool CreateAnonymousHelpers ()
+ public bool ResolveMembers ()
{
- Report.Debug (64, "METHOD DEFINE HELPERS", this, Name,
- ModFlags & Modifiers.METHOD_YIELDS,
- ModFlags & Modifiers.ANONYMOUS_HOST,
- Block);
-
if (!DefineGenericMethod ())
return false;
public override bool Define ()
{
- if (!DefineGenericMethod ())
- return false;
-
if (!DoDefine ())
return false;
return method.IsClsComplianceRequired ();
}
- public bool CreateAnonymousHelpers ()
+ public bool ResolveMembers ()
{
TypeContainer container = ((TypeContainer) Parent).PartialContainer;
return base.GetClassBases (out base_class);
}
- protected override bool DoDefineMembers ()
+ protected override bool DoResolveMembers ()
{
pc_field = CaptureVariable ("$PC", TypeManager.int32_type);
current_field = CaptureVariable ("$current", Iterator.OriginalIteratorType);
new GetEnumeratorMethod (this, true);
}
+ return base.DoResolveMembers ();
+ }
+
+ protected override bool DoDefineMembers ()
+ {
if (!base.DoDefineMembers ())
return false;
FetchMethodDispose ();
+
return true;
}
Report.Debug (64, "RESOLVE ITERATOR #1", this, method, method.Parent,
RootScope, ec);
+ if (!RootScope.ResolveMembers ())
+ return false;
if (!RootScope.DefineMembers ())
return false;