From 53c30e2ea2356c29c0df3e5116ec94f0ccc73445 Mon Sep 17 00:00:00 2001 From: MaartenS11 Date: Thu, 11 Sep 2025 11:13:12 +0200 Subject: [PATCH 1/2] Debugger::printValue now uses a decimal representation for all datatypes This simplifies the frontend which no longer has to parse the value of a stack element in hex if it's a float or in decimal if it's an integer. It can just always parse it as a decimal. --- src/Debug/debugger.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Debug/debugger.cpp b/src/Debug/debugger.cpp index f84651b0..34aac402 100644 --- a/src/Debug/debugger.cpp +++ b/src/Debug/debugger.cpp @@ -394,15 +394,15 @@ void Debugger::printValue(const StackValue *v, const uint32_t idx, v->value.uint64); break; case F32: - snprintf(buff, 255, R"("type":"F32","value":")" FMT(PRIx32) "\"", + snprintf(buff, 255, R"("type":"F32","value":")" FMT(PRIi32) "\"", v->value.uint32); break; case F64: - snprintf(buff, 255, R"("type":"F64","value":")" FMT(PRIx64) "\"", + snprintf(buff, 255, R"("type":"F64","value":")" FMT(PRIi64) "\"", v->value.uint64); break; default: - snprintf(buff, 255, R"("type":"%02x","value":")" FMT(PRIx64) "\"", + snprintf(buff, 255, R"("type":"%02x","value":")" FMT(PRIi64) "\"", v->value_type, v->value.uint64); } this->channel->write(R"({"idx":%d,%s}%s)", idx, buff, end ? "" : ","); From 89c6d8e3c58ff26551b2196e0c231eaa77fe4b02 Mon Sep 17 00:00:00 2001 From: Tom Lauwaerts Date: Fri, 17 Apr 2026 21:17:21 +0200 Subject: [PATCH 2/2] Bump latch to v5 --- tests/latch/latch-0.5.0.tgz | Bin 0 -> 56418 bytes tests/latch/package-lock.json | 155 +++++++++++++++++++++-------- tests/latch/package.json | 2 +- tests/latch/src/comp.test.ts | 2 +- tests/latch/src/debugger.test.ts | 2 +- tests/latch/src/primitives.test.ts | 2 +- tests/latch/src/spec.test.ts | 6 +- tests/latch/src/util/spec.util.ts | 14 +-- 8 files changed, 130 insertions(+), 53 deletions(-) create mode 100644 tests/latch/latch-0.5.0.tgz diff --git a/tests/latch/latch-0.5.0.tgz b/tests/latch/latch-0.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..53ee87eef80b7735892720d7fb65e0526666852b GIT binary patch literal 56418 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 literal 0 HcmV?d00001 diff --git a/tests/latch/package-lock.json b/tests/latch/package-lock.json index 88852dbf..f3650b19 100644 --- a/tests/latch/package-lock.json +++ b/tests/latch/package-lock.json @@ -8,7 +8,7 @@ "name": "warduino-testsuite", "version": "1.0.0", "devDependencies": { - "latch": "file:./latch-0.4.1.tgz", + "latch": "file:./latch-0.5.0.tgz", "mqtt": "^4.3.7", "serialport": "^10.4.0", "typescript": "^4.5.5" @@ -247,6 +247,82 @@ "url": "https://opencollective.com/serialport/donate" } }, + "node_modules/@thi.ng/checks": { + "version": "3.8.8", + "resolved": "https://registry.npmjs.org/@thi.ng/checks/-/checks-3.8.8.tgz", + "integrity": "sha512-M2KXml9m2bhqtDAJou0HJWip2xjvXO2i4DhlJ4ouFRoRPY5aCA+EcHFlxNl/DeVtns/Cv86xIUtBGzXksVHk2A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/thi.ng" + } + ], + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/errors": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/@thi.ng/errors/-/errors-2.6.7.tgz", + "integrity": "sha512-jFvECE7RPtB8P3BPL+XYOgGZqRheVtq32DAy3LJwbqgFP2v/lSyTwzvA47KsDKn1VDOGPGBhR5cM8eR7mnNbdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/thi.ng" + } + ], + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/leb128": { + "version": "3.1.83", + "resolved": "https://registry.npmjs.org/@thi.ng/leb128/-/leb128-3.1.83.tgz", + "integrity": "sha512-joed1lVCUA1GfrQjuftc/EO2VUXrhZogNfhRFk1wbtn4mquTVB1VORVSqiLgcRysRkTpwUeDG0py+o/zFXgdXw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/thi.ng" + } + ], + "license": "Apache-2.0", + "dependencies": { + "@thi.ng/checks": "^3.8.8", + "@thi.ng/errors": "^2.6.7" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", @@ -276,20 +352,20 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.19.0" } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -300,9 +376,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, "license": "MIT", "dependencies": { @@ -383,9 +459,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -527,9 +603,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -574,9 +650,9 @@ "license": "ISC" }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "dev": true, "license": "MIT", "engines": { @@ -590,7 +666,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -697,11 +773,12 @@ } }, "node_modules/latch": { - "version": "0.4.1", - "resolved": "file:latch-0.4.1.tgz", - "integrity": "sha512-GvpSRSwFcXl6t5h2gKyVbCB65QMJhzDhhSR+Yrl7H+AtApqJqYowl0vaDIUVrDgRvq/VBASZNYwy33TCuuxWlg==", + "version": "0.5.0", + "resolved": "file:latch-0.5.0.tgz", + "integrity": "sha512-2IzWl3cDGPkE6+7+GySZvkw3TPOimkoamNIjAdNXiiWJPdqJ5PP6MEJgp+uQibolpPz6UDZjOq6kpIuwr21caQ==", "dev": true, "dependencies": { + "@thi.ng/leb128": "^3.1.75", "ansi-colors": "^4.1.3", "ieee754": "^1.2.1", "ora": "^8.0.1", @@ -784,9 +861,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -957,9 +1034,9 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "dependencies": { @@ -1145,13 +1222,13 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -1224,6 +1301,7 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1233,12 +1311,11 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", diff --git a/tests/latch/package.json b/tests/latch/package.json index 68e0e1f1..9b23efe9 100644 --- a/tests/latch/package.json +++ b/tests/latch/package.json @@ -8,7 +8,7 @@ "comptest": "npx ts-node ./src/comp.test.ts" }, "devDependencies": { - "latch": "file:./latch-0.4.3.tgz", + "latch": "file:./latch-0.5.0.tgz", "mqtt": "^4.3.7", "serialport": "^10.4.0", "typescript": "^4.5.5" diff --git a/tests/latch/src/comp.test.ts b/tests/latch/src/comp.test.ts index f38095a2..e8edf06f 100644 --- a/tests/latch/src/comp.test.ts +++ b/tests/latch/src/comp.test.ts @@ -11,7 +11,7 @@ import { } from "latch"; const framework = Framework.getImplementation(); -framework.style(StyleType.github); +framework.reporter.style(StyleType.github) const suite = framework.suite('Specification test suite for WebAssembly'); suite.testee('emulator [:8500]', new EmulatorSpecification(8500)); diff --git a/tests/latch/src/debugger.test.ts b/tests/latch/src/debugger.test.ts index b78eaec2..d9723ace 100644 --- a/tests/latch/src/debugger.test.ts +++ b/tests/latch/src/debugger.test.ts @@ -26,7 +26,7 @@ const EXAMPLES: string = `${__dirname}/../examples/`; */ const framework = Framework.getImplementation(); -framework.style(StyleType.github); +framework.reporter.style(StyleType.github) const integration: Suite = framework.suite('Integration tests: Debugger'); // must be called first diff --git a/tests/latch/src/primitives.test.ts b/tests/latch/src/primitives.test.ts index a08cd28e..a1984d7a 100644 --- a/tests/latch/src/primitives.test.ts +++ b/tests/latch/src/primitives.test.ts @@ -15,7 +15,7 @@ import Type = WASM.Type; import {Breakpoint} from "latch/dist/types/debug/Breakpoint"; const framework = Framework.getImplementation(); -framework.style(StyleType.github); +framework.reporter.style(StyleType.github) // TODO disclaimer: file is currently disabled until latch supports AS compilation diff --git a/tests/latch/src/spec.test.ts b/tests/latch/src/spec.test.ts index dcc1a06a..7f9fec09 100644 --- a/tests/latch/src/spec.test.ts +++ b/tests/latch/src/spec.test.ts @@ -58,7 +58,7 @@ if (TESTFILE.length > 0) { // run tests const framework = Framework.getImplementation(); -framework.style(StyleType.github); +framework.reporter.style(StyleType.github) const spec = framework.suite('Specification test suite for WebAssembly'); spec.testee('emulator [:8500]', new EmulatorSpecification(8500)); @@ -75,8 +75,8 @@ function createTest(module: string, asserts: string[]): TestScenario { for (const assert of asserts) { const cursor = {value: 0}; const func: string = find(/invoke "([^"]+)"/, assert); - const args: WASM.Value[] = parseArguments(assert.replace(`(invoke "${func} "`, ''), cursor); - const result: WASM.Value | undefined = parseResult(assert.slice(cursor.value)); + const args: WASM.Value[] = parseArguments(assert.replace(`(invoke "${func} "`, ''), cursor); + const result: WASM.Value | undefined = parseResult(assert.slice(cursor.value)); steps.push({ title: assert, diff --git a/tests/latch/src/util/spec.util.ts b/tests/latch/src/util/spec.util.ts index 94c5a63c..02dabaa6 100644 --- a/tests/latch/src/util/spec.util.ts +++ b/tests/latch/src/util/spec.util.ts @@ -5,7 +5,7 @@ interface Cursor { value: number; } -export function parseResult(input: string): WASM.Value | undefined { +export function parseResult(input: string): WASM.Value | undefined { let cursor = 0; let delta: number = consume(input, cursor, /\(/d); if (delta === 0) { @@ -14,13 +14,13 @@ export function parseResult(input: string): WASM.Value | undefined { cursor += delta; delta = consume(input, cursor, /^[^.)]*/d); - const type: WASM.Type = WASM.typing.get(input.slice(cursor, cursor + delta)) ?? WASM.Type.i64; + const type: WASM.Type = WASM.typing.get(input.slice(cursor, cursor + delta)) ?? WASM.Integer.i64; cursor += delta + consume(input, cursor + delta); let value; delta = consume(input, cursor, /^[^)]*/d); - if (type === WASM.Type.f32 || type === WASM.Type.f64) { + if (type === WASM.Float.f32 || type === WASM.Float.f64) { value = parseHexFloat(input.slice(cursor, cursor + delta)); } else { value = parseInteger(input.slice(cursor, cursor + delta)); @@ -33,8 +33,8 @@ export function parseResult(input: string): WASM.Value | undefined { return {type, value}; } -export function parseArguments(input: string, index: Cursor): WASM.Value[] { - const args: WASM.Value[] = []; +export function parseArguments(input: string, index: Cursor): WASM.Value[] { + const args: WASM.Value[] = []; let cursor: number = consume(input, 0, /invoke "[^"]+"/d); while (cursor < input.length) { @@ -45,12 +45,12 @@ export function parseArguments(input: string, index: Cursor): WASM.Value[] { cursor += delta; delta = consume(input, cursor, /^[^.)]*/d); - const type: WASM.Type = WASM.typing.get(input.slice(cursor + delta - 3, cursor + delta)) ?? WASM.Type.i64; + const type: WASM.Type = WASM.typing.get(input.slice(cursor + delta - 3, cursor + delta)) ?? WASM.Integer.i64; cursor += delta + consume(input, cursor + delta, /^[^)]*const /d); delta = consume(input, cursor, /^[^)]*/d); let maybe: number | undefined; - if (type === WASM.Type.f32 || type === WASM.Type.f64) { + if (type === WASM.Float.f32 || type === WASM.Float.f64) { maybe = parseHexFloat(input.slice(cursor, cursor + delta)); } else { maybe = parseInteger(input.slice(cursor, cursor + delta));