mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2025-12-21 21:17:37 -08:00
Package-Manager: Portage-3.0.20, Repoman-3.0.3 Signed-off-by: Akinori Hattori <hattya@gentoo.org>
44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
--- a/src/c-parser.c
|
|
+++ b/src/c-parser.c
|
|
@@ -1668,6 +1668,7 @@
|
|
{
|
|
static ScmObj trigger_line = SCM_FALSE;
|
|
ScmObj line_str;
|
|
+ ScmObj rx;
|
|
|
|
/* skip the first line '# 1 "<stdin>"' */
|
|
Scm_ReadLineUnsafe(SCM_PORT(in));
|
|
@@ -1682,7 +1683,22 @@
|
|
}
|
|
}
|
|
|
|
- while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
|
|
+ rx = Scm_RegComp(SCM_STRING(SCM_MAKE_STR_IMMUTABLE("^#\\s+\\d+\\s+\"<stdin>\"")), 0);
|
|
+ line_str = Scm_ReadLineUnsafe(SCM_PORT(in));
|
|
+ while (!SCM_EOFP(line_str)) {
|
|
+ ScmObj body_str = line_str;
|
|
+ while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))
|
|
+ && SCM_STRING_LENGTH(line_str) >= 13
|
|
+#ifdef SCM_REGEXP_MULTI_LINE
|
|
+ && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str), SCM_UNDEFINED, SCM_UNDEFINED))) {
|
|
+#else
|
|
+ && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str)))) {
|
|
+#endif
|
|
+ if (SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
|
|
+ Scm_Error("[bug] unexpected EOF while parsing macro body");
|
|
+ }
|
|
+ body_str = Scm_StringAppend2(SCM_STRING(body_str), SCM_STRING(line_str));
|
|
+ }
|
|
if (SCM_NULLP(macro_list)) {
|
|
Scm_Error("[bug] lost macro body");
|
|
} else {
|
|
@@ -1690,7 +1706,7 @@
|
|
macro_list = SCM_CDR(macro_list);
|
|
Scm_FilenameSet(SCM_CAAR(pos_name_args));
|
|
Scm_LineNumberSet(SCM_INT_VALUE(SCM_CDAR(pos_name_args)));
|
|
- parse_macro_body(SCM_CADR(pos_name_args), SCM_CDDR(pos_name_args), line_str);
|
|
+ parse_macro_body(SCM_CADR(pos_name_args), SCM_CDDR(pos_name_args), body_str);
|
|
}
|
|
}
|
|
|