diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-20 17:52:21 +0000 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-20 17:52:21 +0000 |
commit | 19f0eb49df62e8094d6c8fcd5f8d7522b07ec3d3 (patch) | |
tree | 2f6f5d52bcb66d5651c5e092b30bab9bb23a37fd /src/nsgenbind-ast.c | |
parent | 6fdf1ace46adff8e9cd774fd7d8d06266996d51e (diff) | |
download | nsgenbind-19f0eb49df62e8094d6c8fcd5f8d7522b07ec3d3.tar.gz nsgenbind-19f0eb49df62e8094d6c8fcd5f8d7522b07ec3d3.tar.bz2 |
implement unshared output in property specifier
Diffstat (limited to 'src/nsgenbind-ast.c')
-rw-r--r-- | src/nsgenbind-ast.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/nsgenbind-ast.c b/src/nsgenbind-ast.c index 09ce8ce..a8a8361 100644 --- a/src/nsgenbind-ast.c +++ b/src/nsgenbind-ast.c @@ -118,7 +118,7 @@ genbind_node_find(struct genbind_node *node, return NULL; } -/* exported interface defined in nsgenbind-ast.h */ +/* exported interface documented in nsgenbind-ast.h */ struct genbind_node * genbind_node_find_type(struct genbind_node *node, struct genbind_node *prev, @@ -130,6 +130,7 @@ genbind_node_find_type(struct genbind_node *node, (void *)type); } +/* exported interface documented in nsgenbind-ast.h */ struct genbind_node * genbind_node_find_type_ident(struct genbind_node *node, struct genbind_node *prev, @@ -143,7 +144,7 @@ genbind_node_find_type_ident(struct genbind_node *node, while (found_node != NULL) { - + /* look for an ident node */ ident_node = genbind_node_find_type(genbind_node_getnode(found_node), NULL, GENBIND_NODE_TYPE_IDENT); @@ -154,7 +155,35 @@ genbind_node_find_type_ident(struct genbind_node *node, /* look for next matching node */ found_node = genbind_node_find_type(node, found_node, type); + } + return found_node; +} + +/* exported interface documented in nsgenbind-ast.h */ +struct genbind_node * +genbind_node_find_type_type(struct genbind_node *node, + struct genbind_node *prev, + enum genbind_node_type type, + const char *ident) +{ + struct genbind_node *found_node; + struct genbind_node *ident_node; + found_node = genbind_node_find_type(node, prev, type); + + + while (found_node != NULL) { + /* look for a type node */ + ident_node = genbind_node_find_type(genbind_node_getnode(found_node), + NULL, + GENBIND_NODE_TYPE_TYPE); + if (ident_node != NULL) { + if (strcmp(ident_node->r.text, ident) == 0) + break; + } + + /* look for next matching node */ + found_node = genbind_node_find_type(node, found_node, type); } return found_node; } |