summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorragge <ragge>2008-06-29 12:54:03 +0000
committerragge <ragge>2008-06-29 12:54:03 +0000
commit0105e26990a78681d760e563f61f79f56f43072d (patch)
tree902799e5e872081179a6f1bb6c39d66589ee3a09
parent980212211f589cdb8aedb4a70bf4b3b5483c11e3 (diff)
Let macros inside character constants be expanded if traditional.
XXX - not a perfect solution.
-rw-r--r--scanner.l20
1 files changed, 11 insertions, 9 deletions
diff --git a/scanner.l b/scanner.l
index 511fd13..0c9b2fe 100644
--- a/scanner.l
+++ b/scanner.l
@@ -45,7 +45,7 @@
%{
static void cvtdig(int rad);
-static int charcon(void);
+static int charcon(usch *);
static void elsestmt(void);
static void ifdefstmt(void);
static void ifndefstmt(void);
@@ -198,11 +198,16 @@ WS [\t ]
}
0{D}+{IS}? { scale = 8; goto num; }
{D}+{IS}? { scale = 10; goto num; }
-L?'(\\.|[^\\'])+' { if (YYSTATE) {
+'(\\.|[^\\'])+' {
+ if (YYSTATE || slow) {
yylval.node.op = NUMBER;
- yylval.node.nd_val = charcon();
+ yylval.node.nd_val = charcon(yytext);
+ return (NUMBER);
}
- PRTOUT(NUMBER);
+ if (tflag)
+ yyless(1);
+ if (!flslvl)
+ putstr((usch *)yytext);
}
<IFR>. { return yytext[0]; }
@@ -556,14 +561,11 @@ cvtdig(int rad)
}
static int
-charcon(void)
+charcon(usch *p)
{
- usch *p = (usch *)yytext;
int val, c;
- if (*p == 'L')
- p++;
- p++; /* first ' */
+ p++; /* skip first ' */
val = 0;
if (*p++ == '\\') {
switch (*p++) {