diff options
author | Vincent Sanders <vince@kyllikki.org> | 2015-07-29 00:08:08 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2015-07-29 00:08:08 +0100 |
commit | cb23f1f911523752db095781d0d5fa3e334f1aa5 (patch) | |
tree | 4c9044542443243067f9e57d4710573b49122f74 /src/nsgenbind-ast.c | |
parent | 3f0d06f529fb5efaeb4edd89e61b3421951b8bf2 (diff) | |
download | nsgenbind-cb23f1f911523752db095781d0d5fa3e334f1aa5.tar.gz nsgenbind-cb23f1f911523752db095781d0d5fa3e334f1aa5.tar.bz2 |
Add property generation and add it to prototype construction
Diffstat (limited to 'src/nsgenbind-ast.c')
-rw-r--r-- | src/nsgenbind-ast.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/nsgenbind-ast.c b/src/nsgenbind-ast.c index c1acee1..28326aa 100644 --- a/src/nsgenbind-ast.c +++ b/src/nsgenbind-ast.c @@ -288,6 +288,69 @@ genbind_node_find_type_type(struct genbind_node *node, return found_node; } + +/* exported interface documented in nsgenbind-ast.h */ +struct genbind_node * +genbind_node_find_method(struct genbind_node *node, + struct genbind_node *prev, + enum genbind_method_type methodtype) +{ + struct genbind_node *res_node; + + res_node = genbind_node_find_type( + genbind_node_getnode(node), + prev, GENBIND_NODE_TYPE_METHOD); + while (res_node != NULL) { + struct genbind_node *type_node; + enum genbind_method_type *type; + + type_node = genbind_node_find_type( + genbind_node_getnode(res_node), + NULL, GENBIND_NODE_TYPE_METHOD_TYPE); + + type = (enum genbind_method_type *)genbind_node_getint(type_node); + if (*type == methodtype) { + break; + } + + res_node = genbind_node_find_type( + genbind_node_getnode(node), + res_node, GENBIND_NODE_TYPE_METHOD); + } + + return res_node; +} + + +/* exported interface documented in nsgenbind-ast.h */ +struct genbind_node * +genbind_node_find_method_ident(struct genbind_node *node, + struct genbind_node *prev, + enum genbind_method_type nodetype, + const char *ident) +{ + struct genbind_node *res_node; + char *method_ident; + + res_node = genbind_node_find_method(node, prev, nodetype); + while (res_node != NULL) { + method_ident = genbind_node_gettext( + genbind_node_find_type( + genbind_node_getnode(res_node), + NULL, + GENBIND_NODE_TYPE_IDENT)); + if ((method_ident != NULL) && + strcmp(ident, method_ident) == 0) { + break; + } + + res_node = genbind_node_find_method(node, res_node, nodetype); + } + return res_node; +} + + +/* exported interface documented in nsgenbind-ast.h */ int genbind_cmp_node_type(struct genbind_node *node, void *ctx) { if (node->type == (enum genbind_node_type)ctx) |