diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-09-24 20:17:03 +0100 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-09-24 20:17:03 +0100 |
commit | b5c59d1138c704afd09c4716faabe79f04a80616 (patch) | |
tree | 6a850ca46c373636dd8d8911665ac6cad94f7bef /src/webidl-ast.c | |
parent | 20f9ab6b2c89a9a9edf00f052c912f139e7c4a38 (diff) | |
download | nsgenbind-b5c59d1138c704afd09c4716faabe79f04a80616.tar.gz nsgenbind-b5c59d1138c704afd09c4716faabe79f04a80616.tar.bz2 |
add interface function argument and type processing
Diffstat (limited to 'src/webidl-ast.c')
-rw-r--r-- | src/webidl-ast.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/src/webidl-ast.c b/src/webidl-ast.c index d698fff..53ba7e6 100644 --- a/src/webidl-ast.c +++ b/src/webidl-ast.c @@ -30,21 +30,40 @@ struct webidl_node { } r; }; +/* insert node at beginning of a list */ +struct webidl_node * +webidl_node_prepend(struct webidl_node *list, struct webidl_node *node) +{ + if (node == NULL) { + return list; /* no node to prepend - return existing list */ + } + node->l = list; + return node; +} + +/* append node at end of a list */ struct webidl_node * -webidl_node_link(struct webidl_node *tgt, struct webidl_node *src) +webidl_node_append(struct webidl_node *list, struct webidl_node *node) { - if (tgt != NULL) { - tgt->l = src; - return tgt; - } - return src; + struct webidl_node *cur = list; + + if (cur == NULL) { + return node; /* no existing list so just return node */ + } + + while (cur->l != NULL) { + cur = cur->l; + } + cur->l = node; + + return list; } struct webidl_node * webidl_add_interface_member(struct webidl_node *list, struct webidl_node *new) { - return webidl_node_link(new, list); + return webidl_node_prepend(list, new); } struct webidl_node *webidl_node_new(enum webidl_node_type type, struct webidl_node *l, void *r) @@ -178,6 +197,9 @@ struct webidl_node *webidl_node_getnode(struct webidl_node *node) case WEBIDL_NODE_TYPE_INTERFACE_MEMBERS: case WEBIDL_NODE_TYPE_ATTRIBUTE: case WEBIDL_NODE_TYPE_OPERATION: + case WEBIDL_NODE_TYPE_OPTIONAL_ARGUMENT: + case WEBIDL_NODE_TYPE_ARGUMENT: + case WEBIDL_NODE_TYPE_TYPE: return node->r.node; default: break; @@ -211,6 +233,24 @@ static const char *webidl_node_type_to_str(enum webidl_node_type type) case WEBIDL_NODE_TYPE_OPERATION: return "Operation"; + case WEBIDL_NODE_TYPE_OPTIONAL_ARGUMENT: + return "Argument(opt)"; + + case WEBIDL_NODE_TYPE_ARGUMENT: + return "Argument"; + + case WEBIDL_NODE_TYPE_ELLIPSIS: + return "Ellipsis"; + + case WEBIDL_NODE_TYPE_TYPE: + return "Type"; + + case WEBIDL_NODE_TYPE_TYPE_BASE: + return "Base"; + + case WEBIDL_NODE_TYPE_TYPE_MODIFIER: + return "Modifier"; + default: return "Unknown"; } |