diff options
author | Vincent Sanders <vince@kyllikki.org> | 2015-09-28 07:59:50 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2015-09-28 07:59:50 +0100 |
commit | c80955dcc6b663c250a1f2552b626770fbd46a94 (patch) | |
tree | 4b6b98eb03095cbc722b7f5bc2e0bbfa9568e8b3 /src/nsgenbind-parser.y | |
parent | 767e69459ca7b4c13fe93875177040ab3eec8b56 (diff) | |
download | nsgenbind-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.y | 18 |
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); } ; |