diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 5190ba56..866b6c36 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -48,7 +48,16 @@ class SpecialForms { // TODO special form for switch - // TODO special form for try + // Type check syntax: + map["the"] = (args:Array, convert:ExprConversion) -> { + if (args.length != 2) { + throw '(the [type] [value]) expression has wrong number of arguments: ${args.length}'; + } + ECheckType(convert(args[1]), switch (args[0]) { + case Symbol(type): Helpers.parseTypePath(type); + default: throw 'first argument to (the... ) should be a valid type'; + }).withPos(); + }; map["try"] = (args:Array, convert:ExprConversion) -> { if (args.length == 0) { diff --git a/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index 8bdc5798..52ad5f81 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/src/test/cases/BasicTestCase.hx @@ -137,4 +137,8 @@ class BasicTestCase extends Test { Assert.equals(6, BasicTestCase.myTryCatch(404)); Assert.equals(7, BasicTestCase.myTryCatch(["list error"])); } + + function testTypeCheck() { + Assert.equals(5, BasicTestCase.myTypeCheck()); + } } diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index cca625af..3cda7ab4 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -82,4 +82,7 @@ (throw e) (catch [:String error] 5) (catch [:Int error] 6) - (catch [error] 7))) \ No newline at end of file + (catch [error] 7))) + +(defun myTypeCheck [] + (the Int 5)) \ No newline at end of file