diff --git a/src/kiss/Helpers.hx b/src/kiss/Helpers.hx index af987e3..554f83f 100644 --- a/src/kiss/Helpers.hx +++ b/src/kiss/Helpers.hx @@ -63,7 +63,7 @@ class Helpers { public static function parseComplexType(path:String, ?from:ReaderExp):ComplexType { // Trick Haxe into parsing it for us: - var typeCheckStr = '(thing : $path)'; + var typeCheckStr = 'var thing:$path;'; var errorMessage = 'Haxe could not parse a complex type from `$path` in `${typeCheckStr}`'; function throwError() { @@ -76,7 +76,9 @@ class Helpers { try { var typeCheckExpr = Context.parse(typeCheckStr, Context.currentPos()); return switch (typeCheckExpr.expr) { - case EParenthesis({pos: _, expr: ECheckType(_, complexType)}): + case EVars([{ + type: complexType + }]): complexType; default: throwError(); diff --git a/src/kiss/Reader.hx b/src/kiss/Reader.hx index 3c256b1..142316f 100644 --- a/src/kiss/Reader.hx +++ b/src/kiss/Reader.hx @@ -90,7 +90,7 @@ class Reader { RawHaxeBlock(stream.expect("closing }#", () -> stream.takeUntilAndDrop("}#"))); }; - readTable[":"] = (stream:Stream, k) -> TypedExp(nextToken(stream, "a type path"), assertRead(stream, k)); + readTable[":"] = (stream:Stream, k) -> TypedExp(stream.expect("a type path", () -> stream.takeUntilAndDrop(" ")), assertRead(stream, k)); readTable["&"] = (stream:Stream, k) -> MetaExp(nextToken(stream, "a meta symbol like mut, optional, rest"), assertRead(stream, k)); diff --git a/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index 2a92cd5..26a7f26 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/src/test/cases/BasicTestCase.hx @@ -431,6 +431,10 @@ class BasicTestCase extends Test { } #end + function testLambdaTypeAnnotations() { + _testLambdaTypeAnnotations(); + } + var aNullToPrint = null; } diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index 8ccc1fa..b5e46f6 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -736,6 +736,12 @@ From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" m (function set_staticProp [v] (set _staticProp v)) (function get_staticProp [] _staticProp) +(var :(Int,Int)->Bool lambdaTest ->[a b] true) +(var :()->Void lambdaTest2 ->[] (return)) +(function _testLambdaTypeAnnotations [] + (Assert.isTrue (lambdaTest 5 6)) + (lambdaTest2)) + (function _testHaxeProperties [] (Assert.equals 5 staticProp) (Assert.equals 9 (set staticProp 9))