From 51f67ac9081907ae22672a5ce04cdc0dd4adb466 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Sat, 8 Nov 2025 10:47:51 -0800 Subject: [PATCH] Passing null to a function triggers default value --- bun.lock | 2 +- package.json | 2 +- src/compiler/tests/compiler.test.ts | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bun.lock b/bun.lock index 9d07e0c..1767760 100644 --- a/bun.lock +++ b/bun.lock @@ -62,7 +62,7 @@ "hono": ["hono@4.10.4", "", {}, "sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg=="], - "reefvm": ["reefvm@git+https://git.nose.space/defunkt/reefvm#d7a971db24aea5ddcaae2c18ce9f10dab793db19", { "peerDependencies": { "typescript": "^5" } }, "d7a971db24aea5ddcaae2c18ce9f10dab793db19"], + "reefvm": ["reefvm@git+https://git.nose.space/defunkt/reefvm#3e2e68b31f504347225a4d705c7568a0957d629e", { "peerDependencies": { "typescript": "^5" } }, "3e2e68b31f504347225a4d705c7568a0957d629e"], "style-mod": ["style-mod@4.1.3", "", {}, "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ=="], diff --git a/package.json b/package.json index 472b4af..2000575 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "repl": "bun generate-parser && bun bin/repl", "update-reef": "rm -rf ~/.bun/install/cache/ && rm bun.lock && bun update reefvm", "cli:install": "ln -s \"$(pwd)/bin/shrimp\" ~/.bun/bin/shrimp", - "cli:remove": "rm ~/.bun/bin/shrimp", + "cli:remove": "rm ~/.bun/bin/shrimp" }, "dependencies": { "@codemirror/view": "^6.38.3", diff --git a/src/compiler/tests/compiler.test.ts b/src/compiler/tests/compiler.test.ts index ad62392..2931675 100644 --- a/src/compiler/tests/compiler.test.ts +++ b/src/compiler/tests/compiler.test.ts @@ -298,6 +298,23 @@ describe('default params', () => { expect('multiply = do x y=5: x * y end; multiply 5 2').toEvaluateTo(10) }) + test('null triggers default value', () => { + expect('test = do n=true: n end; test').toEvaluateTo(true) + expect('test = do n=true: n end; test false').toEvaluateTo(false) + expect('test = do n=true: n end; test null').toEvaluateTo(true) + }) + + test('null triggers default for named parameters', () => { + expect("greet = do name='World': name end; greet name=null").toEvaluateTo('World') + expect("greet = do name='World': name end; greet name='Bob'").toEvaluateTo('Bob') + }) + + test('null triggers default with multiple parameters', () => { + expect('calc = do x=10 y=20: x + y end; calc null 5').toEvaluateTo(15) + expect('calc = do x=10 y=20: x + y end; calc 3 null').toEvaluateTo(23) + expect('calc = do x=10 y=20: x + y end; calc null null').toEvaluateTo(30) + }) + test.skip('array default', () => { expect('abc = do alpha=[a b c]: alpha end; abc').toEvaluateTo(['a', 'b', 'c']) expect('abc = do alpha=[a b c]: alpha end; abc [x y z]').toEvaluateTo(['x', 'y', 'z'])