Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
393f77fa
Kaydet (Commit)
393f77fa
authored
Tem 05, 2014
tarafından
Norbert Thiebaud
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
cosmetic clean-up, prep for patches
Change-Id: I930afa189665ddc3ce8d160fa954e11a7a2aed8c
üst
aa436024
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
313 additions
and
289 deletions
+313
-289
cpp1.c
rsc/source/rscpp/cpp1.c
+313
-289
No files found.
rsc/source/rscpp/cpp1.c
Dosyayı görüntüle @
393f77fa
...
...
@@ -24,11 +24,11 @@
#include "cppdef.h"
#include "cpp.h"
FILE
*
pCppOut
=
NULL
;
FILE
*
pCppIn
=
NULL
;
FILE
*
pCppOut
=
NULL
;
FILE
*
pCppIn
=
NULL
;
#if OSL_DEBUG_LEVEL > 1
FILE
*
pDefOut
=
NULL
;
/* ER evtl. #define's dump */
FILE
*
pDefOut
=
NULL
;
/* ER evtl. #define's dump */
#endif
#ifdef B200
...
...
@@ -54,18 +54,18 @@ extern unsigned _heaplen = 30000;
* to the current file/macro. infile->parent to the includer,
* etc. infile->fd is NULL if this input stream is a macro.
*/
int
line
;
/* Current line number */
int
wrongline
;
/* Force #line to compiler */
char
token
[
IDMAX
+
1
];
/* Current input token */
int
errors
;
/* cpp error counter */
FILEINFO
*
infile
=
NULL
;
/* Current input file */
int
line
;
/* Current line number */
int
wrongline
;
/* Force #line to compiler */
char
token
[
IDMAX
+
1
];
/* Current input token */
int
errors
;
/* cpp error counter */
FILEINFO
*
infile
=
NULL
;
/* Current input file */
#if OSL_DEBUG_LEVEL > 1
int
debug
;
/* TRUE if debugging now */
int
bDumpDefs
;
/* TRUE if #define's dump req. */
int
debug
;
/* TRUE if debugging now */
int
bDumpDefs
;
/* TRUE if #define's dump req. */
#ifdef EVALDEFS
int
bIsInEval
;
/* TRUE if #define eval now */
char
EvalBuf
[
NEVALBUF
+
1
];
/* evaluation buffer */
int
nEvalOff
=
0
;
/* offset to free buffer pos */
int
bIsInEval
;
/* TRUE if #define eval now */
char
EvalBuf
[
NEVALBUF
+
1
];
/* evaluation buffer */
int
nEvalOff
=
0
;
/* offset to free buffer pos */
#endif
#endif
/*
...
...
@@ -78,8 +78,8 @@ int nEvalOff = 0; /* offset to free buffer pos */
* This can be disabled by falsifying rec_recover. (Nothing does this
* currently: it is a hook for an eventual invocation flag.)
*/
int
recursion
;
/* Infinite recursion counter */
int
rec_recover
=
TRUE
;
/* Unwind recursive macros */
int
recursion
;
/* Infinite recursion counter */
int
rec_recover
=
TRUE
;
/* Unwind recursive macros */
/*
* instring is set TRUE when a string is scanned. It modifies the
...
...
@@ -97,8 +97,8 @@ int rec_recover = TRUE; /* Unwind recursive macros */
* instring and inmarcor are parameters to the get() routine which
* were made global for speed.
*/
int
instring
=
FALSE
;
/* TRUE if scanning string */
int
inmacro
=
FALSE
;
/* TRUE if #defining a macro */
int
instring
=
FALSE
;
/* TRUE if scanning string */
int
inmacro
=
FALSE
;
/* TRUE if #defining a macro */
/*
* work[] and workp are used to store one piece of text in a temporay
...
...
@@ -109,8 +109,8 @@ int inmacro = FALSE; /* TRUE if #defining a macro */
* data won't be overwritten. The extra byte in the allocation is
* needed for string formal replacement.
*/
char
work
[
NWORK
+
1
];
/* Work buffer */
char
*
workp
;
/* Work buffer pointer */
char
work
[
NWORK
+
1
];
/* Work buffer */
char
*
workp
;
/* Work buffer pointer */
/*
* keepcomments is set TRUE by the -C option. If TRUE, comments
...
...
@@ -127,10 +127,10 @@ char *workp; /* Work buffer pointer */
* __FILE__, and __DATE__. If nflag > 1, absolutely no symbols
* are predefined.
*/
int
keepcomments
=
FALSE
;
/* Write out comments flag */
int
cflag
=
FALSE
;
/* -C option (keep comments) */
int
eflag
=
FALSE
;
/* -E option (never fail) */
int
nflag
=
0
;
/* -N option (no predefines) */
int
keepcomments
=
FALSE
;
/* Write out comments flag */
int
cflag
=
FALSE
;
/* -C option (keep comments) */
int
eflag
=
FALSE
;
/* -E option (never fail) */
int
nflag
=
0
;
/* -N option (no predefines) */
/*
* ifstack[] holds information about nested #if's. It is always
...
...
@@ -141,15 +141,15 @@ int nflag = 0; /* -N option (no predefines) */
* ifstack[0] holds the compiling flag. It is TRUE if compilation
* is currently enabled. Note that this must be initialized TRUE.
*/
char
ifstack
[
BLK_NEST
]
=
{
TRUE
};
/* #if information */
char
*
ifptr
=
ifstack
;
/* -> current ifstack[] */
char
ifstack
[
BLK_NEST
]
=
{
TRUE
};
/* #if information */
char
*
ifptr
=
ifstack
;
/* -> current ifstack[] */
/*
* incdir[] stores the -i directories (and the system-specific
* #include <...> directories.
*/
char
*
incdir
[
NINCLUDE
];
/* -i directories */
char
**
incend
=
incdir
;
/* -> free space in incdir[] */
char
*
incdir
[
NINCLUDE
];
/* -i directories */
char
**
incend
=
incdir
;
/* -> free space in incdir[] */
/*
* This is the table used to predefine target machine and operating
...
...
@@ -157,7 +157,8 @@ char **incend = incdir; /* -> free space in incdir[] */
* Note: it is not clear that this is part of the Ansi Standard.
* The -N option suppresses preset definitions.
*/
char
*
preset
[]
=
{
/* names defined at cpp start */
char
*
preset
[]
=
{
/* names defined at cpp start */
#ifdef MACHINE
MACHINE
,
#endif
...
...
@@ -177,13 +178,14 @@ char *preset[] = { /* names defined at cpp start */
* The value of these predefined symbols must be recomputed whenever
* they are evaluated. The order must not be changed.
*/
char
*
magic
[]
=
{
/* Note: order is important */
char
*
magic
[]
=
{
/* Note: order is important */
"__LINE__"
,
"__FILE__"
,
NULL
/* Must be last */
};
static
char
*
sharpfilename
=
NULL
;
static
char
*
sharpfilename
=
NULL
;
int
nRunde
=
0
;
...
...
@@ -230,363 +232,385 @@ void InitCpp1()
int
MAIN
(
int
argc
,
char
**
argv
)
{
int
i
;
char
**
useargv
,
**
pf
argv
;
if
(
nRunde
==
0
)
{
pCppIn
=
stdin
;
pCppOut
=
stdout
;
}
nRunde
++
;
InitCpp1
();
InitCpp2
();
InitCpp3
();
InitCpp4
();
InitCpp5
();
InitCpp6
();
int
i
;
char
**
use
argv
;
char
**
pfargv
;
if
(
nRunde
==
0
)
{
pCppIn
=
stdin
;
pCppOut
=
stdout
;
}
nRunde
++
;
InitCpp1
();
InitCpp2
();
InitCpp3
();
InitCpp4
();
InitCpp5
();
InitCpp6
();
#if HOST == SYS_VMS
argc
=
getredirection
(
argc
,
argv
);
/* vms >file and <file */
argc
=
getredirection
(
argc
,
argv
);
/* vms >file and <file */
#endif
initdefines
();
/* O.S. specific def's */
if
(
argv
[
argc
-
1
][
0
]
==
'@'
)
{
i
=
readoptions
(
argv
[
1
],
&
pfargv
);
/* Command file */
useargv
=
pfargv
;
}
else
{
i
=
dooptions
(
argc
,
argv
);
/* Command line -flags */
useargv
=
argv
;
}
switch
(
i
)
{
initdefines
();
/* O.S. specific def's */
if
(
argv
[
argc
-
1
][
0
]
==
'@'
)
{
i
=
readoptions
(
argv
[
1
],
&
pfargv
);
/* Command file */
useargv
=
pfargv
;
}
else
{
i
=
dooptions
(
argc
,
argv
);
/* Command line -flags */
useargv
=
argv
;
}
switch
(
i
)
{
#if OSL_DEBUG_LEVEL > 1
case
4
:
if
(
bDumpDefs
)
{
/*
* Get defBase file, "-" means use stdout.
*/
if
(
!
streq
(
useargv
[
3
],
"-"
))
{
#if HOST == SYS_VMS
/*
* On vms, reopen stdout with "vanilla rms" attributes.
*/
if
((
i
=
creat
(
useargv
[
3
],
0
,
"rat=cr"
,
"rfm=var"
))
==
-
1
||
dup2
(
i
,
fileno
(
stdout
))
==
-
1
)
{
#else
pDefOut
=
fopen
(
useargv
[
3
],
"w"
);
if
(
pDefOut
==
NULL
)
{
#endif
perror
(
useargv
[
3
]);
cerror
(
"Can't open output file
\"
%s
\"
"
,
useargv
[
3
]);
exit
(
IO_ERROR
);
}
}
/* Continue by opening output */
}
#endif
case
3
:
case
4
:
if
(
bDumpDefs
)
{
/*
* Get
output
file, "-" means use stdout.
* Get
defBase
file, "-" means use stdout.
*/
if
(
!
streq
(
useargv
[
2
],
"-"
))
{
if
(
!
streq
(
useargv
[
3
],
"-"
))
{
#if HOST == SYS_VMS
/*
* On vms, reopen stdout with "vanilla rms" attributes.
*/
if
((
i
=
creat
(
useargv
[
2
],
0
,
"rat=cr"
,
"rfm=var"
))
==
-
1
||
dup2
(
i
,
fileno
(
stdout
))
==
-
1
)
{
if
((
i
=
creat
(
useargv
[
3
],
0
,
"rat=cr"
,
"rfm=var"
))
==
-
1
||
dup2
(
i
,
fileno
(
stdout
))
==
-
1
)
#else
p
CppOut
=
fopen
(
useargv
[
2
],
"w"
);
if
(
p
CppOut
==
NULL
)
{
p
DefOut
=
fopen
(
useargv
[
3
],
"w"
);
if
(
p
DefOut
==
NULL
)
#endif
perror
(
useargv
[
2
]);
cerror
(
"Can't open output file
\"
%s
\"
"
,
useargv
[
2
]);
{
perror
(
useargv
[
3
]);
cerror
(
"Can't open output file
\"
%s
\"
"
,
useargv
[
3
]);
exit
(
IO_ERROR
);
}
}
/* Continue by opening input */
case
2
:
/* One file -> stdin */
}
/* Continue by opening output */
}
#endif
case
3
:
/*
* Get output file, "-" means use stdout.
*/
if
(
!
streq
(
useargv
[
2
],
"-"
))
{
#if HOST == SYS_VMS
/*
* O
pen input file, "-" means use stdin
.
* O
n vms, reopen stdout with "vanilla rms" attributes
.
*/
if
(
!
streq
(
useargv
[
1
],
"-"
))
{
pCppIn
=
fopen
(
useargv
[
1
],
"r"
);
if
(
pCppIn
==
NULL
)
{
perror
(
useargv
[
1
]);
cerror
(
"Can't open input file
\"
%s
\"
"
,
useargv
[
1
]);
exit
(
IO_ERROR
);
}
strcpy
(
work
,
useargv
[
1
]);
/* Remember input filename */
break
;
}
/* Else, just get stdin */
case
0
:
/* No args? */
case
1
:
/* No files, stdin -> stdout */
#if (HOST == SYS_UNIX) || (HOST == SYS_UNKNOWN)
work
[
0
]
=
EOS
;
/* Unix can't find stdin name */
if
((
i
=
creat
(
useargv
[
2
],
0
,
"rat=cr"
,
"rfm=var"
))
==
-
1
||
dup2
(
i
,
fileno
(
stdout
))
==
-
1
)
#else
fgetname
(
stdin
,
work
);
/* Vax-11C, Decus C know name */
pCppOut
=
fopen
(
useargv
[
2
],
"w"
);
if
(
pCppOut
==
NULL
)
#endif
{
perror
(
useargv
[
2
]);
cerror
(
"Can't open output file
\"
%s
\"
"
,
useargv
[
2
]);
exit
(
IO_ERROR
);
}
}
/* Continue by opening input */
case
2
:
/* One file -> stdin */
/*
* Open input file, "-" means use stdin.
*/
if
(
!
streq
(
useargv
[
1
],
"-"
))
{
pCppIn
=
fopen
(
useargv
[
1
],
"r"
);
if
(
pCppIn
==
NULL
)
{
perror
(
useargv
[
1
]);
cerror
(
"Can't open input file
\"
%s
\"
"
,
useargv
[
1
]);
exit
(
IO_ERROR
);
}
strcpy
(
work
,
useargv
[
1
]);
/* Remember input filename */
break
;
}
/* Else, just get stdin */
case
0
:
/* No args? */
case
1
:
/* No files, stdin -> stdout */
#if (HOST == SYS_UNIX) || (HOST == SYS_UNKNOWN)
work
[
0
]
=
EOS
;
/* Unix can't find stdin name */
#else
fgetname
(
stdin
,
work
);
/* Vax-11C, Decus C know name */
#endif
break
;
default:
exit
(
IO_ERROR
);
/* Can't happen */
}
default:
exit
(
IO_ERROR
);
/* Can't happen */
}
setincdirs
();
/* Setup -I include directories */
addfile
(
pCppIn
,
work
);
/* "open" main input file */
setincdirs
();
/* Setup -I include directories */
addfile
(
pCppIn
,
work
);
/* "open" main input file */
#if OSL_DEBUG_LEVEL > 1
if
(
debug
>
0
||
bDumpDefs
)
dumpdef
(
"preset #define symbols"
);
if
(
debug
>
0
||
bDumpDefs
)
dumpdef
(
"preset #define symbols"
);
#endif
if
(
pCppIn
!=
stdin
)
rewind
(
pCppIn
);
if
(
pCppIn
!=
stdin
)
rewind
(
pCppIn
);
cppmain
();
/* Process main file */
cppmain
();
/* Process main file */
if
((
i
=
(
ifptr
-
&
ifstack
[
0
]))
!=
0
)
{
if
((
i
=
(
ifptr
-
&
ifstack
[
0
]))
!=
0
)
{
#if OLD_PREPROCESSOR
ciwarn
(
"Inside #ifdef block at end of input, depth = %d"
,
i
);
ciwarn
(
"Inside #ifdef block at end of input, depth = %d"
,
i
);
#else
cierror
(
"Inside #ifdef block at end of input, depth = %d"
,
i
);
cierror
(
"Inside #ifdef block at end of input, depth = %d"
,
i
);
#endif
}
}
#if OSL_DEBUG_LEVEL > 1
if
(
pDefOut
!=
stdout
&&
pDefOut
!=
stderr
)
fclose
(
pDefOut
);
if
(
pDefOut
!=
stdout
&&
pDefOut
!=
stderr
)
fclose
(
pDefOut
);
#endif
if
(
pCppOut
!=
stdout
&&
pCppOut
!=
stderr
)
fclose
(
pCppOut
);
if
(
pCppOut
!=
stdout
&&
pCppOut
!=
stderr
)
fclose
(
pCppOut
);
if
(
errors
>
0
)
{
fprintf
(
stderr
,
(
errors
==
1
)
if
(
errors
>
0
)
{
fprintf
(
stderr
,
(
errors
==
1
)
?
"%d error in preprocessor
\n
"
:
"%d errors in preprocessor
\n
"
,
errors
);
if
(
!
eflag
)
exit
(
IO_ERROR
);
}
if
(
!
eflag
)
exit
(
IO_ERROR
);
}
#ifdef NOMAIN
/* BP */
/* kein exit im der LIB-Version */
return
(
IO_NORMAL
);
return
(
IO_NORMAL
);
#else
exit
(
IO_NORMAL
);
/* No errors or -E option set */
exit
(
IO_NORMAL
);
/* No errors or -E option set */
#endif
}
FILE_LOCAL
void
cppmain
()
/*
* Main process for cpp -- copies tokens from the current input
* stream (main file, include file, or a macro) to the output
* file.
*/
void
cppmain
()
{
int
c
;
/* Current character */
int
counter
;
/* newlines and spaces */
/*
* Explicitly output a #line at the start of cpp output so
* that lint (etc.) knows the name of the original source
* file. If we don't do this explicitly, we may get
* the name of the first #include file instead.
* We also seem to need a blank line following that first #line.
*/
int
c
;
/* Current character */
int
counter
;
/* newlines and spaces */
/*
* Explicitly output a #line at the start of cpp output so
* that lint (etc.) knows the name of the original source
* file. If we don't do this explicitly, we may get
* the name of the first #include file instead.
* We also seem to need a blank line following that first #line.
*/
#ifdef EVALDEFS
if
(
!
bIsInEval
)
if
(
!
bIsInEval
)
#endif
{
sharp
();
PUTCHAR
(
'\n'
);
{
sharp
();
PUTCHAR
(
'\n'
);
}
/*
* This loop is started "from the top" at the beginning of each line
* wrongline is set TRUE in many places if it is necessary to write
* a #line record. (But we don't write them when expanding macros.)
*
* The counter variable has two different uses: at
* the start of a line, it counts the number of blank lines that
* have been skipped over. These are then either output via
* #line records or by outputting explicit blank lines.
* When expanding tokens within a line, the counter remembers
* whether a blank/tab has been output. These are dropped
* at the end of the line, and replaced by a single blank
* within lines.
*/
for
(;;)
{
counter
=
0
;
/* Count empty lines */
for
(;;)
{
/* For each line, ... */
while
(
type
[(
c
=
get
())]
==
SPA
)
/* Skip leading blanks */
;
/* in this line. */
if
(
c
==
'\n'
)
/* If line's all blank, */
++
counter
;
/* Do nothing now */
else
if
(
c
==
'#'
)
{
/* Is 1st non-space '#' */
keepcomments
=
FALSE
;
/* Don't pass comments */
counter
=
control
(
counter
);
/* Yes, do a #command */
keepcomments
=
(
cflag
&&
compiling
);
}
else
if
(
c
==
EOF_CHAR
)
/* At end of file? */
{
break
;
}
else
if
(
!
compiling
)
{
/* #ifdef false? */
skipnl
();
/* Skip to newline */
counter
++
;
/* Count it, too. */
}
else
{
break
;
/* Actual token */
}
}
if
(
c
==
EOF_CHAR
)
/* Exit process at */
break
;
/* End of file */
/*
* This loop is started "from the top" at the beginning of each line
* wrongline is set TRUE in many places if it is necessary to write
* a #line record. (But we don't write them when expanding macros.)
*
* The counter variable has two different uses: at
* the start of a line, it counts the number of blank lines that
* have been skipped over. These are then either output via
* #line records or by outputting explicit blank lines.
* When expanding tokens within a line, the counter remembers
* whether a blank/tab has been output. These are dropped
* at the end of the line, and replaced by a single blank
* within lines.
* If the loop didn't terminate because of end of file, we
* know there is a token to compile. First, clean up after
* absorbing newlines. counter has the number we skipped.
*/
for
(;;)
{
counter
=
0
;
/* Count empty lines */
for
(;;)
{
/* For each line, ... */
while
(
type
[(
c
=
get
())]
==
SPA
)
/* Skip leading blanks */
;
/* in this line. */
if
(
c
==
'\n'
)
/* If line's all blank, */
++
counter
;
/* Do nothing now */
else
if
(
c
==
'#'
)
{
/* Is 1st non-space '#' */
keepcomments
=
FALSE
;
/* Don't pass comments */
counter
=
control
(
counter
);
/* Yes, do a #command */
keepcomments
=
(
cflag
&&
compiling
);
}
else
if
(
c
==
EOF_CHAR
)
/* At end of file? */
if
((
wrongline
&&
infile
->
fp
!=
NULL
)
||
counter
>
4
)
sharp
();
/* Output # line number */
else
{
/* If just a few, stuff */
while
(
--
counter
>=
0
)
/* them out ourselves */
PUTCHAR
(
'\n'
);
}
/*
* Process each token on this line.
*/
unget
();
/* Reread the char. */
for
(;;)
{
/* For the whole line, */
do
{
/* Token concat. loop */
for
(
counter
=
0
;
type
[(
c
=
get
())]
==
SPA
;)
{
break
;
}
else
if
(
!
compiling
)
{
/* #ifdef false? */
skipnl
();
/* Skip to newline */
counter
++
;
/* Count it, too. */
}
else
{
break
;
/* Actual token */
}
}
if
(
c
==
EOF_CHAR
)
/* Exit process at */
break
;
/* End of file */
/*
* If the loop didn't terminate because of end of file, we
* know there is a token to compile. First, clean up after
* absorbing newlines. counter has the number we skipped.
*/
if
((
wrongline
&&
infile
->
fp
!=
NULL
)
||
counter
>
4
)
sharp
();
/* Output # line number */
else
{
/* If just a few, stuff */
while
(
--
counter
>=
0
)
/* them out ourselves */
PUTCHAR
(
'\n'
);
}
/*
* Process each token on this line.
*/
unget
();
/* Reread the char. */
for
(;;)
{
/* For the whole line, */
do
{
/* Token concat. loop */
for
(
counter
=
0
;
type
[(
c
=
get
())]
==
SPA
;)
{
#if COMMENT_INVISIBLE
if
(
c
!=
COM_SEP
)
counter
++
;
#else
counter
++
;
/* Skip over blanks */
if
(
c
!=
COM_SEP
)
#endif
}
if
(
c
==
EOF_CHAR
||
c
==
'\n'
)
goto
end_line
;
/* Exit line loop */
else
if
(
counter
>
0
)
/* If we got any spaces */
PUTCHAR
(
' '
);
/* Output one space */
c
=
macroid
(
c
);
/* Grab the token */
}
while
(
type
[
c
]
==
LET
&&
catenate
());
if
(
c
==
EOF_CHAR
||
c
==
'\n'
)
/* From macro exp error */
goto
end_line
;
/* Exit line loop */
switch
(
type
[
c
])
{
case
LET
:
fputs
(
token
,
pCppOut
);
/* Quite ordinary token */
counter
++
;
/* Skip over blanks */
}
if
(
c
==
EOF_CHAR
||
c
==
'\n'
)
goto
end_line
;
/* Exit line loop */
else
if
(
counter
>
0
)
/* If we got any spaces */
PUTCHAR
(
' '
);
/* Output one space */
c
=
macroid
(
c
);
/* Grab the token */
}
while
(
type
[
c
]
==
LET
&&
catenate
());
if
(
c
==
EOF_CHAR
||
c
==
'\n'
)
/* From macro exp error */
goto
end_line
;
/* Exit line loop */
switch
(
type
[
c
])
{
case
LET
:
fputs
(
token
,
pCppOut
);
/* Quite ordinary token */
#ifdef EVALDEFS
{
int
len
;
if
(
bIsInEval
&&
nEvalOff
+
(
len
=
strlen
(
token
))
<
NEVALBUF
)
{
int
len
;
if
(
bIsInEval
&&
nEvalOff
+
(
len
=
strlen
(
token
))
<
NEVALBUF
)
{
strcpy
(
&
EvalBuf
[
nEvalOff
],
token
);
nEvalOff
+=
len
;
}
strcpy
(
&
EvalBuf
[
nEvalOff
],
token
);
nEvalOff
+=
len
;
}
}
#endif
break
;
break
;
case
DIG
:
/* Output a number */
case
DOT
:
/* Dot may begin floats */
case
DIG
:
/* Output a number */
case
DOT
:
/* Dot may begin floats */
#ifdef EVALDEFS
if
(
bIsInEval
)
scannumber
(
c
,
outputEval
);
else
scannumber
(
c
,
output
);
#else
if
(
bIsInEval
)
scannumber
(
c
,
outputEval
);
else
scannumber
(
c
,
output
);
#else
scannumber
(
c
,
output
);
#endif
break
;
break
;
case
QUO
:
/* char or string const */
scanstring
(
c
,
output
);
/* Copy it to output */
break
;
case
QUO
:
/* char or string const */
scanstring
(
c
,
output
);
/* Copy it to output */
break
;
default:
/* Some other character */
cput
(
c
);
/* Just output it */
default:
/* Some other character */
cput
(
c
);
/* Just output it */
#ifdef EVALDEFS
if
(
bIsInEval
&&
nEvalOff
<
NEVALBUF
)
EvalBuf
[
nEvalOff
++
]
=
c
;
if
(
bIsInEval
&&
nEvalOff
<
NEVALBUF
)
EvalBuf
[
nEvalOff
++
]
=
c
;
#endif
break
;
}
/* Switch ends */
}
/* Line for loop */
end_line:
if
(
c
==
'\n'
)
{
/* Compiling at EOL? */
PUTCHAR
(
'\n'
);
/* Output newline, if */
if
(
infile
->
fp
==
NULL
)
/* Expanding a macro, */
wrongline
=
TRUE
;
/* Output # line later */
}
}
/* Continue until EOF */
break
;
}
/* Switch ends */
}
/* Line for loop */
end_line:
if
(
c
==
'\n'
)
{
/* Compiling at EOL? */
PUTCHAR
(
'\n'
);
/* Output newline, if */
if
(
infile
->
fp
==
NULL
)
/* Expanding a macro, */
wrongline
=
TRUE
;
/* Output # line later */
}
}
/* Continue until EOF */
#ifdef EVALDEFS
if
(
bIsInEval
)
EvalBuf
[
nEvalOff
++
]
=
'\0'
;
if
(
bIsInEval
)
EvalBuf
[
nEvalOff
++
]
=
'\0'
;
#endif
}
void
output
(
int
c
)
/*
* Output one character to stdout -- output() is passed as an
* argument to scanstring()
*/
void
output
(
int
c
)
{
#if COMMENT_INVISIBLE
if
(
c
!=
TOK_SEP
&&
c
!=
COM_SEP
)
if
(
c
!=
TOK_SEP
&&
c
!=
COM_SEP
)
#else
if
(
c
!=
TOK_SEP
)
if
(
c
!=
TOK_SEP
)
#endif
PUTCHAR
(
c
);
PUTCHAR
(
c
);
}
#ifdef EVALDEFS
outputEval
(
c
)
int
c
;
/*
* Output one character to stdout -- output() is passed as an
* argument to scanstring()
*/
int
outputEval
(
int
c
)
{
#if COMMENT_INVISIBLE
if
(
c
!=
TOK_SEP
&&
c
!=
COM_SEP
)
if
(
c
!=
TOK_SEP
&&
c
!=
COM_SEP
)
#else
if
(
c
!=
TOK_SEP
)
if
(
c
!=
TOK_SEP
)
#endif
{
PUTCHAR
(
c
);
if
(
bIsInEval
&&
nEvalOff
<
NEVALBUF
)
EvalBuf
[
nEvalOff
++
]
=
c
;
}
{
PUTCHAR
(
c
);
if
(
bIsInEval
&&
nEvalOff
<
NEVALBUF
)
EvalBuf
[
nEvalOff
++
]
=
c
;
}
}
#endif
FILE_LOCAL
void
sharp
()
/*
* Output a line number line.
*/
void
sharp
()
{
char
*
name
;
if
(
keepcomments
)
/* Make sure # comes on */
PUTCHAR
(
'\n'
);
/* a fresh, new line. */
fprintf
(
pCppOut
,
"#%s %d"
,
LINE_PREFIX
,
line
);
if
(
infile
->
fp
!=
NULL
)
{
name
=
(
infile
->
progname
!=
NULL
)
?
infile
->
progname
:
infile
->
filename
;
if
(
sharpfilename
==
NULL
||
(
sharpfilename
!=
NULL
&&
!
streq
(
name
,
sharpfilename
))
)
{
if
(
sharpfilename
!=
NULL
)
free
(
sharpfilename
);
sharpfilename
=
savestring
(
name
);
fprintf
(
pCppOut
,
"
\"
%s
\"
"
,
name
);
}
char
*
name
;
if
(
keepcomments
)
/* Make sure # comes on */
PUTCHAR
(
'\n'
);
/* a fresh, new line. */
fprintf
(
pCppOut
,
"#%s %d"
,
LINE_PREFIX
,
line
);
if
(
infile
->
fp
!=
NULL
)
{
name
=
(
infile
->
progname
!=
NULL
)
?
infile
->
progname
:
infile
->
filename
;
if
(
sharpfilename
==
NULL
||
(
sharpfilename
!=
NULL
&&
!
streq
(
name
,
sharpfilename
)))
{
if
(
sharpfilename
!=
NULL
)
free
(
sharpfilename
);
sharpfilename
=
savestring
(
name
);
fprintf
(
pCppOut
,
"
\"
%s
\"
"
,
name
);
}
PUTCHAR
(
'\n'
);
wrongline
=
FALSE
;
}
PUTCHAR
(
'\n'
);
wrongline
=
FALSE
;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment