diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 5913ffa..059821a 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -1579,6 +1579,15 @@ class Macros { ]); } + + k.doc("array", 1, null, "(array )"); + macros["array"] = (wholeExp:ReaderExp, args:Array, k:KissState) -> { + var b = wholeExp.expBuilder(); + var arraySymbol = b.symbol(); + var typeName = Prelude.symbolNameValue(Helpers.expandTypeSymbol(args[0], k)); + + b.let([b.typed('Array<${typeName}>', arraySymbol), b.list([])], [for (arg in args.slice(1)) b.call(b.field("push", arraySymbol), [arg])].concat([arraySymbol])); + }; return macros; } diff --git a/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index c94960b..68c7021 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/src/test/cases/BasicTestCase.hx @@ -460,6 +460,10 @@ class BasicTestCase extends Test { function testRedefineWithObjectArgs() { _testRedefineWithObjectArgs(); } + + function testTypedArrayMacro() { + _testTypedArrayMacro(); + } var aNullToPrint = null; } diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index fff2c7a..0799f6a 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -1009,4 +1009,9 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m (voidFuncWithObjectArgs "hey" (object num 5 num2 0.5)) (Assert.equals "hey5.5" (funcWithObjectArgs "hey" (object num 5 num2 0.5))) (Assert.equals "hey5.5" (funcWithObjectArgs "hey" (object num2 4.5 num 1))) - (Assert.equals null (funcWithOptObjectArgs))) \ No newline at end of file + (Assert.equals null (funcWithOptObjectArgs))) + +(function _testTypedArrayMacro [] + (let [a (array Float 1 1.5 2)] + (Assert.isTrue (Std.isOfType a Array)) + (Assert.isTrue (Std.isOfType (first a) Float)))) \ No newline at end of file