[nem-pl] Kolorowanie zmiennych przez inne funkcje

Kamil Skalski nazgul at omega.pl
Thu Mar 11 12:27:37 CET 2004


Tak sobie pomyślałem, że definicja kolorowania jako przydzielającego ten sam 
kolor wszystkim zmiennym tworzonym podczas pojedynczego uruchomienia makra 
może czasem zaboleć.

Szczególnie wywołanie zewnętrznej funkcji tworzącej kod może coś napsuć, bo 
ona wytworzy zmienne tego samego koloru. To może być czasem wygodne, ale 
chyba ogólnie będzie prowadziło do używania w tego typu funkcjach ręcznego 
NewSymbol. Na szczęście wymyśliłem świetny sposób na to - atrybut [Hygienic] 
dopisywany przed funkcją. Makro "Hygienic" wyglądałoby jakoś tak:

macro Hygienic (meth : MethodDecl) : MethodDecl {
   meth.body <- <[ 
     TypingContext.PushColor (); 
     $(meth.body); 
     TypingContext.PopColor ();
   ]>
   meth
}


W ten sposób możemy opcjonalnie i elegancko powiedzieć, że dana funkcja jest 
higieniczna:

public [Hygienic] make_code () : Expr {
  <[ def x = 1; bla (x) ]>
}

kod wygenerowany przez make_code nie wprowadzi żadnej definicji w miejscu w 
którym zostanie użyty (bedzie higieniczny).

:D

Kamil





More information about the devel-pl mailing list