public override void VisitAbstractIter(AbstractIterSignature iter) { nestedTypes.Add(iter.TypeBuilder); }
public override void VisitAbstractIter(AbstractIterSignature iter) { string baseName = iter.Name.Substring(0, iter.Name.Length - 1); string creatorName = "__itercreate" + iterCount + "_" + baseName; iter.Arguments.Accept(this); iter.MoveNextArguments.Accept(this); iter.ReturnType.Accept(this); TypeBuilder typeBuilder = currentClass.TypeBuilder; try { CheckMethodConfliction(currentClass.TypeData, iter.Name, iter.ReturnType.NodeType, iter.Arguments); } catch (MethodConflictionException e) { report.Error(iter.Location, e.Message); return; } iter.TypeBuilder = typeBuilder.DefineNestedType("__itertype" + iterCount + "_" + baseName, TypeAttributes.Interface | TypeAttributes.Abstract | TypeAttributes.NestedPublic); iter.MoveNext = DefineMethod(iter.TypeBuilder, "MoveNext", MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Abstract | MethodAttributes.HideBySig, typeManager.BoolType, iter.MoveNextArguments); if (!iter.ReturnType.IsNull) { iter.GetCurrent = DefineMethod(iter.TypeBuilder, "GetCurrent", MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Abstract | MethodAttributes.HideBySig, iter.ReturnType.NodeType, new TypedNodeList()); } iter.Creator = DefineMethod(typeBuilder, creatorName, MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Abstract | MethodAttributes.HideBySig, typeManager.GetTypeData(iter.TypeBuilder), GetIterCreatorArguments(iter.Arguments)); typeManager.AddIterCreator(iter.Creator); iter.MethodBuilder = DefineMethod(typeBuilder, "__iter_" + baseName, MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Abstract | MethodAttributes.HideBySig, iter.ReturnType.NodeType, iter.Arguments); typeManager.AddBabelName(iter.MethodBuilder, iter.Name); typeManager.AddIterCreatorName(iter.MethodBuilder, creatorName); iterCount++; }
public virtual void VisitAbstractIter(AbstractIterSignature iter) { }