Skip to content

Commit c45cd1b

Browse files
committed
Make type recursion is possible again.
1 parent 5fc9eb4 commit c45cd1b

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

spec/examples/recursion

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,15 @@ module Test {
8383
helper(n, 1)
8484
}
8585
}
86+
-------------------------------------------------------------------------------
87+
type Test {
88+
fields: Array(Test)
89+
}
90+
91+
component Main {
92+
fun render : Html {
93+
let test = { fields: [] }
94+
95+
<div></div>
96+
}
97+
}

src/type_checker.cr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ module Mint
269269
if type = node.type
270270
resolve type
271271
end
272+
when Ast::TypeDefinition
273+
static_type_signature(node)
272274
end ||
273275
error! :recursion do
274276
snippet "Recursion is only supported in specific cases " \

src/type_checker/static_type_signature.cr

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ module Mint
5454
resolve node
5555
when Ast::HtmlElement
5656
Type.new("Dom.Element")
57+
when Ast::TypeDefinition
58+
parameters =
59+
resolve node.parameters
60+
61+
Comparer.normalize(Type.new(node.name.value, parameters))
5762
else
5863
Variable.new("a")
5964
end

0 commit comments

Comments
 (0)