/// <summary> /// Deep-clone the code object. /// </summary> public override CodeObject Clone() { ConstraintClause clone = (ConstraintClause)base.Clone(); clone.CloneField(ref clone._typeParameter, _typeParameter); clone._constraints = ChildListHelpers.Clone(_constraints, clone); return(clone); }
protected internal GenericMethodDecl(Parser parser, CodeObject parent, bool typeParametersAlreadyParsed, ParseFlags flags) : base(parser, parent, false, flags) { if (typeParametersAlreadyParsed) { // The type parameters were already parsed on the unused Dot expression - fetch them from there UnresolvedRef unresolvedRef = (UnresolvedRef)((Dot)parser.LastUnusedCodeObject).Right; _typeParameters = new ChildList <TypeParameter>(this); foreach (Expression expression in unresolvedRef.TypeArguments) { _typeParameters.Add(new TypeParameter(expression is UnresolvedRef ? ((UnresolvedRef)expression).Name : null)); } unresolvedRef.TypeArguments = null; } ParseMethodNameAndType(parser, parent, true, false); ParseModifiersAndAnnotations(parser); // Parse any attributes and/or modifiers if (!typeParametersAlreadyParsed) { _typeParameters = TypeParameter.ParseList(parser, this); // Parse any type parameters } ParseParameters(parser); _constraintClauses = ConstraintClause.ParseList(parser, this); // Parse any constraint clauses ParseTerminatorOrBody(parser, flags); }
protected override void AsTextAfter(CodeWriter writer, RenderFlags flags) { ConstraintClause.AsTextConstraints(writer, _constraintClauses, flags | RenderFlags.HasTerminator); base.AsTextAfter(writer, flags); }
protected void ParseConstraintClauses(Parser parser) { _constraintClauses = ConstraintClause.ParseList(parser, this); // Parse any constraint clauses }