Files
ww/test/wcc/wwtestpkg.h
Hojun-Cho 83f5956df2 test: banner purge + WHY-only comment sweep (rule 8)
Every section banner dies (103 -> 0) across test/lang, the observer
suites, the C carriers, and the five comment-heavy corpus fixtures;
banner provenance (#N cites, carrier numbers, repair-cluster labels)
folded into headers or adjacent WHY comments. Narration deleted; row
provenance, ref cites, divergence pins, and layout contracts kept
(fwd-ref decl-order guards and bootstrap-gate corpus rationale
restored where the sweep over-cut). Comment-only proven: all 3742
wwbuild workdir .s byte-identical before/after; test-commit and
test-byteid (161 lang + 1399 data, 0 pinned-divergent) green.
2026-08-08 21:40:23 +09:00

62 lines
1.6 KiB
C

/*
* Strict-package (#24a) test support.
*
* Inline ww test fixtures historically omitted the `package main;` clause
* that the parser now requires (a missing clause is a hard error). These
* helpers inject it transparently so the fixtures stay terse, WITHOUT
* disturbing fixtures that already declare their own module identity.
*
* wwtest_fputs is a drop-in for fputs(src, f): it prepends `package main;`
* only when writing at the START of a fresh file (ftell == 0) AND the
* fixture does not already open with its own `package`/`//ww:module`
* directive. The ftell guard keeps multi-part writes and writes to
* non-seekable streams (stderr) behaving exactly like plain fputs.
*/
#ifndef WWTESTPKG_H
#define WWTESTPKG_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static inline int
wwtest_has_module(const char *s)
{
const char *p = s;
while (p != NULL) {
while (*p == ' ' || *p == '\t')
p++;
if (strncmp(p, "package ", 8) == 0
|| strncmp(p, "package\t", 8) == 0
|| strncmp(p, "//ww:module", 11) == 0)
return 1;
p = strchr(p, '\n');
if (p != NULL)
p++;
}
return 0;
}
static inline void
wwtest_fputs(const char *src, FILE *f)
{
if (ftell(f) == 0 && !wwtest_has_module(src))
fputs("package main;\n", f);
fputs(src, f);
}
/* In-process variant: a malloc'd copy of src with the clause prefixed
* (unless src declares its own module). Caller frees. */
static inline char *
wwtest_wrap(const char *src)
{
const char *pfx = wwtest_has_module(src) ? "" : "package main;\n";
size_t np = strlen(pfx), ns = strlen(src);
char *b = malloc(np + ns + 1);
memcpy(b, pfx, np);
memcpy(b + np, src, ns + 1);
return b;
}
#endif