ccanlint: add #line directives to examples.
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Oct 2012 10:59:27 +0000 (21:29 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Oct 2012 10:59:27 +0000 (21:29 +1030)
This means error messages come out in the right place.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
tools/ccanlint/tests/examples_compile.c
tools/ccanlint/tests/examples_exist.c

index 0da9d757b680a39052d5bedd078b09a32a9ac344..a43608d640200a125fec9e2c780d88dad6728880 100644 (file)
@@ -204,7 +204,8 @@ static bool looks_internal(char **lines, char **why)
                const char *line = lines[i] + strspn(lines[i], " \t");
                unsigned len = strspn(line, IDENT_CHARS);
 
-               if (!line[0] || cisspace(line[0]) || strstarts(line, "//"))
+               if (!line[0] || cisspace(line[0]) || strstarts(line, "//")
+                   || strstarts(line, "#line"))
                        continue;
 
                assert(line[strlen(line)-1] != '\n');
index 7e9dd97cc8afa379ba227108e3fd0354c80b9aff..073a0b2c215c74e57b1b53cbed309a864c1a5aa9 100644 (file)
@@ -19,7 +19,7 @@
 static char *add_example(struct manifest *m, struct ccan_file *source,
                         struct doc_section *example)
 {
-       char *name;
+       char *name, *linemarker;
        unsigned int i;
        int fd;
        struct ccan_file *f;
@@ -43,6 +43,11 @@ static char *add_example(struct manifest *m, struct ccan_file *source,
                return talloc_asprintf(m, "Creating temporary file %s: %s",
                                       f->fullname, strerror(errno));
 
+       /* Add #line to demark where we are from, so errors are correct! */
+       linemarker = talloc_asprintf(f, "#line %i \"%s\"\n",
+                                    example->srcline+2, source->fullname);
+       write(fd, linemarker, strlen(linemarker));
+
        for (i = 0; i < example->num_lines; i++) {
                if (write(fd, example->lines[i], strlen(example->lines[i]))
                    != strlen(example->lines[i])