delorie.com/archives/browse.cgi   search  
Mail Archives: opendos/1997/04/23/05:04:08

Message-Id: <m0wJvvH-000FnDC@hn.planet.gen.nz>
Date: Wed, 23 Apr 97 18:52 NZST
Mime-Version: 1.0
To: alaric AT abwillms DOT demon DOT co DOT uk
From: Lorier <lorier AT ihug DOT co DOT nz>
Subject: Re: Usage of directory entries
Cc: Mark Habersack <grendel AT hoth DOT amu DOT edu DOT pl>, opendos-developer AT delorie DOT com

>> >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" 

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019