}
}
- public class IteratorHost : AnonymousMethodHost
+ public class IteratorHost : RootScopeInfo
{
public readonly Iterator Iterator;
return base.DoResolveMembers ();
}
+ public void CaptureScopes ()
+ {
+ Report.Debug (128, "DEFINE ITERATOR HOST", this, scopes);
+
+ foreach (ScopeInfo si in scopes)
+ CaptureScope (si);
+
+ foreach (ScopeInfo si in scopes) {
+ if (!si.Define ())
+ throw new InternalErrorException ();
+ if (si.DefineType () == null)
+ throw new InternalErrorException ();
+ if (!si.ResolveType ())
+ throw new InternalErrorException ();
+ if (!si.ResolveMembers ())
+ throw new InternalErrorException ();
+ if (!si.DefineMembers ())
+ throw new InternalErrorException ();
+ }
+ }
+
protected override bool DoDefineMembers ()
{
if (!base.DoDefineMembers ())
ConstructorInfo GetInvalidOperationException ()
{
- MethodGroupExpr mg = (MethodGroupExpr) Expression.MemberLookup (
- TypeBuilder, TypeManager.invalid_operation_exception_type,
- ".ctor", Location);
- if (mg == null)
- throw new InternalErrorException ();
- return (ConstructorInfo) mg.Methods [0];
+ return TypeManager.GetConstructor (
+ TypeManager.invalid_operation_exception_type, Type.EmptyTypes);
}
protected override ScopeInitializer CreateScopeInitializer ()
return new IteratorHostInitializer (this);
}
- protected class IteratorHostInitializer : AnonymousMethodHostInitializer
+ protected class IteratorHostInitializer : RootScopeInitializer
{
new public readonly IteratorHost Host;
protected Iterator.State state;
get { return true; }
}
- public override AnonymousMethodHost RootScope {
+ public override RootScopeInfo RootScope {
+ get { return IteratorHost; }
+ }
+
+ public override ScopeInfo Scope {
get { return IteratorHost; }
}
//
// Our constructor
//
- public Iterator (IMethodData m_container, TypeContainer host, GenericMethod generic,
+ private Iterator (IMethodData m_container, DeclSpace host, GenericMethod generic,
int modifiers, Type iterator_type, bool is_enumerable)
: base (null, host, generic, m_container.ParameterInfo,
new ToplevelBlock (m_container.ParameterInfo, m_container.Location),
protected override Method DoCreateMethodHost (EmitContext ec)
{
+ Report.Debug (128, "CREATE METHOD HOST", this, IteratorHost);
+
+ IteratorHost.CaptureScopes ();
+
return new AnonymousMethodMethod (
- this, null, TypeManager.system_boolean_expr,
+ this, RootScope, null, TypeManager.system_boolean_expr,
Modifiers.PUBLIC, new MemberName ("MoveNext", Location),
Parameters.EmptyReadOnlyParameters);
}
}
}
- public static Iterator CreateIterator (IMethodData method, TypeContainer parent,
+ public static Iterator CreateIterator (IMethodData method, DeclSpace parent,
GenericMethod generic, int modifiers)
{
bool is_enumerable;