| ... | ... | @@ -6,10 +6,10 @@ fn compileTimeRecursion() { |
| 6 | 6 | |
| 7 | 7 | assert(some_data.len == 21); |
| 8 | 8 | } |
| 9 | | var some_data: [usize(fibbonaci(7))]u8 = undefined; |
| 10 | | fn fibbonaci(x: i32) -> i32 { |
| 9 | var some_data: [usize(fibonacci(7))]u8 = undefined; |
| 10 | fn fibonacci(x: i32) -> i32 { |
| 11 | 11 | if (x <= 1) return 1; |
| 12 | | return fibbonaci(x - 1) + fibbonaci(x - 2); |
| 12 | return fibonacci(x - 1) + fibonacci(x - 2); |
| 13 | 13 | } |
| 14 | 14 | |
| 15 | 15 | |
| ... | ... | @@ -219,3 +219,36 @@ fn inlinedBlockAndRuntimeBlockPhi() { |
| 219 | 219 | assert(!letsTryToCompareBools(false, false)); |
| 220 | 220 | } |
| 221 | 221 | } |
| 222 | |
| 223 | const CmdFn = struct { |
| 224 | name: []const u8, |
| 225 | func: fn(i32) -> i32, |
| 226 | }; |
| 227 | |
| 228 | const cmd_fns = []CmdFn{ |
| 229 | CmdFn {.name = "one", .func = one}, |
| 230 | CmdFn {.name = "two", .func = two}, |
| 231 | CmdFn {.name = "three", .func = three}, |
| 232 | }; |
| 233 | fn one(value: i32) -> i32 { value + 1 } |
| 234 | fn two(value: i32) -> i32 { value + 2 } |
| 235 | fn three(value: i32) -> i32 { value + 3 } |
| 236 | |
| 237 | fn performFn(comptime prefix_char: u8, start_value: i32) -> i32 { |
| 238 | var result: i32 = start_value; |
| 239 | comptime var i = 0; |
| 240 | inline while (i < cmd_fns.len; i += 1) { |
| 241 | if (cmd_fns[i].name[0] == prefix_char) { |
| 242 | result = cmd_fns[i].func(result); |
| 243 | } |
| 244 | } |
| 245 | return result; |
| 246 | } |
| 247 | |
| 248 | fn comptimeIterateOverFnPtrList() { |
| 249 | @setFnTest(this); |
| 250 | |
| 251 | assert(performFn('t', 1) == 6); |
| 252 | assert(performFn('o', 0) == 1); |
| 253 | assert(performFn('w', 99) == 99); |
| 254 | } |