v / examples / compiletime
Raw file | 38 loc (34 sloc) | 897 bytes | Latest commit hash 017ace6ea
1struct App {}
2
3fn (mut app App) method_one() {}
4
5fn (mut app App) method_two() int {
6 return 0
7}
8
9fn (mut app App) method_three(s string) string {
10 return s
11}
12
13fn main() {
14 $for method in App.methods {
15 $if method.typ is fn (string) string {
16 println('${method.name} IS `fn(string) string`')
17 } $else {
18 println('${method.name} is NOT `fn(string) string`')
19 }
20 $if method.return_type !is int {
21 println('${method.name} does NOT return `int`')
22 } $else {
23 println('${method.name} DOES return `int`')
24 }
25 $if method.args[0].typ !is string {
26 println("${method.name}'s first arg is NOT `string`")
27 } $else {
28 println("${method.name}'s first arg IS `string`")
29 }
30 // TODO: Double inversion, should this even be allowed?
31 $if method.typ is fn () {
32 println('${method.name} IS a void method')
33 } $else {
34 println('${method.name} is NOT a void method')
35 }
36 println('')
37 }
38}