Standard conversion classification completion
Define one semantic vocabulary for identity, numeric, nullable, enum, reference/interface, null, and existing pointer/unsafe conversions.
VOID Language roadmap
The iterator-lifetime and generic-operator phase is finished, including preservation of generic constraint provenance through iterator lowering. Completed phases stay collapsible while conversion semantics becomes the active compiler architecture block.
Current phase
This phase consolidates VOID's older conversion paths into one semantic conversion engine, then extends that same model through nullable lifting, target-typed sites, static-interface conversion contracts, constrained generics, iterators, closures, and GC. Semantic analysis remains authoritative; code generation consumes the selected conversion instead of rediscovering it.
Define one semantic vocabulary for identity, numeric, nullable, enum, reference/interface, null, and existing pointer/unsafe conversions.
Complete applicability, implicit/explicit rules, ambiguity, accessibility, and surrounding standard conversions for concrete conversion operators, with semantic analysis choosing the binding.
Integrate user-defined conversions with nullable value types, including null propagation, legal explicit extraction, ambiguity, and diagnostics through existing nullable machinery.
Drive assignments, locals, fields, properties, parameters, returns, constructors, arrays, initializers, params, conditionals, switch expressions, and other target-typed contexts through the same conversion engine.
Allow signature-only implicit/explicit conversion requirements on static interfaces, with specialization, inheritance, implementation validation, conflicts, and diagnostics.
Authorize generic implicit conversions only when an applicable interface constraint requires them, then resolve the concrete conversion through monomorphization.
Apply the same rule to explicit casts so specialized concrete conversions cannot make an unconstrained generic cast retroactively legal.
Preserve conversion-contract provenance through generic methods/types, specialization, locals, fields, properties, overload resolution, inference, and target-typed transformed expressions.
Carry generic conversion provenance through iterator fields and closure captures, then stress conversions across yield, GC, managed results, exceptions, finally, and disposal.
Close the block across standard/user conversions, nullable lifting, static-interface contracts, constrained generics, operators, closures, iterators, exceptions, deterministic cleanup, GC, and library compilation.
Completed foundations
Each completed phase keeps its full public history, but starts collapsed. Open only the section you want to inspect; the active phase above remains expanded.
foreach, enumerators, and yieldref/out/in, bindings, aliases, libraries, and callbackssizeof, memory copy/clear, and stackallocswitchconst/readonly, casts, is/asparamsdefault(T), typeof, type metadata, and conversionsdefaultvoidc checkin callsref/out/in capture and struct thisforeach, switch, nested control flow, and base-member accessreturn; with chaining/initializer and definite-assignment correctnessyieldref/out/in parameters through the existing C ABI"output": "library" static archives, [Export] symbols, reachability, static initialization, and VOID/C consumersvoid*, and ref/out/in pointer formsdo/while control flow across normal code, generics, lambdas, iterators, break/continue, and GC rootsadd/remove accessors across instance/static/interface/virtual formsnew[,]-style rectangular initializer inferencewhere constraints across class/struct/base/interface/multiple-interface/new() formsException hierarchy, messages, derived exceptions, and throw expression;finally on normal and exceptional completionreturn, break, and continue through one or more finally regionsthrow; rethrow, and exceptions raised from catch/finallyIDisposable foundation and deterministic compiler-generated iterator disposalforeach disposal on normal completion, early exit, and exceptionsusing (...) statements and scope-bound using declarationsnull patterns through the shared pattern matcherand, or, and not composition with binding/flow ruleswhen guards, deterministic first-match ordering, and focused invalid/unreachable diagnosticsyieldwhen-guard locals preserved across suspension with exact scopingfinally, and teardownforeach, using/disposal, exceptions, generics, and switch formsyieldWhat changed
The completed phase proved that pattern-local iterator lifetime, GC cleanup, user-defined operators, static-interface operator contracts, and constrained generic dispatch can share the existing compiler architecture. The final integration exposed a real lowering defect: promoted generic iterator fields lost their original constraint provenance. That metadata is now preserved, and the next block applies the same semantic-authority principle to VOID's conversion system.