Message-Id: Date: Wed, 23 Apr 97 18:52 NZST Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" To: alaric AT abwillms DOT demon DOT co DOT uk From: Lorier Subject: Re: Usage of directory entries Cc: Mark Habersack , opendos-developer AT delorie DOT com Precedence: bulk >> >It'd be interesting to see if one can make Scheme-like hygenic macros >> >for assembly language, rather than just simple substitution devices! >> >> Sounds great! Now, can you explain what it is? ;) > >Oh, all right... > >Hygeinic macros are macros guaranteed not to cause name space collisions. > >Eg, if we have a C macro like so: > >#define PRINT_SUM(x,y) {int temp; temp = x + y; cout << temp << endl;} > >It works by simply substituting the text of the macro in where it is >invoked. > >However, this soon brings up problems. The x and y parameters may not >be references to variables called temp, cout, or endl, since that will >collide with the definitions in the macro. > >The definition of a hygenic macro is that any global identifiers accessed in >the macro have the meaning they did at the point the macro was defined, eg >if we use PRINT_SUM inside a block with a local variable called "cout", >PRINT_SUM will still use the cout that was declared when /it/ was declared. > >Saves on bugs and confusion... ah... so "true local variables"