summaryrefslogtreecommitdiff
path: root/xc/config/makedepend/ifparser.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/config/makedepend/ifparser.c')
-rw-r--r--xc/config/makedepend/ifparser.c86
1 files changed, 62 insertions, 24 deletions
diff --git a/xc/config/makedepend/ifparser.c b/xc/config/makedepend/ifparser.c
index 261a3af8a..22af3fa98 100644
--- a/xc/config/makedepend/ifparser.c
+++ b/xc/config/makedepend/ifparser.c
@@ -1,5 +1,5 @@
/*
- * $XConsortium: ifparser.c,v 1.7 94/01/18 21:30:50 rws Exp gildea $
+ * $XConsortium: ifparser.c,v 1.8 95/06/03 00:01:41 gildea Exp kaleb $
*
* Copyright 1992 Network Computing Devices, Inc.
*
@@ -92,16 +92,17 @@ static const char *
parse_number (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
SKIPSPACE (cp);
if (!isdigit(*cp))
return CALLFUNC(g, handle_error) (g, cp, "number");
-#ifdef WIN32
*valp = strtol(cp, &cp, 0);
-#else
+ /* skip trailing qualifiers */
+ while (*cp == 'U' || *cp == 'u' || *cp == 'L' || *cp == 'l') cp++;
+#if 0
*valp = atoi (cp);
/* EMPTY */
for (cp++; isdigit(*cp); cp++) ;
@@ -109,12 +110,43 @@ parse_number (g, cp, valp)
return cp;
}
+static const char *
+parse_character (g, cp, valp)
+ IfParser *g;
+ const char *cp;
+ long *valp;
+{
+ char val;
+
+ SKIPSPACE (cp);
+ if (*cp == '\\')
+ switch (cp[1]) {
+ case 'n': val = '\n'; break;
+ case 't': val = '\t'; break;
+ case 'v': val = '\v'; break;
+ case 'b': val = '\b'; break;
+ case 'r': val = '\r'; break;
+ case 'f': val = '\f'; break;
+ case 'a': val = '\a'; break;
+ case '\\': val = '\\'; break;
+ case '?': val = '\?'; break;
+ case '\'': val = '\''; break;
+ case '\"': val = '\"'; break;
+ case 'x': val = (char) strtol (cp + 2, NULL, 16); break;
+ default: val = (char) strtol (cp + 1, NULL, 8); break;
+ }
+ else
+ val = *cp;
+ while (*cp != '\'') cp++;
+ *valp = (long) val;
+ return cp;
+}
static const char *
parse_value (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
const char *var;
@@ -157,6 +189,12 @@ parse_value (g, cp, valp)
*valp = 1; /* XXX */
return cp + 1;
+ case '\'':
+ DO (cp = parse_character (g, cp + 1, valp));
+ if (*cp != '\'')
+ return CALLFUNC(g, handle_error) (g, cp, "'");
+ return cp + 1;
+
case 'd':
if (strncmp (cp, "defined", 7) == 0 && !isalnum(cp[7])) {
int paren = 0;
@@ -197,9 +235,9 @@ static const char *
parse_product (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_value (g, cp, valp));
SKIPSPACE (cp);
@@ -228,9 +266,9 @@ static const char *
parse_sum (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_product (g, cp, valp));
SKIPSPACE (cp);
@@ -254,9 +292,9 @@ static const char *
parse_shift (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_sum (g, cp, valp));
SKIPSPACE (cp);
@@ -284,9 +322,9 @@ static const char *
parse_inequality (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_shift (g, cp, valp));
SKIPSPACE (cp);
@@ -320,9 +358,9 @@ static const char *
parse_equality (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_inequality (g, cp, valp));
SKIPSPACE (cp);
@@ -350,9 +388,9 @@ static const char *
parse_band (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_equality (g, cp, valp));
SKIPSPACE (cp);
@@ -373,9 +411,9 @@ static const char *
parse_bor (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_band (g, cp, valp));
SKIPSPACE (cp);
@@ -396,9 +434,9 @@ static const char *
parse_land (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_bor (g, cp, valp));
SKIPSPACE (cp);
@@ -419,9 +457,9 @@ static const char *
parse_lor (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
- int rightval;
+ long rightval;
DO (cp = parse_land (g, cp, valp));
SKIPSPACE (cp);
@@ -446,7 +484,7 @@ const char *
ParseIfExpression (g, cp, valp)
IfParser *g;
const char *cp;
- int *valp;
+ long *valp;
{
return parse_lor (g, cp, valp);
}