Commit 637ee8ae authored by Rusty Russell's avatar Rusty Russell

ccanlint: ignore comments when parsing examples.

We insert comments when we massage or combine examples; don't let these
throw off our analysis (as happened for idtree.h).
parent 79c5dd6d
...@@ -291,6 +291,19 @@ static char **combine(const void *ctx, char **lines, char **prev) ...@@ -291,6 +291,19 @@ static char **combine(const void *ctx, char **lines, char **prev)
return ret; return ret;
} }
/* Only handles very simple comments. */
static char *strip_comment(const void *ctx, const char *orig_line)
{
char *p, *ret = talloc_strdup(ctx, orig_line);
p = strstr(ret, "/*");
if (!p)
p = strstr(ret, "//");
if (p)
*p = '\0';
return ret;
}
static char *mangle(struct manifest *m, char **lines) static char *mangle(struct manifest *m, char **lines)
{ {
char *ret, *use_funcs = NULL, *why; char *ret, *use_funcs = NULL, *why;
...@@ -334,28 +347,30 @@ static char *mangle(struct manifest *m, char **lines) ...@@ -334,28 +347,30 @@ static char *mangle(struct manifest *m, char **lines)
/* Primitive, very primitive. */ /* Primitive, very primitive. */
for (i = 0; lines[i]; i++) { for (i = 0; lines[i]; i++) {
char *line = strip_comment(ret, lines[i]);
/* } at start of line ends a function. */ /* } at start of line ends a function. */
if (in_function) { if (in_function) {
if (lines[i][0] == '}') if (line[0] == '}')
in_function = false; in_function = false;
} else { } else {
/* Character at start of line, with ( and no ; /* Character at start of line, with ( and no ;
* == function start. Ignore comments. */ * == function start. Ignore comments. */
if (!isspace(lines[i][0]) if (!isspace(line[0])
&& strchr(lines[i], '(') && strchr(line, '(')
&& !strchr(lines[i], ';') && !strchr(line, ';')
&& !strstr(lines[i], "//")) { && !strstr(line, "//")) {
in_function = true; in_function = true;
if (strncmp(lines[i], "int main", 8) == 0) if (strncmp(line, "int main", 8) == 0)
has_main = true; has_main = true;
if (strncmp(lines[i], "static", 6) == 0) { if (strncmp(line, "static", 6) == 0) {
use_funcs = add_func(use_funcs, use_funcs = add_func(use_funcs,
lines[i]); line);
} }
} }
} }
/* ... means elided code. */ /* ... means elided code. */
if (strcmp(lines[i], "...") == 0) { if (strcmp(line, "...") == 0) {
if (!in_function && !has_main if (!in_function && !has_main
&& looks_internal(lines + i + 1, &why)) { && looks_internal(lines + i + 1, &why)) {
/* This implies we start a function here. */ /* This implies we start a function here. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment