Matthias Klose <d...@debian.org> writes: > you could use -P, or fix the parsing.
a first minimal hackish patch (not using -P) likely this is not really good enough yet (but yes it compiles and passes the tests) Maybe a version using -P just using the last n lines of the cpp output would be better? Index: gauche-c-wrapper-0.6.1/src/c-parser.c =================================================================== --- gauche-c-wrapper-0.6.1.orig/src/c-parser.c +++ gauche-c-wrapper-0.6.1/src/c-parser.c @@ -1668,6 +1668,7 @@ ScmObj Scm_ParseMacroCode(ScmObj in, Scm { static ScmObj trigger_line = SCM_FALSE; ScmObj line_str; + ScmObj next_line_str; /* one line look-ahead */ /* skip the first line '# 1 "<stdin>"' */ Scm_ReadLineUnsafe(SCM_PORT(in)); @@ -1682,7 +1683,20 @@ ScmObj Scm_ParseMacroCode(ScmObj in, Scm } } - while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) { + line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); + next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); + while (!SCM_EOFP(line_str)) { + /* skip lines starting with "# " and join with following line */ + while (!SCM_EOFP(next_line_str) + && (SCM_STRING_LENGTH(next_line_str)>2) + && (Scm_StringRef(SCM_STRING(next_line_str),0,0)==35) + && (Scm_StringRef(SCM_STRING(next_line_str),1,0)==32)) { + next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); + if (!SCM_EOFP(next_line_str)) { + line_str = Scm_StringAppend2(SCM_STRING(line_str), SCM_STRING(next_line_str)); + next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); + } + } if (SCM_NULLP(macro_list)) { Scm_Error("[bug] lost macro body"); } else { @@ -1691,6 +1705,8 @@ ScmObj Scm_ParseMacroCode(ScmObj in, Scm 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); + line_str = next_line_str; + next_line_str = Scm_ReadLineUnsafe(SCM_PORT(in)); } }