Jai-Community / Jai-Community-Library

Tutorials and Cheatsheet for Jai, written by its community
328 stars 0 forks source link

Problem with macro example #6

Closed Ivo-Balbaert closed 2 years ago

Ivo-Balbaert commented 2 years ago

Thanks for the beautiful section on Macros, I learned a lot!

I have a problem with the following macro, which does not compile (beta 0.1.029):

macro :: () -> int #expand { if a <b { defer print("Defer inside macro\n"); return "Backtick return macro"; } return 1; }

It gives the compilation error: D:/Jai/The book of Jai/Chapter 9 - Metaprogramming - Compile-time code execution/code/macros.jai:91,31: Info: While expanding macro 'macro2' here...

print("max is %\n", maxm(b, c)); // => max is 7
print("macro2 returns %\n", macro2()); // => 1

D:/Jai/The book of Jai/Chapter 9 - Metaprogramming - Compile-time code execution/code/macros.jai:29,6: Error: Too many return values: Wanted 0, got 1.

if `b < `c {
  `defer print("Defer inside macro\n");
  `return "Backtick return macro";

D:/Jai/The book of Jai/Chapter 9 - Metaprogramming - Compile-time code execution/code/macros.jai:82,9: Info: ... Here is the procedure being called.

I don't know how to correct this, changing the returned string (which doesn't seem ok because return type is int) to `return 0 gives the same error.

`return 1 also doesn't help.

I don't know how to correct this example.

danieltan1517 commented 2 years ago

I added a clarification to clear up the confusion within the example. Hopefully the correction clears up the problems.