Context
#156 Stage 4 shipped the lowering for C# 14 extension indexers (item$get(self, index) / item$set(self, index, value), custom [IndexerName] support, receiver-once via IrLetExpression). Commit 7bfe7dd.
The 7 tests in tests/Metano.Tests/ExtensionIndexerTests.cs are [Skip]-gated because Roslyn 5.3.0 (.NET 10) rejects indexers inside extension(R) { … } blocks with:
error CS9282: this member is not allowed in an extension block
Even with LangVersion=preview. Verified against the SDK pinned in global.json.
Action when Roslyn unblocks
- Drop the
[Skip(...)] markers in ExtensionIndexerTests.
- Run the suite. All 7 should pass without code changes — lowering paths are already wired (
IrModuleFunctionExtractor.ConvertExtensionIndexerGetter + …Setter, IrExpressionExtractor.BuildExtensionIndexerGetCall + BuildExtensionIndexerAssignment + BuildExtensionIndexerIncrement).
- Regenerate any sample that exercises indexers; verify generated TS.
- Close this issue.
References
Decision recorded
Forward-compat merge chosen over hold-until-Roslyn so the lowering work doesn't bit-rot — sunk implementation cost is preserved, integration deltas show up the moment the syntax is admitted.
Context
#156 Stage 4 shipped the lowering for C# 14 extension indexers (
item$get(self, index)/item$set(self, index, value), custom[IndexerName]support, receiver-once viaIrLetExpression). Commit7bfe7dd.The 7 tests in
tests/Metano.Tests/ExtensionIndexerTests.csare[Skip]-gated because Roslyn 5.3.0 (.NET 10) rejects indexers insideextension(R) { … }blocks with:Even with
LangVersion=preview. Verified against the SDK pinned inglobal.json.Action when Roslyn unblocks
[Skip(...)]markers inExtensionIndexerTests.IrModuleFunctionExtractor.ConvertExtensionIndexerGetter+…Setter,IrExpressionExtractor.BuildExtensionIndexerGetCall+BuildExtensionIndexerAssignment+BuildExtensionIndexerIncrement).References
7bfe7dd— forward-compat scaffolding + skipped tests.Decision recorded
Forward-compat merge chosen over hold-until-Roslyn so the lowering work doesn't bit-rot — sunk implementation cost is preserved, integration deltas show up the moment the syntax is admitted.