private IEnumerable <CodeMemberField> GenerateFields(ClassDef c) { var ct = types.TypeOf(c.name); var fields = ct.Table.table.Where(m => IsField(m.Value)) .OrderBy(f => f.Key); foreach (var field in fields) { var b = field.Value.First(); var(fieldType, ns) = types.Translate(b.type); gen.EnsureImports(ns); yield return(new CodeMemberField(fieldType, field.Key) { Attributes = MemberAttributes.Public }); } }
public CodeExpression VisitApplication(Application appl) { var fn = appl.fn.Accept(this); var args = TranslateArgs(appl).ToArray(); var dtFn = types.TypeOf(appl.fn); if (dtFn is ClassType c) { // applying a class type => calling constructor. var(csClass, nm) = types.Translate(dtFn); m.EnsureImports(nm); var e = m.New(csClass, args); return(e); } if (fn is CodeVariableReferenceExpression id) { var e = intrinsic.MaybeTranslate(id.Name, appl, args); if (e != null) { return(e); } } else { if (fn is CodeFieldReferenceExpression field) { var specialTranslator = GetSpecialTranslator(field); if (specialTranslator != null) { var special = specialTranslator(m, field, args); if (special != null) { return(special); } } if (field.FieldName == "iteritems") { if (args.Length == 0) { // iteritems is Python 2.x returning an iterable over // a dictionary's key-value pairs. In C#, just return // the dictionary (assumes that we're dealing with a dictionary!) } return(field.Expression); } else if (field.FieldName == "itervalues") { if (args.Length == 0) { return(m.Access(field.Expression, "Values")); } } else if (field.FieldName == "iterkeys") { if (args.Length == 0) { return(m.Access(field.Expression, "Keys")); } } } } return(m.Appl(fn, args)); }