diff --git a/src/kiss/KissInterp2.kiss b/src/kiss/KissInterp2.kiss index 00e7613..2655136 100644 --- a/src/kiss/KissInterp2.kiss +++ b/src/kiss/KissInterp2.kiss @@ -110,11 +110,24 @@ // String literal ((StrExp str) (cc str)) + // Key value exp + ((KeyValueExp keyExp valExp) + (evalCC keyExp ->key (evalCC valExp ->value (cc (objectWith key value))))) // Array expression ((ListExp elements) - // TODO check for KeyValueExp (map expression) - (_evalAllCC elements ->values - (cc values))) + (case (first elements) + // Key value exps: it's a map + ((object def (KeyValueExp _ _)) + (_evalAllCC elements ->values + (let [m (new Map)] + (doFor kvp values + (let [:String key kvp.key + :Dynamic value kvp.value] + (dictSet m key value))) + (cc m)))) + // It's a list + (otherwise (_evalAllCC elements ->values + (cc values))))) // Symbol ((Symbol ident) // Check for numbers diff --git a/src/test/cases/KissInterp2TestCase.hx b/src/test/cases/KissInterp2TestCase.hx index d0febc0..ac81019 100644 --- a/src/test/cases/KissInterp2TestCase.hx +++ b/src/test/cases/KissInterp2TestCase.hx @@ -25,7 +25,10 @@ class KissInterp2TestCase extends Test { function testCallMethod() { _testCallMethod(); } - function testPrint() { + function testPrint() { _testPrint(); } + function testMapExpression() { + _testMapExpression(); + } } \ No newline at end of file diff --git a/src/test/cases/KissInterp2TestCase.kiss b/src/test/cases/KissInterp2TestCase.kiss index a9e6743..1a40236 100644 --- a/src/test/cases/KissInterp2TestCase.kiss +++ b/src/test/cases/KissInterp2TestCase.kiss @@ -27,3 +27,11 @@ (function _testPrint [] (let [interp (new Interp)] (assertEval "testing" "(print \"testing\")"))) + + +(function _testMapExpression [] + (let [interp (new Interp)] + (interp.evalCC #"[=>"4" 5 =>"6" 7]"# ->[:Map mapVal] { + (Assert.equals 5 (dictGet mapVal "4")) + (Assert.equals 7 (dictGet mapVal "6")) + })))