diff options
author | Johan Dahlin <johan@gnome.org> | 2010-09-19 11:33:38 -0300 |
---|---|---|
committer | Johan Dahlin <johan@gnome.org> | 2010-09-19 12:04:20 -0300 |
commit | cb61330eb495786bf8232ebcb51b0d6d9a753ce7 (patch) | |
tree | 544f43868003c027ad127e497ba9f959da12da37 /giscanner | |
parent | 9180641a496b26b5d5a720a2f2a61c710f094d2a (diff) |
Save the line number of a source comment
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/annotationparser.py | 3 | ||||
-rw-r--r-- | giscanner/giscannermodule.c | 11 | ||||
-rw-r--r-- | giscanner/scannerlexer.l | 17 | ||||
-rw-r--r-- | giscanner/sourcescanner.c | 10 | ||||
-rw-r--r-- | giscanner/sourcescanner.h | 10 |
5 files changed, 40 insertions, 11 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index 2aa198e..ea17578 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -139,7 +139,7 @@ class AnnotationParser(object): self._parse_comment(comment) return self._blocks - def _parse_comment(self, comment): + def _parse_comment(self, cmt): # We're looking for gtk-doc comments here, they look like this: # /** # * symbol: @@ -153,6 +153,7 @@ class AnnotationParser(object): # - signal: GtkWidget::destroy # - property: GtkWidget:visible # + comment, lineno = cmt comment = comment.lstrip() if not comment.startswith(_COMMENT_HEADER): return diff --git a/giscanner/giscannermodule.c b/giscanner/giscannermodule.c index 2d2e073..b4aae79 100644 --- a/giscanner/giscannermodule.c +++ b/giscanner/giscannermodule.c @@ -517,14 +517,17 @@ pygi_source_scanner_get_comments (PyGISourceScanner *self) GSList *l, *comments; PyObject *list; int i = 0; - + comments = gi_source_scanner_get_comments (self->scanner); list = PyList_New (g_slist_length (comments)); - + for (l = comments; l; l = l->next) { - PyObject *item = PyString_FromString (l->data); - PyList_SetItem (list, i++, item); + GISourceComment *comment = l->data; + PyObject *item = Py_BuildValue ("(ssi)", comment->comment, + comment->filename, + comment->line); + PyList_SET_ITEM (list, i++, item); Py_INCREF (item); } diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l index ff1ee0f..4fa40f6 100644 --- a/giscanner/scannerlexer.l +++ b/giscanner/scannerlexer.l @@ -210,17 +210,21 @@ yywrap (void) static void parse_comment (GISourceScanner *scanner) { - GString *comment; + GString *string; int c1, c2; + GISourceComment *comment; + int comment_lineno; c1 = input(); c2 = input(); - comment = g_string_new (""); + string = g_string_new (""); + + comment_lineno = lineno; while (c2 != EOF && !(c1 == '*' && c2 == '/')) { - g_string_append_c (comment, c1); + g_string_append_c (string, c1); if (c1 == '\n') lineno++; @@ -230,8 +234,13 @@ parse_comment (GISourceScanner *scanner) } + comment = g_slice_new (GISourceComment); + comment->comment = g_string_free (string, FALSE); + comment->line = comment_lineno; + comment->filename = g_strdup(scanner->current_filename); + scanner->comments = g_slist_prepend (scanner->comments, - g_string_free (comment, FALSE)); + comment); } static int diff --git a/giscanner/sourcescanner.c b/giscanner/sourcescanner.c index 14e3a3b..e519a94 100644 --- a/giscanner/sourcescanner.c +++ b/giscanner/sourcescanner.c @@ -194,6 +194,14 @@ gi_source_scanner_new (void) return scanner; } +static void +gi_source_comment_free (GISourceComment *comment) +{ + g_free (comment->comment); + g_free (comment->filename); + g_slice_free (GISourceComment, comment); +} + void gi_source_scanner_free (GISourceScanner *scanner) { @@ -202,7 +210,7 @@ gi_source_scanner_free (GISourceScanner *scanner) g_hash_table_destroy (scanner->typedef_table); g_hash_table_destroy (scanner->struct_or_union_or_enum_table); - g_slist_foreach (scanner->comments, (GFunc)g_free, NULL); + g_slist_foreach (scanner->comments, (GFunc)gi_source_comment_free, NULL); g_slist_free (scanner->comments); g_slist_foreach (scanner->symbols, (GFunc)gi_source_symbol_unref, NULL); g_slist_free (scanner->symbols); diff --git a/giscanner/sourcescanner.h b/giscanner/sourcescanner.h index 581b6b1..a7bc176 100644 --- a/giscanner/sourcescanner.h +++ b/giscanner/sourcescanner.h @@ -28,6 +28,7 @@ G_BEGIN_DECLS +typedef struct _GISourceComment GISourceComment; typedef struct _GISourceScanner GISourceScanner; typedef struct _GISourceSymbol GISourceSymbol; typedef struct _GISourceType GISourceType; @@ -95,13 +96,20 @@ typedef enum UNARY_LOGICAL_NEGATION } UnaryOperator; +struct _GISourceComment +{ + char *comment; + char *filename; + int line; +}; + struct _GISourceScanner { char *current_filename; gboolean macro_scan; GSList *symbols; GList *filenames; - GSList *comments; + GSList *comments; /* _GIComment */ GHashTable *typedef_table; GHashTable *struct_or_union_or_enum_table; }; |