summaryrefslogtreecommitdiff
path: root/src/nsgenbind-parser.y
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2015-09-28 07:59:50 +0100
committerVincent Sanders <vince@kyllikki.org>2015-09-28 07:59:50 +0100
commitc80955dcc6b663c250a1f2552b626770fbd46a94 (patch)
tree4b6b98eb03095cbc722b7f5bc2e0bbfa9568e8b3 /src/nsgenbind-parser.y
parent767e69459ca7b4c13fe93875177040ab3eec8b56 (diff)
downloadnsgenbind-c80955dcc6b663c250a1f2552b626770fbd46a94.tar.gz
nsgenbind-c80955dcc6b663c250a1f2552b626770fbd46a94.tar.bz2
annotates binding AST with source linenumber and file
Uses annotated AST to put line directives in the generated source so any code errors in the binding can be easily located.
Diffstat (limited to 'src/nsgenbind-parser.y')
-rw-r--r--src/nsgenbind-parser.y18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/nsgenbind-parser.y b/src/nsgenbind-parser.y
index b52d0d0..a3e5609 100644
--- a/src/nsgenbind-parser.y
+++ b/src/nsgenbind-parser.y
@@ -104,12 +104,15 @@ static struct genbind_node *
add_method(struct genbind_node **genbind_ast,
long methodtype,
struct genbind_node *declarator,
- char *cdata)
+ char *cdata,
+ int lineno,
+ char *filename)
{
struct genbind_node *res_node;
struct genbind_node *method_node;
struct genbind_node *class_node;
struct genbind_node *cdata_node;
+ struct genbind_node *location_node;
char *class_name;
/* extract the class name from the declarator */
@@ -131,11 +134,18 @@ add_method(struct genbind_node **genbind_ast,
cdata);
}
+
+ location_node = genbind_new_node(GENBIND_NODE_TYPE_FILE,
+ genbind_new_node(GENBIND_NODE_TYPE_LINE,
+ cdata_node,
+ (void *)lineno),
+ strdup(filename));
+
/* generate method node */
method_node = genbind_new_node(GENBIND_NODE_TYPE_METHOD,
NULL,
genbind_new_node(GENBIND_NODE_TYPE_METHOD_TYPE,
- cdata_node,
+ location_node,
(void *)methodtype));
class_node = genbind_node_find_type_ident(*genbind_ast,
@@ -396,12 +406,12 @@ ParameterList:
Method:
MethodType MethodDeclarator CBlock
{
- $$ = add_method(genbind_ast, $1, $2, $3);
+ $$ = add_method(genbind_ast, $1, $2, $3, @1.first_line, @1.filename);
}
|
MethodType MethodDeclarator ';'
{
- $$ = add_method(genbind_ast, $1, $2, NULL);
+ $$ = add_method(genbind_ast, $1, $2, NULL, @1.first_line, @1.filename);
}
;