diff options
Diffstat (limited to 'src/jsapi-libdom.c')
-rw-r--r-- | src/jsapi-libdom.c | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c index bd1dbbe..2edfc83 100644 --- a/src/jsapi-libdom.c +++ b/src/jsapi-libdom.c @@ -819,6 +819,33 @@ binding_has_private(struct genbind_node *binding_list) return false; } + +/** count the number of methods or properties for an interface */ +static int +enumerate_interface_own(struct webidl_node *interface_node, + enum webidl_node_type node_type) +{ + int count = 0; + struct webidl_node *members_node; + + members_node = webidl_node_find_type( + webidl_node_getnode(interface_node), + NULL, + WEBIDL_NODE_TYPE_LIST); + while (members_node != NULL) { + count += webidl_node_enumerate_type( + webidl_node_getnode(members_node), + node_type); + + members_node = webidl_node_find_type( + webidl_node_getnode(interface_node), + members_node, + WEBIDL_NODE_TYPE_LIST); + } + + return count; +} + /* build interface map and return the first interface */ static struct genbind_node * build_interface_map(struct genbind_node *binding_node, @@ -881,6 +908,17 @@ build_interface_map(struct genbind_node *binding_node, return NULL; } + /* enumerate the number of functions */ + interfaces[idx].own_functions = enumerate_interface_own( + interfaces[idx].widl_node, + WEBIDL_NODE_TYPE_OPERATION); + + /* enumerate the number of properties */ + interfaces[idx].own_properties = enumerate_interface_own( + interfaces[idx].widl_node, + WEBIDL_NODE_TYPE_ATTRIBUTE); + + /* extract the name of the inherited interface (if any) */ interfaces[idx].inherit_name = webidl_node_gettext( webidl_node_find_type( webidl_node_getnode(interfaces[idx].widl_node), @@ -923,14 +961,19 @@ build_interface_map(struct genbind_node *binding_node, /* show the interface map */ if (options->verbose) { for (idx = 0; idx < interfacec; idx++ ) { - printf("interface num:%d name:%s node:%p widl:%p inherit:%s inherit idx:%d refcount:%d\n", + printf("interface num:%d\n" + " name:%s node:%p widl:%p\n" + " inherit:%s inherit idx:%d refcount:%d\n" + " own functions:%d own properties:%d\n", idx, interfaces[idx].name, interfaces[idx].node, interfaces[idx].widl_node, interfaces[idx].inherit_name, interfaces[idx].inherit_idx, - interfaces[idx].refcount); + interfaces[idx].refcount, + interfaces[idx].own_functions, + interfaces[idx].own_properties); } } |