Harbour's `DATA name1, name2, name3` (and `VAR`, `CLASSDATA`) should declare every listed field. Five's parseDataDecl instead returned a single DataDecl for the first name and silently dropped the rest — the comma branch just consumed the identifier without producing a new decl. Surfaced by the OPERATOR overloading test (/tmp/test_operator.prg originally had `DATA x, y` for a Vec2 class) where later `::y` access panicked with "unknown method y". Change the signature to `[]*ast.DataDecl` and rewrite the loop so each comma closes the current decl and starts a fresh one. AS / INIT / qualifier runs still attach to the most recent name, so: DATA x, y, z → three decls, no init DATA x INIT 10, y, z INIT 0 → init attaches to preceding name DATA cName AS CHARACTER → typed single decl All seven class-body call sites flatten the slice into `members`. Verified with /tmp/test_multidata.prg (`DATA x, y, z` + mixed `DATA label INIT "origin", count INIT 0`) and the OPERATOR test which now passes with the original `DATA x, y` form restored. FiveSql2 43/43, Harbour compat 56/56, Go test ALL PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
64 KiB
64 KiB