diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2013-01-28 16:27:37 +0000 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2013-01-28 16:27:37 +0000 |
commit | 6f13eb3a9984d00c2b803b9b435a911c0081d84f (patch) | |
tree | 7413f0a8ced8c8da9b8c1397190009c1ffd08765 /src/webidl-ast.c | |
parent | 515dc7e649e1276c131b9ef4e0e1c7ff4e19a69f (diff) | |
download | nsgenbind-6f13eb3a9984d00c2b803b9b435a911c0081d84f.tar.gz nsgenbind-6f13eb3a9984d00c2b803b9b435a911c0081d84f.tar.bz2 |
annotate the webIDL AST with extended attributes
Diffstat (limited to 'src/webidl-ast.c')
-rw-r--r-- | src/webidl-ast.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/webidl-ast.c b/src/webidl-ast.c index 7957f02..d75a186 100644 --- a/src/webidl-ast.c +++ b/src/webidl-ast.c @@ -78,15 +78,33 @@ webidl_node_append(struct webidl_node *list, struct webidl_node *node) struct webidl_node * webidl_node_add(struct webidl_node *node, struct webidl_node *list) { - struct webidl_node *node_list; + if (node == NULL) { + return list; + } - node_list = webidl_node_getnode(node); - if (node_list == NULL) { + /* this does not use webidl_node_getnode() as it cannot + * determine between an empty node and a node which is not a + * list type + */ + switch (node->type) { + case WEBIDL_NODE_TYPE_ROOT: + case WEBIDL_NODE_TYPE_INTERFACE: + case WEBIDL_NODE_TYPE_LIST: + case WEBIDL_NODE_TYPE_EXTENDED_ATTRIBUTE: + 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: + case WEBIDL_NODE_TYPE_CONST: + break; + + default: /* not a node type node */ return list; } - node->r.node = webidl_node_prepend(node_list, list); + node->r.node = webidl_node_prepend(node->r.node, list); return node; } @@ -260,6 +278,7 @@ struct webidl_node *webidl_node_getnode(struct webidl_node *node) case WEBIDL_NODE_TYPE_ROOT: case WEBIDL_NODE_TYPE_INTERFACE: case WEBIDL_NODE_TYPE_LIST: + case WEBIDL_NODE_TYPE_EXTENDED_ATTRIBUTE: case WEBIDL_NODE_TYPE_ATTRIBUTE: case WEBIDL_NODE_TYPE_OPERATION: case WEBIDL_NODE_TYPE_OPTIONAL_ARGUMENT: @@ -332,6 +351,9 @@ static const char *webidl_node_type_to_str(enum webidl_node_type type) case WEBIDL_NODE_TYPE_LITERAL_INT: return "Literal (int)"; + case WEBIDL_NODE_TYPE_EXTENDED_ATTRIBUTE: + return "Extended Attribute"; + default: return "Unknown"; } |