Skip to content

Commit

Permalink
make official support for recursive types
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex-Costea committed Jan 30, 2025
1 parent 72b477d commit bf81a7f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .idea/Wiles.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Wiles supports features such as:
- Opt-out named arguments in function calls
- Newline as statement terminators, but no significant indentation
- Type inference in many instances
- Type definitions at compile-time
- Type definitions, including recursive types, at compile-time
- Generics in function definitions

The informal specifications can be found [here](specifications.md).
Expand Down
2 changes: 1 addition & 1 deletion docs/specifications.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

### Statements
- Value: `let ⟨var⟩ name ⟨: type⟩ ⟨:= value⟩` (`var` makes it a variable, type can be inferred)
- Type definition: `typedef name := type` (can be used at compile time for inference)
- Type definition: `typedef name := type` (can be used at compile time for inference, supports recursive types)
- Assignment: `name := value`
- Simple conditional: `if [condition] [block]`
- Complex conditional: `if begin; ⟪clause;⟫ end`
Expand Down
16 changes: 16 additions & 0 deletions wiles-base/src/test/java/FullTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,21 @@ write_line("Min found: " + result)
val code30 ="write(1.0 / 3)"
assertEquals(getOutput(code30),"0.3333333333333333333333333333333333")

val code31 ="""
typedef tree := data[value : int, left : tree?, right : tree?]
let my_tree_left := data{value := 123}
let my_tree_right := data{value := 345}
let my_tree := data{
value := 999,
left := my_tree_left,
right := my_tree_right
}
write_line(my_tree)
write_line(my_tree.type)
"""
assertEquals(getOutput(code31), """{value -> 999, left -> {value -> 123}, right -> {value -> 345}}
TYPE DATA; (!value; TYPE INT; !left; TYPE DATA; (!value; TYPE INT); !right; TYPE DATA; (!value; TYPE INT))
""")

}
}

0 comments on commit bf81a7f

Please sign in to comment.