Skip to content

[Version 12.0] Feature support for collection expressions - #1638

Draft
RexJaeschke wants to merge 13 commits into
draft-v12from
v12-collection-expressions
Draft

[Version 12.0] Feature support for collection expressions#1638
RexJaeschke wants to merge 13 commits into
draft-v12from
v12-collection-expressions

Conversation

@RexJaeschke

Copy link
Copy Markdown
Contributor

This is Rex's adaptation of the corresponding MS proposal.

  • Some sections of the MS spec appears to be targeted to the implementer:

    • The essence of the “Ref safety” section has been reduced to a single paragraph at the end of “Implicit collection expression conversions.”
    • Nothing was adopted from the “Extension methods” section.
    • Nothing was adopted from the “Span types” section.
    • Nothing was adopted from the long/detailed “Collection literal translation” section.
    • Nothing was adopted from the “Unsupported scenarios” section.
    • Nothing was adopted from the “Resolved questions” section.
  • Syntax ambiguities: It’s not clear what the final situation is; nothing was added from this section.

  • It isn’t clear what might/should be adopted from the “Unresolved questions” section.

@RexJaeschke RexJaeschke added this to the C# 12 milestone Apr 16, 2026
@RexJaeschke RexJaeschke added type: feature This issue describes a new feature Review: pending Proposal is available for review labels Apr 16, 2026
@RexJaeschke
RexJaeschke marked this pull request as draft April 16, 2026 17:48
@BillWagner
BillWagner force-pushed the v12-collection-expressions branch from cfccbc4 to 4922e5a Compare May 14, 2026 15:29
@BillWagner
BillWagner force-pushed the v12-collection-expressions branch from 4922e5a to c03dfa4 Compare June 24, 2026 22:41
@BillWagner
BillWagner force-pushed the v12-collection-expressions branch from c03dfa4 to cecd45c Compare July 24, 2026 19:57
BillWagner pushed a commit that referenced this pull request Aug 10, 2026
Source: #1638
PR head SHA: cecd45c
Merge-base SHA: 2ab4487
Aggregate diff SHA-256: 6e8f18eb963cfcd501ae00a792f0b0033ae479c3ead4b7b96ac8d329881bc152
Conflict resolved: classes.md — PR 1638 new §declaring-a-collection-type and §collection-construction
  sections inserted before §15.17 Record class and non-record class differences (restored by
  83f8fa7). Both sections preserved; no normative content dropped.
NOTE: expressions.md §12.6.3.14 TBD marker preserved per committee review flag (decision 3).
NOTE: PR #1638 §16.4.12 stale cross-reference to safe-context-constraint retained as-is;
  will be corrected to §16.6.15 by renumber tool (TOC002 diagnostic).
