summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2010-09-19 11:33:38 -0300
committerJohan Dahlin <johan@gnome.org>2010-09-19 12:04:20 -0300
commitcb61330eb495786bf8232ebcb51b0d6d9a753ce7 (patch)
tree544f43868003c027ad127e497ba9f959da12da37
parent9180641a496b26b5d5a720a2f2a61c710f094d2a (diff)
Save the line number of a source comment
-rw-r--r--giscanner/annotationparser.py3
-rw-r--r--giscanner/giscannermodule.c11
-rw-r--r--giscanner/scannerlexer.l17
-rw-r--r--giscanner/sourcescanner.c10
-rw-r--r--giscanner/sourcescanner.h10
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;
};