From a949fa24f789ee46d23e8a09295be1a5dc20af14 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Fri, 8 Mar 2024 11:27:09 +0100 Subject: [PATCH] add field exp support to objectWith --- src/kiss/Macros.hx | 11 +++++++++++ src/test/cases/BasicTestCase.hx | 4 ++++ src/test/cases/BasicTestCase.kiss | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 29d95f7..5913ffa 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -1063,8 +1063,19 @@ class Macros { []; } + var b = wholeExp.expBuilder(); + for (exp in exps) { switch (exp.def) { + // (objectWith obj.field) expands to (object field obj.field) + case Symbol(withDots) if (withDots.indexOf(".") != -1): + var fieldName = withDots.split(".").pop(); + objectExps.push(b.symbol(fieldName)); + objectExps.push(exp); + // (objectWith .field ) expands to (object field .field ) + case FieldExp(fieldName, innerExp, _): + objectExps.push(b.symbol(fieldName)); + objectExps.push(exp); case Symbol(_): objectExps.push(exp); objectExps.push(exp); diff --git a/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index a068f26..c30c1e9 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/src/test/cases/BasicTestCase.hx @@ -453,6 +453,10 @@ class BasicTestCase extends Test { _testStreamRecording(); } + function testObjectWith() { + _testObjectWith(); + } + var aNullToPrint = null; } diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index 3f11100..ebe855a 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -612,6 +612,16 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m (function _testDotAccessOnAlias [] (Assert.equals 5 owf.field)) +(function _testObjectWith [] + (let [obj (object name "obby" purpose "idk" id 5) + nil null + id 7 + objWith (objectWith obj.name .purpose obj id nil?.notAField)] + (Assert.equals "obby" objWith.name) + (Assert.equals "idk" objWith.purpose) + (Assert.equals 7 objWith.id) + (Assert.equals null objWith.notAField))) + (function _testClamp [] (let [&mut bigValue 12 &mut smallValue 3]