44dc5562eff90da91e332b2dda88a37958fc979c
emitcm7.c reimplements the emitter for sources that mention M7 syntax, and three things were lost in the port. All of them only reached M4 fixtures, because M1-M3 and M6 take the M6 fast path. Local initializers named "0". The LET/VAR case passed the declaration node to emit_lvalue, which matches only IDENT/MEMBER/INDEX and otherwise falls through to the raw expression path -- a declaration node renders there as "0", so every `var x = init;` emitted `0 = init;`. Teach emit_lvalue that a declaration names its own storage, which also fixes the catch path that had the same call. Aggregate initializers were not constant. A string-literal `const` lowered to a maker call, but C89 requires a constant expression for aggregate initializers at file scope and for automatics alike, and the build runs with -za. Restore the braced form for both the local and the global path. Slice helpers were never emitted. The final loop in m7_emit_type_helpers is commented as reusing the M3 index/slice generator but only ported the index half, so bodies called fe_slice_*/fe_full_*/fe_tail_* that no declaration defined. Emit the three slicers for array and slice types. The first defect masked the other two: wcc386 died on `0 = ...` before it could reach them, and wcl386 reports that as "Unable to invoke wcc386.exe" with no diagnostic, which is why this needed bisecting against master's output rather than reading an error message. M1-M7: 7 failed, 176 passed -> 3 failed, 180 passed. The remainder is m5 runtime, which is a separate fixture issue.
Description
doslang mirror
914 KiB
Languages
C
94.2%
Python
3%
Assembly
2%
JavaScript
0.6%