From b29ff13b599730bf3eaec8f142e584f23e78c1fb Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 27 Nov 2012 12:18:40 +0000 Subject: add type suffix annotations to webidl AST --- src/webidl-parser.y | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'src/webidl-parser.y') 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 UnsignedIntegerType %type IntegerType +%type TypeSuffix +%type TypeSuffixStartingWithArray + %type FloatLiteral %type BooleanLiteral %type 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] */ -- cgit v1.2.3