diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 6cefd6c7..578fd86f 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -1076,6 +1076,19 @@ class Macros { ].concat(body))]); }; + function indexOfMacro(last:Bool, wholeExp:ReaderExp, exps:Array, k:KissState) { + var funcName = if (last) "lastIndexOf" else "indexOf"; + wholeExp.checkNumArgs(2, 3, '($funcName )'); + var b = wholeExp.expBuilder(); + return b.callSymbol("case", [ + b.callField(funcName, exps.shift(), exps), + b.callSymbol("-1", [b.symbol("haxe.ds.Option.None")]), + b.callSymbol("other", [b.callSymbol("haxe.ds.Option.Some", [b.symbol("other")])]) + ]); + } + macros["indexOf"] = indexOfMacro.bind(false); + macros["lastIndexOf"] = indexOfMacro.bind(true); + return macros; } diff --git a/kiss/src/test/cases/BasicTestCase.kiss b/kiss/src/test/cases/BasicTestCase.kiss index 7c0e7642..a7cf264f 100644 --- a/kiss/src/test/cases/BasicTestCase.kiss +++ b/kiss/src/test/cases/BasicTestCase.kiss @@ -399,8 +399,8 @@ (Assert.equals "you" (dictGet myMap "hey")) (Assert.equals "me" (dictGet myMap "found")) (doFor =>key value myMap - (Assert.isTrue (<= 0 (.indexOf ["hey" "found"] key))) - (Assert.isTrue (<= 0 (.indexOf ["you" "me"] value)))) + (assertLet [(Some _) (indexOf ["hey" "found"] key)] 0) + (assertLet [(Some _) (indexOf ["you" "me"] value)] 0)) // Map destructuring: (let [[=>"hey" v1 =>"found" v2] myMap]