diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2010-07-13 12:00:58 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2010-07-13 12:00:58 -0700 |
commit | 6d9b2b59b5f6679c5ed16cc06ed24d432838c8dc (patch) | |
tree | 6fed986684432cd6d3b918794b9df7a690624fcc | |
parent | 5b00bf4d4923756ac6da6e5f9282dacb2877047f (diff) | |
download | nasm-6d9b2b59b5f6679c5ed16cc06ed24d432838c8dc.tar.gz |
preproc: add %ifenv
Add %ifenv to test for the presence of an environment variable. The
environment variable can, but does not have to be, prefixed with %!.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | pptok.dat | 3 | ||||
-rw-r--r-- | preproc.c | 21 |
2 files changed, 23 insertions, 1 deletions
@@ -1,6 +1,6 @@ ## -------------------------------------------------------------------------- ## -## Copyright 1996-2009 The NASM Authors - All Rights Reserved +## Copyright 1996-2010 The NASM Authors - All Rights Reserved ## See the file AUTHORS included with the NASM distribution for ## the specific copyright holders. ## @@ -39,6 +39,7 @@ *ctx *def *empty +*env *id *idn *idni @@ -1610,6 +1610,7 @@ static bool if_condition(Token * tline, enum preproc_token ct) struct tokenval tokval; expr *evalresult; enum pp_token_type needtype; + const char *p; origline = tline; @@ -1649,6 +1650,26 @@ static bool if_condition(Token * tline, enum preproc_token ct) } break; + case PPC_IFENV: + tline = expand_smacro(tline); + j = false; /* have we matched yet? */ + while (tline) { + skip_white_(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '!'))) { + error(ERR_NONFATAL, + "`%s' expects environment variable names", + pp_directives[ct]); + goto fail; + } + p = tline->type == TOK_ID ? tline->text : tline->text + 2; + if (getenv(p)) + j = true; + tline = tline->next; + } + break; + case PPC_IFIDN: case PPC_IFIDNI: tline = expand_smacro(tline); |