aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/compiletime/compile-time-for.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/examples/compiletime/compile-time-for.v')
-rw-r--r--v_windows/v/examples/compiletime/compile-time-for.v38
1 files changed, 38 insertions, 0 deletions
diff --git a/v_windows/v/examples/compiletime/compile-time-for.v b/v_windows/v/examples/compiletime/compile-time-for.v
new file mode 100644
index 0000000..f3f90fa
--- /dev/null
+++ b/v_windows/v/examples/compiletime/compile-time-for.v
@@ -0,0 +1,38 @@
+struct App {}
+
+fn (mut app App) method_one() {}
+
+fn (mut app App) method_two() int {
+ return 0
+}
+
+fn (mut app App) method_three(s string) string {
+ return s
+}
+
+fn main() {
+ $for method in App.methods {
+ $if method.typ is fn (string) string {
+ println('$method.name IS `fn(string) string`')
+ } $else {
+ println('$method.name is NOT `fn(string) string`')
+ }
+ $if method.return_type !is int {
+ println('$method.name does NOT return `int`')
+ } $else {
+ println('$method.name DOES return `int`')
+ }
+ $if method.args[0].typ !is string {
+ println("$method.name's first arg is NOT `string`")
+ } $else {
+ println("$method.name's first arg IS `string`")
+ }
+ // TODO: Double inversion, should this even be allowed?
+ $if method.typ is fn () {
+ println('$method.name IS a void method')
+ } $else {
+ println('$method.name is NOT a void method')
+ }
+ println('')
+ }
+}