Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I print an expanded macro in Scala?

I am writing a macro in Scala, but when I call it I get an error message saying "Double does not take parameters". Clearly there is something wrong with how the macro builds the AST. So how can I see the expanded macro? Is there a way to call the macro implementation at runtime?

like image 209
Kim Stebel Avatar asked Jul 26 '12 20:07

Kim Stebel


2 Answers

Provide -Ymacro-debug-lite or -Ymacro-debug-verbose option to the compiler.

Off the top of my head, detalization of printed ASTs is governed by -Yshow-trees-compact, -Yshow-trees-stringified, -Xprint-types, -uniqid and -Yshow-symkinds. You can find other gems by running scala -X and scala -Y (or inspecting the sources of scala settings at https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).

Also, despite being essentially a macro, reification has its own tracing mechanism that can be configured by -Yreify-copypaste and -Yreify-debug.

like image 54
Eugene Burmako Avatar answered Nov 05 '22 20:11

Eugene Burmako


There is Macrocosm's desugar which can show how your source code, including, but no limited to macros, is transformed into.

    println("TRANSFORMATION:\n"+ desugar{
        println("a string") 
        MY_MACRO("something")
    })
like image 2
eruve Avatar answered Nov 05 '22 19:11

eruve