Status: REVIEW_REQUIRED — not ECMA-approved; alpha-v12 working draft only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7c07b608-2471-41d5-845a-152b2378a43d
BillWagner added a commit that referenced this pull request Aug 10, 2026
1. conversions.md: Insert missing blank line before the
   §ImplicitInlineArrayConversions heading so it renders as a
   heading rather than paragraph text (PR #1620 integration gap).

2. conversions.md: Correct stale safe-context cross-reference from
   [§16.5.15](structs.md#16412-safe-context-constraint) to
   [§16.6.15](structs.md#16615-safe-context-constraint), fixing
   both the section number and the URL fragment introduced by the
   PR #1638 application commit (b799df08).

3. classes.md line 39: Add missing closing ')' to the §15.17 link
   so [§15.17](classes.md#1517-record-class-and-non-record-class-differences)
   is a valid Markdown link rather than malformed inline text.

All three corrections independently reviewed and approved by Bill Wagner
before this commit was created/amended.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7c07b608-2471-41d5-845a-152b2378a43d
BillWagner pushed a commit that referenced this pull request Aug 10, 2026
Ran StandardAnchorTags (tools/StandardAnchorTags/) against alpha-v12
after applying six C# 12 feature patches (PRs #1766, #1638, #1620,
#1624, #1623, #1622). Three operations performed:

Section renumber and cross-reference update (StandardAnchorTags phases 1–2):
Resolved all 12 symbolic §-anchor headings introduced by the feature
patches to real section numbers in document order:
  §struct-prim-constructors       → §16.4  (structs.md)
  §InlineArray                    → §16.6  (structs.md)
  §declaring-a-collection-type    → §15.17 (classes.md)
  §declaring-a-collection-type-general → §15.17.1
  §collection-construction        → §15.17.2
  §prim-constructor               → §15.11.6 (classes.md)
  §InlineArrayElementAccess       → §12.8.12.3 (expressions.md)
  §collection-expressions         → §12.8.25 (expressions.md)
  §imp-collection-expression-conv → §10.2.22 (conversions.md)
  §ImplicitInlineArrayConversions → §10.2.23 (conversions.md)
  §collection-builder-attr        → §23.5.12 (attributes.md)
  §InlineArrayAttribute           → §23.5.13 (attributes.md)

Existing sections displaced by new insertions were renumbered:
  structs.md: §16.4 Record structs → §16.5; §16.5 → §16.7; §16.6 → §16.8
    (cascade: §16.6.15 safe-context-constraint → §16.8.15 throughout)
  classes.md: §15.17 Record class differences → §15.18
  expressions.md: §12.8.12.3 String access → §12.8.12.4;
                  §12.8.12.4 Indexer access → §12.8.12.5

All cross-references to displaced sections updated in: arrays.md,
attributes.md, classes.md, conversions.md, expressions.md,
interfaces.md, namespaces.md, ranges.md, structs.md, types.md,
unsafe-code.md, variables.md.

README TOC update (WriteUpdatedTOC):
standard/README.md regenerated to reflect new section numbers and
entries for all six C# 12 features. New TOC entries include §15.17
Declaring a collection type, §16.4 Primary constructors, §16.6 Inline
arrays, §10.2.22–§10.2.23, §12.8.12.3, §23.5.12–§23.5.13.

Grammar regeneration (GenerateNewGrammar):
standard/grammar.md regenerated from grammar blocks embedded in all
standard/*.md files. C# 12 grammar additions from the six feature
deltas now present:
  - collection_expression / collection_element / expression_element /
    spread_element (PR #1638, §12.8.25)
  - non_record_class_with_positional_members with delimited_parameter_list
    (PR #1766); non_record_class_without_positional_members split out
  - non_record_struct_with/without_positional_members (PR #1766)
  - class_body / struct_body / interface_body / enum_body: added
    semicolon-body alternative '| ;' (PR #1766)
  - base_argument_list moved to non-record class context; record_class_body
    and record_struct_body productions eliminated (PR #1766)
  - explicit_anonymous_function_signature simplified to
    '(' parameter_list? ')' reusing standard parameter_list (PR #1623)
  - parameter_mode_modifier uses ref_kind (PR #1624)
  - using_alias_directive: added 'unsafe'? and (namespace_name | type)
    (PR #1622); using_static_directive: added 'unsafe'? (PR #1622)
  - Source-comment section numbers updated throughout grammar.md

Eight independently reviewed manual link corrections applied to the generated
renumber output before commit (reviewed by Bill Wagner):
  - expressions.md: lower-bound inference link corrected from §12.6.3.10
    (exact inferences) to §12.6.3.11 (lower-bound inferences)
  - namespaces.md: pointer-types link corrected from attributes.md §23.3
    (attribute specification) to unsafe-code.md §24.3 (pointer types)
  - classes.md §15.16.4.6.2: symbolic §prim-constructor resolved to [§15.11.6]
  - classes.md §15.17.1: symbolic §collection-expressions resolved to [§12.8.25]
  - classes.md §15.17.1: symbolic §imp-collection-expression-conv resolved to [§10.2.22]
  - classes.md §15.17.1: symbolic §collection-builder-attr resolved to [§23.5.12]
  - classes.md §15.17.2: symbolic §collection-construction resolved to [§15.17.2]
  - classes.md §15.17.2: symbolic §declaring-a-collection-type-general resolved to [§15.17.1]

This commit does not represent ECMA approval of any feature. All six
source PRs remain open and unreviewed by the ECMA TC49-TG2 committee.
The alpha-v12 branch is a working synthesis for committee review.

Pending committee review flags (carried from feature commits):
  - expressions.md §12.6.3.14: **TBD** marker on lambda inference (PR #1638)
  - classes.md / conversions.md: PR #1623 Binder changes omitted per
    decision in session 7c07b608

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7c07b608-2471-41d5-845a-152b2378a43d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Review: pending Proposal is available for review type: feature This issue describes a new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant