Re: Macro Library for Java?
ram@zedat.fu-berlin.de (Stefan Ram) writes:
http://www.nothingisreal.com/gpp/
Recently, I wrote a GPP macro for a counting loop.
Java lacks a loop to only express ?repeat the following
statement n times? and not add any other designation.
The following prints ?alpha? 6 times.
Two such loop control macors are nested.
public class Main
{ public static void main ( final java.lang.String[] args )
{ REPEAT( 2 )
REPEAT( 3 )
java.lang.System.out.println( "alpha" ); }}
The code generated is:
public class Main
{ public static void main ( final java.lang.String[] args )
{ for(int SYM1=( 2 );(SYM1--)!=0;)
for(int SYM2=( 3 );(SYM2--)!=0;)
java.lang.System.out.println( "alpha" ); }}
and I did it as follows. gpp does not contain a symbol name
generator, but is so versatile that one can write it on
the fly using the powerful ?defeval? and ?eval? meta-macros:
<#define REPEATNAME|0>
<#define NEXTSYM|<#defeval REPEATNAME|<#eval 1+<#REPEATNAME>>>>
<#define REPEAT|<#NEXTSYM>for(int SYM<#REPEATNAME>=(#1);(SYM<#REPEATNAME>--)!=0;)>
I have defined another gpp-mode, where I can write definitions like:
$define BLOCK new java.lang.Runnable(){ public void run(){$1}}
$define IN_EDT javax.swing.SwingUtilities.invokeLater($1)
Then, to execute any statement in the EDT:
$define INEDT IN_EDT(BLOCK($1))
Debug-print where we are:
$define LOCATE do{ java.lang.System.out.print( new java.lang.Throwable().getStackTrace()[0].toString() + ": " ); }while(false)
Debug-display a reference variable with its name, type and value:
$define DISPLAY do{ LOCATE(); java.lang.System.out.println( "\"$1\" =( " +((( $1 )== null )? "null" :( $1 ).getClass().getName() )+ " )\"" +( $1 )+ "\"." ); }while(false)
Drawback for the aficionados of Eclipse and similar IDEs:
The IDE will not recognice some of the macro syntax.