summaryrefslogtreecommitdiff
path: root/src/nsgenbind-ast.c
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 17:52:21 +0000
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-20 17:52:21 +0000
commit19f0eb49df62e8094d6c8fcd5f8d7522b07ec3d3 (patch)
tree2f6f5d52bcb66d5651c5e092b30bab9bb23a37fd /src/nsgenbind-ast.c
parent6fdf1ace46adff8e9cd774fd7d8d06266996d51e (diff)
downloadnsgenbind-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.c33
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;
}