e67a90f2
c_runtime: decode singular scalars (ra6 3c)
New entry pb.c_runtime.decode(plan, bytes) -> table, symmetric in scope with 3b: int32/64, uint32/64, sint32/64, bool, fixed32/64, sfixed32/64, float, double, enum, string, bytes. Repeated, map, message-typed, and unknown tags skip by wire type — 3d/3e/3i/wyp will extend later. Result shape mirrors mode=full pure-Lua decode byte-for-byte: int64 family (int64/uint64/sint64/fixed64/sfixed64) push Tarantool cdata via luaL_pushint64 / luaL_pushuint64; everything else lands as Lua number/string/boolean. Pre-sized via lua_createtable(0, n_fields). Field lookup is a linear scan over plan->fields by field_number; a tag-keyed dispatch table is a future optimization. Tests: 26 cases per codegen mode (full + runtime), covering the bd-mz6 acceptance (round-trip of bd-y1n's Person payload matches mode=full Person_decode shape-for-shape) plus per-kind coverage, proto3-optional presence, fixed64 cdata, -0.0 sign preservation (built via cdata to dodge LuaJIT literal-folding to +0.0), skip-by-wire-type for out-of-scope shapes, unknown-tag skip, WKT override rejection, and truncated input. Suite: 832/832 with PB_ENABLE_C=1, 748/748 + 84 skipped without. Closes bd-mz6
Eugene Blikh <bigbes@gmail.com> — 2026-05-23 10:00:39 UTC
Commit e67a90f2085f492aee03f56856200a4ed97d85d2 —
view raw patch
Parent(s):
5e8f5f60
| File | Status | + | − |
|---|---|---|---|
.beads/issues.jsonl
|
M | +1 | -1 |
runtime/pb/c/c_runtime.c
|
M | +276 | |
test/c_runtime_decode_test.lua
|
A | +178 |