- iterator_type_expr = InflateType (Iterator.OriginalIteratorType);
-
-#if GMCS_SOURCE
- generic_args = new TypeArguments (Location);
- generic_args.Add (iterator_type_expr);
-#endif
-
- ArrayList list = new ArrayList ();
- if (Iterator.IsEnumerable) {
- enumerable_type = new TypeExpression (
- TypeManager.ienumerable_type, Location);
- list.Add (enumerable_type);
-
-#if GMCS_SOURCE
- generic_enumerable_type = new ConstructedType (
- TypeManager.generic_ienumerable_type,
- generic_args, Location);
- list.Add (generic_enumerable_type);
-#endif
- }
-
- enumerator_type = new TypeExpression (
- TypeManager.ienumerator_type, Location);
- list.Add (enumerator_type);
-
- list.Add (new TypeExpression (TypeManager.idisposable_type, Location));
-
-#if GMCS_SOURCE
- generic_enumerator_type = new ConstructedType (
- TypeManager.generic_ienumerator_type,
- generic_args, Location);
- list.Add (generic_enumerator_type);
-#endif
-
- type_bases = list;
-
- return base.GetClassBases (out base_class);
- }
-
- protected override bool DoResolveMembers ()
- {
- pc_field = CaptureVariable ("$PC", TypeManager.system_int32_expr);
- current_field = CaptureVariable ("$current", iterator_type_expr);
-
-#if GMCS_SOURCE
- Define_Current (true);
-#endif
- Define_Current (false);
- new DisposeMethod (this);
- Define_Reset ();
-
- if (Iterator.IsEnumerable) {
- new GetEnumeratorMethod (this, false);
-#if GMCS_SOURCE
- new GetEnumeratorMethod (this, true);
-#endif
- }
-
- return base.DoResolveMembers ();