diff options
author | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-27 12:18:40 +0000 |
---|---|---|
committer | Vincent Sanders <vincent.sanders@collabora.co.uk> | 2012-11-27 12:18:40 +0000 |
commit | b29ff13b599730bf3eaec8f142e584f23e78c1fb (patch) | |
tree | 5689c409360e1a95afe2856ae7925455e00e57fc /src/webidl-parser.y | |
parent | 6f54ba5f6a2008191c2bb3435f8015ae70bcf156 (diff) | |
download | nsgenbind-b29ff13b599730bf3eaec8f142e584f23e78c1fb.tar.gz nsgenbind-b29ff13b599730bf3eaec8f142e584f23e78c1fb.tar.bz2 |
add type suffix annotations to webidl AST
Diffstat (limited to 'src/webidl-parser.y')
-rw-r--r-- | src/webidl-parser.y | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/webidl-parser.y b/src/webidl-parser.y index f719110..bf79e8f 100644 --- a/src/webidl-parser.y +++ b/src/webidl-parser.y @@ -163,6 +163,9 @@ webidl_error(YYLTYPE *locp, struct webidl_node **winbind_ast, const char *str) %type <node> UnsignedIntegerType %type <node> IntegerType +%type <node> TypeSuffix +%type <node> TypeSuffixStartingWithArray + %type <node> FloatLiteral %type <node> BooleanLiteral %type <node> ConstValue @@ -1099,16 +1102,19 @@ UnionMemberTypes: /* [62] */ NonAnyType: PrimitiveType TypeSuffix + { + $$ = webidl_node_prepend($1, $2); + } | TOK_STRING TypeSuffix { - $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_STRING); + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_STRING); } | TOK_IDENTIFIER TypeSuffix { struct webidl_node *type; - type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_USER); + type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_USER); $$ = webidl_node_new(WEBIDL_NODE_TYPE_IDENT, type, $1); } | @@ -1119,12 +1125,12 @@ NonAnyType: | TOK_OBJECT TypeSuffix { - $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_OBJECT); + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_OBJECT); } | TOK_DATE TypeSuffix { - $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_DATE); + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_DATE); } ; @@ -1237,17 +1243,32 @@ OptionalLong: /* [70] */ TypeSuffix: /* empty */ + { + $$ = NULL; + } | '[' ']' TypeSuffix + { + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_ARRAY, $3, NULL); + } | '?' TypeSuffixStartingWithArray + { + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_NULLABLE, $2, NULL); + } ; /* [71] */ TypeSuffixStartingWithArray: /* empty */ + { + $$ = NULL; + } | '[' ']' TypeSuffix + { + $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_ARRAY, $3, NULL); + } ; /* [72] */ |