summaryrefslogtreecommitdiff
path: root/src/webidl-ast.c
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2013-01-28 16:27:37 +0000
committerVincent Sanders <vincent.sanders@collabora.co.uk>2013-01-28 16:27:37 +0000
commit6f13eb3a9984d00c2b803b9b435a911c0081d84f (patch)
tree7413f0a8ced8c8da9b8c1397190009c1ffd08765 /src/webidl-ast.c
parent515dc7e649e1276c131b9ef4e0e1c7ff4e19a69f (diff)
downloadnsgenbind-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.c30
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";
}