From c80955dcc6b663c250a1f2552b626770fbd46a94 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 28 Sep 2015 07:59:50 +0100 Subject: 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. --- src/nsgenbind-parser.y | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/nsgenbind-parser.y') 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); } ; -- cgit v1.2.3