import { JSON } from "../../.."; import { QUOTE } from "../../../custom/chars"; import { isUnescapedQuote } from "../../../util"; export function deserializeStaticArrayString( srcStart: usize, srcEnd: usize, dst: usize, ): StaticArray { // First pass: count elements using same logic as Array deserializer let count: i32 = 0; let ptr = srcStart; let inString = false; while (ptr < srcEnd) { const code = load(ptr); if (code == QUOTE) { if (!inString) { inString = true; } else if (isUnescapedQuote(ptr)) { count++; inString = false; } } ptr += 2; } // Allocate StaticArray with correct size const outSize = (count) << alignof(); const out = changetype>( dst || __new(outSize, idof>()), ); // Second pass: populate values let index = 0; let lastPos: usize = 0; inString = false; while (srcStart < srcEnd) { const code = load(srcStart); if (code == QUOTE) { if (!inString) { inString = true; lastPos = srcStart; } else if (isUnescapedQuote(srcStart)) { unchecked( (out[index++] = JSON.__deserialize(lastPos, srcStart + 2)), ); inString = false; } } srcStart += 2; } return out; }