All notable changes to this project are documented in this file.
- README — v2 API docs (safe lookup, path API, throwing loads/dumps, typed accessors,
lua_valfactories); link toCHANGELOG.md; static analysis usage. - Static analysis —
.clang-tidy,cmake/StaticAnalysis.cmake,cppcheck-suppressions.txt, and Ubuntu CI job (cppcheck + clang-tidy). - Tests — expanded
smallfolk_tests/smallfolk_schema_testscoverage; fixed gvx/Lua Smallfolk wire interop fixtures intest_lua_smallfolk_interop_wires().
- Non-finite wire on glibc/libstdc++ — NaN/Inf values serialize as gvx tokens (
N/Q/I/i) instead of libcnan/inftext that broke round-trip on Linux/macOS; parsenanliterals and mapN/Qviastd::nan. - Schema depth-limit test — avoid dangling
CompiledSchemareference to a temporary nested schema (validation spuriously passed on GCC).
- Restored pre-v2 API and serializer comments in
smallfolk.h/smallfolk.cpp. - README build instructions: fix
SMALLFOLK_BUILD_TESTScmake typo.
- CMake library target (
smallfolk_cpp::smallfolk), install/export, CTest, benchmark, and multi-platform CI (Linux, macOS, Windows). ASSUMPTIONS.md— documented copy semantics, comparison, limits, threading, and security expectations.LoadLimits— configurable deserialization bounds (max_input_size,max_string_length,max_nesting_depth,max_value_count,max_table_entries,require_consumed_input,reject_non_finite_numbers).LuaVal::untrusted_load_limits()— tighter defaults for untrusted input.- Thread-safe
LuaVal::get_load_limits()/set_load_limits()(prefer per-call limits in servers). - Safe lookup API —
try_get,find,at,has(no auto-vivification). - Path API —
try_get_path,get_path,at_path,has_path,set_path,erase_path(variadic andinitializer_listoverloads). - Typed accessors —
try_as_number,try_as_string,try_as_bool. - Throwing API —
loads_or_throw,dumps_or_throw. - Aliases —
merge/mrg,erase/rem. smallfolk_convert.h/namespace lua_val— STL-friendly factories (map,array, etc.).- Schema validation (
smallfolk_schema.h) —Schema,CompiledSchema,validate,loads_validated,ValidateLimits. namespace schemapresets —number_range,string_length,string_enum,array_of,map_of,one_of,value(), and more.- Interactive demo restored as
examples/demo.cpp(smallfolk_demoCTest target) with Release-safeDEMO_CHECKchecks.
- Parser/serializer fixes (non-finite numbers, quoted strings, whitespace, trailing input rejection).
schema::array_of/map_of/one_of/string_enumreturn self-contained owned schemas (no global factory deque).- Schema factories take
Schemaby value where appropriate (move-friendly).
schema::one_of(Schema const * const *, size_t)— usestd::vector<Schema>,std::initializer_list<Schema>, or braced alternatives instead.
- Table
@circular references remain unsupported (deep copy on assign;@ignored on load). operator==for tables compares internal pointer identity, not structural equality.LuaValmutation is not thread-safe — treat parsed values as immutable when shared across threads.- See ASSUMPTIONS.md for full behavioral contract.
Initial public release: LuaVal type, Smallfolk wire-format serialize/deserialize, header + single .cpp integration.