// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //
// The example below shows that macros are allowed to make use of static      //
// recursion, i.e., recursion that must terminate at compile-time.            //
// ************************************************************************** //

macro fact(n) = (n==0?1:n*fact(n-1));
macro gcd(m,n) = (n==0?m:gcd(n,m%n));

module StaticRecursion(nat ?n,!m) {
    m = fact(100);
    pause;
    m = gcd(1254532,7524320);
}
drivenby {
    pause;
}