summaryrefslogtreecommitdiff
path: root/src/nsgenbind-ast.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2015-07-29 00:08:08 +0100
committerVincent Sanders <vince@kyllikki.org>2015-07-29 00:08:08 +0100
commitcb23f1f911523752db095781d0d5fa3e334f1aa5 (patch)
tree4c9044542443243067f9e57d4710573b49122f74 /src/nsgenbind-ast.c
parent3f0d06f529fb5efaeb4edd89e61b3421951b8bf2 (diff)
downloadnsgenbind-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.c63
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)